U
    ed                     @   s   d 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
    )
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-lctamlir/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   s&   t | dd |D  }t| j||S )Nc                 S   s   g | ]}t t|d |qS )ptr)capi
geom_clonegetattr.0gr   r   r   
<listcomp>2   s   z9GeometryCollection._create_collection.<locals>.<listcomp>)r   r!   Zcreate_collection_typeid)r   lengthitemsZgeomsr   r   r   r   /   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"   r.   r/   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    r/   r   r!   Zdestroy_geom)r   r)   r*   Zprev_ptrr/   r   r   r   	_set_listE   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>T   s     z)GeometryCollection.kml.<locals>.<genexpr>)joinr   r   r   r   r3   Q   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   r4   Y   s     z+GeometryCollection.tuple.<locals>.<genexpr>r6   r   r   r   r   r   V   s    zGeometryCollection.tuple)__name__
__module____qualname__r(   r   r   r   r   r.   r0   r1   r   Z_set_single_rebuildZ_set_singleZ_assign_extended_slice_rebuildZ_assign_extended_slicepropertyr3   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)r7   r8   r9   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)r7   r8   r9   r   r   r>   r(   r   r   r   r   r?   d   s   r?   c                   @   s   e Zd ZeZdZdS )MultiPolygon   N)r7   r8   r9   r	   r>   r(   r   r   r   r   rA   i   s   rA   N)__doc__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<   r?   rA   r>   r   r   r   r   <module>   s$   R