o
    "7h                     @   sr   d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ G dd de	eZG d	d
 d
eZdS )    )
prototypes)GEOSCoordSeq)GEOSException)GEOSGeometryLinearGeometryMixin)Point)numpyc                       s   e Zd ZejZdZdZ fddZdd Z	dd Z
d	d
 ZeZdd Zdd Zdd Zedd ZeZdd Zedd Zedd Zedd Zedd Z  ZS )
LineString   Tc                    s  t |dkr|d }n|}t|ttfs trt|tjs td|d}t |}|s8t j	| 
d|d dS || jk rItd| jj| j|f t|ttf }|rl|j}t |dkr`td	| |d  |d }n+d}|D ]&}	t|	tttfs~td
|du rt |	}| | qpt |	|krtdqptt||t|dkd}
|dkr|
jn|
j}t|D ]#}|r||ddf }nt|| tr|| j}n|| }||| qt j	| 
|
j|d dS )a  
        Initialize on the given sequence -- may take lists, tuples, NumPy arrays
        of X,Y pairs, or Point objects.  If Point objects are used, ownership is
        _not_ transferred to the LineString object.

        Examples:
         ls = LineString((1, 1), (2, 2))
         ls = LineString([(1, 1), (2, 2)])
         ls = LineString(array([(1, 1), (2, 2)]))
         ls = LineString(Point(1, 1), Point(2, 2))
           r   z-Invalid initialization input for LineStrings.sridN)r   z'%s requires at least %d points, got %s.r
   zToo many dimensions.z4Each coordinate should be a sequence (list or tuple)Dimension mismatch.   z)len
isinstancetuplelistr   ndarray	TypeErrorgetsuper__init__
_init_func
_minlength
ValueError	__class____name__shape	_checkdimr   r   capi	create_csbool_set_point_3d_set_point_2drangeptr)selfargskwargscoordsr   ncoordsnumpy_coordsr   ndimcoordcspoint_setteripoint_coordsr    w/var/www/epreuve.sigeris.cm/public_html/epreuve/venv/lib/python3.10/site-packages/django/contrib/gis/geos/linestring.pyr      sj   



	
zLineString.__init__c                 c   s"    t t| D ]}| | V  qdS )z%Allow iteration over this LineString.N)r&   r   )r(   r2   r5   r5   r6   __iter__c   s   zLineString.__iter__c                 C   s
   t | jS )z/Return the number of points in this LineString.)r   _csr(   r5   r5   r6   __len__h   s   
zLineString.__len__c                 C   s
   | j | S Nr8   )r(   indexr5   r5   r6   _get_single_externall   s   
zLineString._get_single_externalc           
      C   s   | j j}| j j}| j}tt|||d}t|D ]\}}|||< q| |j	}	|	r@t
| j	 |	| _	|d ur:|| _|   d S td)Nr   z3Geometry resulting from slice deletion was invalid.)r8   dimshaszr   r   r!   r"   	enumerater   r'   destroy_geom
_post_initr   )
r(   lengthitemsr.   r@   r   r0   r2   cr'   r5   r5   r6   	_set_listq   s   
zLineString._set_listc                 C   s   || j |< d S r;   r<   )r(   r=   valuer5   r5   r6   _set_single   s   zLineString._set_singlec                 C   s   |dvrt dd S )N)r
   r   r   )r   )r(   dimr5   r5   r6   r       s   zLineString._checkdimc                 C   s   | j jS )zDReturn a tuple version of the geometry from the coordinate sequence.)r8   r   r9   r5   r5   r6   r      s   zLineString.tuplec                    s,    fddt t| D }trt|S |S )z{
        Return a sequence (list) corresponding with the given function.
        Return a numpy array if possible.
        c                    s   g | ]} |qS r5   r5   ).0r2   funcr5   r6   
<listcomp>   s    z'LineString._listarr.<locals>.<listcomp>)r&   r   r   array)r(   rM   lstr5   rL   r6   _listarr   s   
zLineString._listarrc                 C      |  | jjS )z(Return a numpy array for the LineString.)rQ   r8   __getitem__r9   r5   r5   r6   rO         zLineString.arrayc                 C   rR   )z/Return a list or numpy array of the X variable.)rQ   r8   getXr9   r5   r5   r6   x   rT   zLineString.xc                 C   rR   )z/Return a list or numpy array of the Y variable.)rQ   r8   getYr9   r5   r5   r6   y   rT   zLineString.yc                 C   s   | j sdS | | jjS )z/Return a list or numpy array of the Z variable.N)r@   rQ   r8   getZr9   r5   r5   r6   r      s   zLineString.z)r   
__module____qualname__r!   create_linestringr   r   has_csr   r7   r:   r>   _get_single_internalrG   rI   r    propertyr   r+   rQ   rO   rV   rX   r   __classcell__r5   r5   r4   r6   r	   	   s0    U



r	   c                   @   s"   e Zd ZdZejZedd ZdS )
LinearRing   c                 C   s   | j rtd| jjS )Nz8Orientation of an empty LinearRing cannot be determined.)emptyr   r8   is_counterclockwiser9   r5   r5   r6   rd      s   zLinearRing.is_counterclockwiseN)	r   rZ   r[   r   r!   create_linearringr   r_   rd   r5   r5   r5   r6   ra      s
    ra   N)django.contrib.gis.geosr   r!    django.contrib.gis.geos.coordseqr   django.contrib.gis.geos.errorr    django.contrib.gis.geos.geometryr   r   django.contrib.gis.geos.pointr   django.contrib.gis.shortcutsr   r	   ra   r5   r5   r5   r6   <module>   s     1