o
    þÞh­  ã                   @   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u rg }n.t |ttfƒr|}n$t |ttfƒr1t |ttfƒr1t |ttfƒr,|||g}n	||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
   ÚcoordsÚpoint©Ú	__class__© ú]/var/www/html/premium_crap/venv/lib/python3.10/site-packages/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!   +   ó   zPoint._to_pickle_wkbc                    s   |d u r|   ¡ S tƒ  |¡S r   )Ú_create_emptyr   Ú_from_pickle_wkb)r   Úwkbr   r   r   r%   .   s   zPoint._from_pickle_wkbc                    s   | j r	tjj ¡ S tƒ  ¡ S r   )r    r   Ú
geometriesr   r$   r   Ú_ogr_ptrr"   r   r   r   r(   1   s   ÿÿzPoint._ogr_ptrc                 C   s   |   d d ¡S r   )r   )Úclsr   r   r   r$   6   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rBt  	|dt|ƒ¡ t  |¡S )zO
        Create a coordinate sequence, set X, Y, [Z], and create point
        Nr   r	   zInvalid point dimension: %sé   r   )
ÚcapiÚcreate_pointr   Ú	create_csr   ÚiterÚcs_setxÚnextÚcs_setyÚcs_setz)r)   Úndimr   ÚcsÚir   r   r   r   :   s   

zPoint._create_pointc                 C   sJ   |   ||¡}|r!| j}t | j¡ || _|d ur|| _|  ¡  d S tdƒ‚)Nz3Geometry resulting from slice deletion was invalid.)r   r
   r+   Údestroy_geomÚptrÚ_ptrÚ
_post_initr   )r   ÚlengthÚitemsr7   r
   r   r   r   Ú	_set_listN   s   zPoint._set_listc                 C   s   | j  |d|¡ d S )Nr   ©Ú_csÚsetOrdinate)r   ÚindexÚvaluer   r   r   Ú_set_single[   r#   zPoint._set_singlec                 c   s"   � t t| ƒƒD ]}| | V  qdS )z'Iterate over coordinates of this Point.N)Úranger   )r   r5   r   r   r   Ú__iter__^   s   €ÿzPoint.__iter__c                 C   s   | j rdS | jr
dS dS )zBReturn the number of dimensions for this Point (either 0, 2 or 3).r   r	   r   )r    Úhaszr"   r   r   r   Ú__len__c   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   r@   r   r   r   Ú_get_single_externall   s   ÿzPoint._get_single_externalc                 C   s   | j  dd¡S )z$Return the X component of the Point.r   ©r>   ÚgetOrdinater"   r   r   r   r   v   ó   zPoint.xc                 C   s   | j  dd|¡ dS )z!Set the X component of the Point.r   Nr=   ©r   rA   r   r   r   r   {   ó   c                 C   s   | j  dd¡S )z$Return the Y component of the Point.r*   r   rH   r"   r   r   r   r   €   rJ   zPoint.yc                 C   s   | j  dd|¡ dS )z!Set the Y component of the Point.r*   r   Nr=   rK   r   r   r   r   …   rL   c                 C   s   | j r
| j dd¡S dS )z$Return the Z component of the Point.r   r   N)rE   r>   rI   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)rE   r   r>   r?   rK   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   œ   rJ   )NNNN)Ú__name__Ú
__module__Ú__qualname__Ú
_minlengthÚ
_maxlengthÚhas_csr   r!   r%   r(   Úclassmethodr$   r   r<   rB   rD   rF   rG   Ú_get_single_internalÚpropertyr   Úsetterr   r   r   r   Ú__classcell__r   r   r   r   r   	   sF    

	







r   N)Úctypesr   Údjango.contrib.gisr   Údjango.contrib.gis.geosr   r+   Údjango.contrib.gis.geos.errorr   Ú django.contrib.gis.geos.geometryr   r   r   r   r   r   Ú<module>   s    