U
    8ÄT_7  ã                   @   sÂ   d Z ddlmZmZmZ ddlmZ ddlm	Z	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	ƒZG dd„ deƒZG dd„ de
eƒZG dd„ deƒZeeeeeeefe_dS )zy
 This module houses the Geometry Collection objects:
 GeometryCollection, MultiPoint, MultiLineString, and MultiPolygon
é    )ÚbyrefÚc_intÚc_uint)Ú
prototypes)ÚGEOSGeometryÚLinearGeometryMixin)ÚGEOM_PTR)Ú
LinearRingÚ
LineString)ÚPoint)ÚPolygonc                       sx   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
ejZejZedd„ ƒZedd„ ƒZeZ‡  ZS )ÚGeometryCollectioné   c                    s`   t |ƒdkr.t|d ttfƒr(|d }q2|}n|}|  |¡ |  t |ƒ|¡}tƒ j|f|Ž dS )zEInitialize a Geometry Collection from a sequence of Geometry objects.é   r   N)ÚlenÚ
isinstanceÚtupleÚlistZ_check_allowedÚ_create_collectionÚsuperÚ__init__)ÚselfÚargsÚkwargsZ
init_geomsZ
collection©Ú	__class__© úG/tmp/pip-unpacked-wheel-dv63caxw/django/contrib/gis/geos/collections.pyr      s    

zGeometryCollection.__init__c                 c   s    t t| ƒƒD ]}| | V  qdS )z-Iterate over each Geometry in the Collection.N)Úranger   )r   Úir   r   r   Ú__iter__'   s    zGeometryCollection.__iter__c                 C   s   | j S )z3Return the number of geometries in this Collection.)Znum_geom©r   r   r   r   Ú__len__,   s    zGeometryCollection.__len__c                 C   s2   t | dd„ |D ƒŽ }t t| jƒt|ƒt|ƒ¡S )Nc                 S   s   g | ]}t  t|d |ƒ¡‘qS )Úptr)ÚcapiÚ
geom_cloneÚgetattr©Ú.0Úgr   r   r   Ú
<listcomp>3   s    z9GeometryCollection._create_collection.<locals>.<listcomp>)r   r$   Zcreate_collectionr   Ú_typeidr   r   )r   ÚlengthÚitemsZgeomsr   r   r   r   1   s    ýz%GeometryCollection._create_collectionc                 C   s   t  | j|¡S ©N)r$   Z	get_geomnr#   ©r   Úindexr   r   r   Ú_get_single_internal:   s    z'GeometryCollection._get_single_internalc                 C   s   t t |  |¡¡| jd�S )zFReturn the Geometry from this Collection at the given index (0-based).)Úsrid)r   r$   r%   r1   r2   r/   r   r   r   Ú_get_single_external=   s    z'GeometryCollection._get_single_externalc                 C   s2   | j }| j}|  ||¡| _ |r$|| _t |¡ dS )zJCreate a new collection, and destroy the contents of the previous pointer.N)r#   r2   r   r$   Zdestroy_geom)r   r,   r-   Zprev_ptrr2   r   r   r   Ú	_set_listB   s    zGeometryCollection._set_listc                 C   s   dd  dd„ | D ƒ¡ S )z,Return the KML for this Geometry Collection.z!<MultiGeometry>%s</MultiGeometry>Ú c                 s   s   | ]}|j V  qd S r.   )Úkmlr'   r   r   r   Ú	<genexpr>Q   s     z)GeometryCollection.kml.<locals>.<genexpr>)Újoinr!   r   r   r   r6   N   s    zGeometryCollection.kmlc                 C   s   t dd„ | D ƒƒS )zAReturn a tuple of all the coordinates in this Geometry Collectionc                 s   s   | ]}|j V  qd S r.   ©r   r'   r   r   r   r7   V   s     z+GeometryCollection.tuple.<locals>.<genexpr>r9   r!   r   r   r   r   S   s    zGeometryCollection.tuple)Ú__name__Ú
__module__Ú__qualname__r+   r   r    r"   r   r1   r3   r4   r   Z_set_single_rebuildZ_set_singleZ_assign_extended_slice_rebuildZ_assign_extended_sliceÚpropertyr6   r   ZcoordsÚ__classcell__r   r   r   r   r      s   		

r   c                   @   s   e Zd ZeZdZdS )Ú
MultiPointé   N)r:   r;   r<   r   Ú_allowedr+   r   r   r   r   r?   [   s   r?   c                   @   s   e Zd ZeefZdZdS )ÚMultiLineStringé   N)r:   r;   r<   r
   r	   rA   r+   r   r   r   r   rB   `   s   rB   c                   @   s   e Zd ZeZdZdS )ÚMultiPolygoné   N)r:   r;   r<   r   rA   r+   r   r   r   r   rD   e   s   rD   N)Ú__doc__Úctypesr   r   r   Zdjango.contrib.gis.geosr   r$   Z django.contrib.gis.geos.geometryr   r   Zdjango.contrib.gis.geos.libgeosr   Z"django.contrib.gis.geos.linestringr	   r
   Zdjango.contrib.gis.geos.pointr   Zdjango.contrib.gis.geos.polygonr   r   r?   rB   rD   rA   r   r   r   r   Ú<module>   s   L