B
    CVvg•  ã               @   sP   d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 G dd„ de
ƒZdS )	é    )Úc_uint)Úgdal)Ú
prototypes)ÚGEOSException)ÚGEOSGeometryc                   sþ   e Zd ZdZdZdZd'‡ fdd„	Z‡ fdd„Z‡ fd	d
„Z‡ fdd„Z	e
dd„ ƒZe
dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeZedd„ ƒZejdd„ ƒZedd„ ƒZejd d„ ƒZed!d"„ ƒZejd#d"„ ƒZed$d%„ ƒZejd&d%„ ƒZeZ‡  ZS )(ÚPointé   é   TNc                sŽ   |dkrg }n\t |ttfƒr"|}nHt |ttfƒrbt |ttfƒrbt |ttfƒrX|||g}qj||g}ntdƒ‚|  t|ƒ|¡}tƒ j	||d� dS )a  
        The Point object may be initialized with either a tuple, or individual
        parameters.

        For example:
        >>> p = Point((5, 23))  # 2D point, passed in as a tuple
        >>> p = Point(5, 23, 8)  # 3D point, passed in with individual parameters
        Nz2Invalid parameters given for Point initialization.)Úsrid)
Ú
isinstanceÚtupleÚlistÚfloatÚintÚ	TypeErrorÚ_create_pointÚlenÚsuperÚ__init__)ÚselfÚxÚyÚzr
   ÚcoordsZpoint)Ú	__class__© úA/tmp/pip-install-o3oxmrkh/Django/django/contrib/gis/geos/point.pyr      s    	
zPoint.__init__c                s   | j r
d S tƒ  ¡ S )N)Úemptyr   Ú_to_pickle_wkb)r   )r   r   r   r   +   s    zPoint._to_pickle_wkbc                s   |d kr|   ¡ S tƒ  |¡S )N)Ú_create_emptyr   Ú_from_pickle_wkb)r   Zwkb)r   r   r   r    .   s    zPoint._from_pickle_wkbc                s   | j rtjj ¡ S tƒ  ¡ S )N)r   r   Z
geometriesr   r   r   Ú_ogr_ptr)r   )r   r   r   r!   1   s    zPoint._ogr_ptrc             C   s   |   d d ¡S )N)r   )Úclsr   r   r   r   4   s    zPoint._create_emptyc             C   sŽ   |st  d¡S |dk s|dkr*td| ƒ‚t  tdƒt|ƒ¡}t|ƒ}t  |dt|ƒ¡ t  |dt|ƒ¡ |dkr„t  	|dt|ƒ¡ t  |¡S )zO
        Create a coordinate sequence, set X, Y, [Z], and create point
        Nr   r	   zInvalid point dimension: %sé   r   )
ÚcapiZcreate_pointr   Z	create_csr   ÚiterZcs_setxÚnextZcs_setyZcs_setz)r"   Úndimr   ÚcsÚir   r   r   r   8   s    
zPoint._create_pointc             C   sL   |   ||¡}|r@| j}t | j¡ || _|d k	r6|| _|  ¡  ntdƒ‚d S )Nz3Geometry resulting from slice deletion was invalid.)r   r
   r$   Zdestroy_geomÚptrZ_ptrZ
_post_initr   )r   ÚlengthÚitemsr*   r
   r   r   r   Ú	_set_listL   s    
zPoint._set_listc             C   s   | j  |d|¡ d S )Nr   )Ú_csÚsetOrdinate)r   ÚindexÚvaluer   r   r   Ú_set_singleY   s    zPoint._set_singlec             c   s$   xt t| ƒƒD ]}| | V  qW dS )z'Iterate over coordinates of this Point.N)Úranger   )r   r)   r   r   r   Ú__iter__\   s    zPoint.__iter__c             C   s   | j r
dS | jrdS dS dS )zBReturn the number of dimensions for this Point (either 0, 2 or 3).r   r	   r   N)r   Úhasz)r   r   r   r   Ú__len__a   s
    zPoint.__len__c             C   s.   |dkr| j S |dkr| jS |dkr*| jS d S )Nr   r#   r   )r   r   r   )r   r0   r   r   r   Ú_get_single_externalj   s    zPoint._get_single_externalc             C   s   | j  dd¡S )z$Return the X component of the Point.r   )r.   ÚgetOrdinate)r   r   r   r   r   t   s    zPoint.xc             C   s   | j  dd|¡ dS )z!Set the X component of the Point.r   N)r.   r/   )r   r1   r   r   r   r   y   s    c             C   s   | j  dd¡S )z$Return the Y component of the Point.r#   r   )r.   r8   )r   r   r   r   r   ~   s    zPoint.yc             C   s   | j  dd|¡ dS )z!Set the Y component of the Point.r#   r   N)r.   r/   )r   r1   r   r   r   r   ƒ   s    c             C   s   | j r| j dd¡S dS )z$Return the Z component of the Point.r   r   N)r5   r.   r8   )r   r   r   r   r   ˆ   s    zPoint.zc             C   s"   | j stdƒ‚| j dd|¡ dS )z!Set the Z component of the Point.zCannot set Z on 2D Point.r   r   N)r5   r   r.   r/   )r   r1   r   r   r   r   �   s    c             C   s   | j jS )zReturn a tuple of the point.)r.   r   )r   r   r   r   r   •   s    zPoint.tuplec             C   s   || j d< dS )z6Set the coordinates of the point with the given tuple.r   N)r.   )r   Útupr   r   r   r   š   s    )NNNN)Ú__name__Ú
__module__Ú__qualname__Z
_minlengthZ
_maxlengthZhas_csr   r   r    r!   Úclassmethodr   r   r-   r2   r4   r6   r7   Z_get_single_internalÚpropertyr   Úsetterr   r   r   r   Ú__classcell__r   r   )r   r   r   	   s0   	r   N)Úctypesr   Zdjango.contrib.gisr   Zdjango.contrib.gis.geosr   r$   Zdjango.contrib.gis.geos.errorr   Z django.contrib.gis.geos.geometryr   r   r   r   r   r   Ú<module>   s
   