a
    Kcòfä  ã                   @   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r8t|tjƒs@tdƒ‚| d¡}t |ƒ}|sptƒ j	|  
d¡|d� dS || jk r’td| jj| j|f ƒ‚t|ttfƒ }|rØ|j}t |ƒdkrÀtd	ƒ‚|  |d ¡ |d }nXd}|D ]N}	t|	tttfƒsütd
ƒ‚|du �rt |	ƒ}|  |¡ qàt |	ƒ|kràtdƒ‚qàtt ||¡t|dkƒd�}
|dk�r\|
jn|
j}t|ƒD ]L}|�r†||dd…f }n$t|| tƒ�r¢|| j}n|| }|||ƒ �qjtƒ 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   ZndarrayÚ	TypeErrorÚgetÚsuperÚ__init__Ú
_init_funcÚ
_minlengthÚ
ValueErrorÚ	__class__Ú__name__ÚshapeÚ	_checkdimr   r   ÚcapiÚ	create_csÚboolZ_set_point_3dZ_set_point_2dÚrangeÚptr)ÚselfÚargsÚkwargsÚcoordsr   ZncoordsZnumpy_coordsr   ÚndimZcoordÚcsZpoint_setterÚiZpoint_coords©r   © ú_/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/contrib/gis/geos/linestring.pyr      sh    
ÿþ
ý

ýÿÿ	
ÿ

zLineString.__init__c                 c   s    t t| ƒƒD ]}| | V  qdS )z%Allow iteration over this LineString.N)r#   r   )r%   r+   r-   r-   r.   Ú__iter__c   s    zLineString.__iter__c                 C   s
   t | jƒS )z/Return the number of points in this LineString.)r   Ú_cs©r%   r-   r-   r.   Ú__len__h   s    zLineString.__len__c                 C   s
   | j | S ©N©r0   )r%   Úindexr-   r-   r.   Ú_get_single_externall   s    zLineString._get_single_externalc           
      C   sŠ   | j j}| j j}| j}tt ||¡|d�}t|ƒD ]\}}|||< q2|  |j	¡}	|	r~t 
| j	¡ |	| _	|d urt|| _|  ¡  ntdƒ‚d S )Nr   z3Geometry resulting from slice deletion was invalid.)r0   ÚdimsÚhaszr   r   r    r!   Ú	enumerater   r$   Zdestroy_geomZ
_post_initr   )
r%   ÚlengthÚitemsr)   r8   r   r*   r+   Úcr$   r-   r-   r.   Ú	_set_listq   s    

zLineString._set_listc                 C   s   || j |< d S r3   r4   )r%   r5   Úvaluer-   r-   r.   Ú_set_single†   s    zLineString._set_singlec                 C   s   |dvrt dƒ‚d S )N)r
   r   r   )r   )r%   Údimr-   r-   r.   r   ‰   s    zLineString._checkdimc                 C   s   | j jS )zDReturn a tuple version of the geometry from the coordinate sequence.)r0   r   r1   r-   r-   r.   r   Ž   s    zLineString.tuplec                    s0   ‡ fdd„t t| ƒƒD ƒ}tr(t |¡S |S dS )z{
        Return a sequence (list) corresponding with the given function.
        Return a numpy array if possible.
        c                    s   g | ]}ˆ |ƒ‘qS r-   r-   )Ú.0r+   ©Úfuncr-   r.   Ú
<listcomp>š   ó    z'LineString._listarr.<locals>.<listcomp>N)r#   r   r   Úarray)r%   rC   Úlstr-   rB   r.   Ú_listarr•   s    
zLineString._listarrc                 C   s   |   | jj¡S )z(Return a numpy array for the LineString.)rH   r0   Ú__getitem__r1   r-   r-   r.   rF       s    zLineString.arrayc                 C   s   |   | jj¡S )z/Return a list or numpy array of the X variable.)rH   r0   ZgetXr1   r-   r-   r.   Úx¥   s    zLineString.xc                 C   s   |   | jj¡S )z/Return a list or numpy array of the Y variable.)rH   r0   ZgetYr1   r-   r-   r.   Úyª   s    zLineString.yc                 C   s   | j s
dS |  | jj¡S dS )z/Return a list or numpy array of the Z variable.N)r8   rH   r0   ZgetZr1   r-   r-   r.   r   ¯   s    zLineString.z)r   Ú
__module__Ú__qualname__r    Zcreate_linestringr   r   Zhas_csr   r/   r2   r6   Z_get_single_internalr=   r?   r   Úpropertyr   r(   rH   rF   rJ   rK   r   Ú__classcell__r-   r-   r,   r.   r	   	   s.   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   r0   Úis_counterclockwiser1   r-   r-   r.   rS   ½   s    zLinearRing.is_counterclockwiseN)	r   rL   rM   r   r    Zcreate_linearringr   rN   rS   r-   r-   r-   r.   rP   ¹   s   rP   N)Zdjango.contrib.gis.geosr   r    Z django.contrib.gis.geos.coordseqr   Zdjango.contrib.gis.geos.errorr   Z django.contrib.gis.geos.geometryr   r   Zdjango.contrib.gis.geos.pointr   Zdjango.contrib.gis.shortcutsr   r	   rP   r-   r-   r-   r.   Ú<module>   s    1