o
    åË·e™  ã                   @   s    d dl mZmZmZmZ d dlmZmZ d dlm	Z	 g d¢Z
G dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    )ÚExtentFieldÚGeometryCollectionFieldÚGeometryFieldÚLineStringField)Ú	AggregateÚValue)Úcached_property)ÚCollectÚExtentÚExtent3DÚMakeLineÚUnionc                       sJ   e Zd ZdZdZedd„ ƒZd‡ fdd„	Zdd„ Z	d‡ fd
d„	Z	‡  Z
S )ÚGeoAggregateNFc                 C   s   |   | jd jj¡S )Nr   )Úoutput_field_classÚsource_expressionsÚoutput_fieldÚsrid)Úself© r   ú^/var/www/ideatree/venv/lib/python3.10/site-packages/django/contrib/gis/db/models/aggregates.pyr      s   zGeoAggregate.output_fieldc                    s4   |j  | ¡ tƒ j||fd|p|j  | j¡i|¤ŽS )NÚfunction)ÚopsÚcheck_expression_supportÚsuperÚas_sqlÚspatial_aggregate_nameÚname)r   ÚcompilerÚ
connectionr   Úextra_context©Ú	__class__r   r   r      s   þýüzGeoAggregate.as_sqlc                 K   sp   | j s.| j d¡pt| ddƒ}|  ¡ }| g |  ¡ ¢t|ƒ‘¡ d}|j||fd|i|¤ŽS | j||fi |¤ŽS )NÚ	tolerancegš™™™™™©?z*%(function)s(SDOAGGRTYPE(%(expressions)s))Útemplate)	Ú	is_extentÚextraÚgetÚgetattrÚcopyÚset_source_expressionsÚget_source_expressionsr   r   )r   r   r   r   r"   Úcloner#   r   r   r   Ú	as_oracle    s&   ÿþÿÿÿÿzGeoAggregate.as_oracleTc                    s:   t ƒ  |||||¡}| ¡ D ]}t|jdƒstdƒ‚q|S )NÚ	geom_typez6Geospatial aggregates only allowed on geometry fields.)r   Úresolve_expressionr*   ÚhasattrÚfieldÚ
ValueError)r   ÚqueryÚallow_joinsÚreuseÚ	summarizeÚfor_saveÚcÚexprr    r   r   r.   0   s   ÿÿzGeoAggregate.resolve_expression©N)NTNFF)Ú__name__Ú
__module__Ú__qualname__r   r$   r   r   r   r,   r.   Ú__classcell__r   r   r    r   r      s    
ÿr   c                   @   ó   e Zd Zd ZeZdS )r	   N)r:   r;   r<   r   r   r   r   r   r   r   r	   <   ó    r	   c                       ó,   e Zd Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )r
   Ú2Dc                    ó   t ƒ j|fdtƒ i|¤Ž d S ©Nr   ©r   Ú__init__r   ©r   Ú
expressionr%   r    r   r   rE   E   ó   zExtent.__init__c                 C   ó   |j  |¡S r9   )r   Úconvert_extent©r   ÚvaluerG   r   r   r   r   Úconvert_valueH   ó   zExtent.convert_value©r:   r;   r<   r   r$   rE   rM   r=   r   r   r    r   r
   A   ó
    r
   c                       r@   )r   Ú3Dc                    rB   rC   rD   rF   r    r   r   rE   P   rH   zExtent3D.__init__c                 C   rI   r9   )r   Úconvert_extent3drK   r   r   r   rM   S   rN   zExtent3D.convert_valuerO   r   r   r    r   r   L   rP   r   c                   @   r>   )r   N)r:   r;   r<   r   r   r   r   r   r   r   r   W   r?   r   c                   @   r>   )r   N)r:   r;   r<   r   r   r   r   r   r   r   r   \   r?   r   N)Ú#django.contrib.gis.db.models.fieldsr   r   r   r   Údjango.db.modelsr   r   Údjango.utils.functionalr   Ú__all__r   r	   r
   r   r   r   r   r   r   r   Ú<module>   s    /