
v^                 @   s   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 Gd d   d e	 e  Z Gd	 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   S)
LineString   Tc                s  t  |  d k r | d } n | } t | t t f  pO t oO t | t j  s^ t d   | j d  } t  |  } | s t   j	 |  j
 d  d | d S| |  j k  r t d |  j j |  j | f   t | t t f  } | r4| j } t  |  d k rt d   |  j | d  | d } n d } xx | D]p }	 t |	 t t t f  skt d	   | d k rt  |	  } |  j |  qAt  |	  | k rAt d
   qAWt t j | |  d t | d k  }
 | d k r|
 j n |
 j } xm t |  D]_ } | r/| | d d  f } n- t | | t  rR| | j } n
 | | } | | |  q
Wt   j	 |  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.sridNz'%s requires at least %d points, got %s.r
   zToo many dimensions.z4Each coordinate should be a sequence (list or tuple)z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    D/tmp/pip-build-8lau8j11/django/django/contrib/gis/geos/linestring.pyr      sT    -		*
zLineString.__init__c             C   s   t  |  j  S)z%Allow iteration over this LineString.)iter_cs)r#   r*   r*   r+   __iter__\   s    zLineString.__iter__c             C   s   t  |  j  S)z/Return the number of points in this LineString.)r   r-   )r#   r*   r*   r+   __len__`   s    zLineString.__len__c             C   s   |  j  | S)N)r-   )r#   indexr*   r*   r+   _get_single_externald   s    zLineString._get_single_externalc       
      C   s   |  j  j } |  j  j } |  j } t t j | |  d | } x$ t |  D] \ } } | | | <qL W|  j | j	  }	 |	 r t j
 |  j	  |	 |  _	 | d  k	 r | |  _ |  j   n t d   d  S)Nr   z3Geometry resulting from slice deletion was invalid.)r-   Zdimshaszr   r   r   r   	enumerater   r"   Zdestroy_geomZ
_post_initr   )
r#   lengthitemsr'   r2   r   r(   r)   cr"   r*   r*   r+   	_set_listi   s    			zLineString._set_listc             C   s   | |  j  | <d  S)N)r-   )r#   r0   valuer*   r*   r+   _set_single~   s    zLineString._set_singlec             C   s   | d k r t  d   d  S)Nr
   r   zDimension mismatch.)r
   r   )r   )r#   Zdimr*   r*   r+   r      s    zLineString._checkdimc             C   s
   |  j  j S)zDReturn a tuple version of the geometry from the coordinate sequence.)r-   r   )r#   r*   r*   r+   r      s    zLineString.tuplec                s@     f d d   t  t |    D } t r8 t j |  S| Sd S)z{
        Return a sequence (list) corresponding with the given function.
        Return a numpy array if possible.
        c                s   g  |  ] }   |   q Sr*   r*   ).0r)   )funcr*   r+   
<listcomp>   s   	 z'LineString._listarr.<locals>.<listcomp>N)r!   r   r   array)r#   r;   lstr*   )r;   r+   _listarr   s    %zLineString._listarrc             C   s   |  j  |  j j  S)z(Return a numpy array for the LineString.)r?   r-   __getitem__)r#   r*   r*   r+   r=      s    zLineString.arrayc             C   s   |  j  |  j j  S)z/Return a list or numpy array of the X variable.)r?   r-   ZgetX)r#   r*   r*   r+   x   s    zLineString.xc             C   s   |  j  |  j j  S)z/Return a list or numpy array of the Y variable.)r?   r-   ZgetY)r#   r*   r*   r+   y   s    zLineString.yc             C   s$   |  j  s d S|  j |  j j  Sd S)z/Return a list or numpy array of the Z variable.N)r2   r?   r-   ZgetZ)r#   r*   r*   r+   r      s    	zLineString.z)r   
__module____qualname__r   Zcreate_linestringr   r   Zhas_csr   r.   r/   r1   Z_get_single_internalr7   r9   r   propertyr   r&   r?   r=   rA   rB   r   r*   r*   )r   r+   r	   	   s$   	Nr	   c               @   s   e  Z d  Z d Z e j Z d S)
LinearRing   N)r   rC   rD   r   r   Zcreate_linearringr   r*   r*   r*   r+   rF      s   rF   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	   rF   r*   r*   r*   r+   <module>   s   