
    Hwg                         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e      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Zy)    )ExtentFieldGeometryCollectionFieldGeometryFieldLineStringField)	AggregateValue)cached_property)CollectExtentExtent3DMakeLineUnionc                   L     e Zd ZdZdZed        Zd fd	Zd Z	 d fd	Z	 xZ
S )	GeoAggregateNFc                 f    | j                  | j                  d   j                  j                        S )Nr   )output_field_classsource_expressionsoutput_fieldsrid)selfs    ^/var/www/horilla/myenv/lib/python3.12/site-packages/django/contrib/gis/db/models/aggregates.pyr   zGeoAggregate.output_field   s*    &&t'>'>q'A'N'N'S'STT    c                     |j                   j                  |        t        |   ||fd|xs% |j                   j	                  | j
                        i|S )Nfunction)opscheck_expression_supportsuperas_sqlspatial_aggregate_namename)r   compiler
connectionr   extra_context	__class__s        r   r   zGeoAggregate.as_sql   sZ     	//5w~
 Q!F!Ftyy!Q
 	
 	
r   c                 >   | j                   s~| j                  j                  d      xs t        | dd      }| j	                         }|j                  g | j                         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'   s          r   	as_oraclezGeoAggregate.as_oracle    s    ~~

{3Wwt[RV7WIIIKE((002)$ DH5<<*/7;H  t{{8ZA=AAr   c                     t         |   |||||      }|j                         D ]#  }t        |j                  d      rt        d       |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$   s	           r   r3   zGeoAggregate.resolve_expression0   sY     G&uk5)XV,,. 	D4::{3 L 	
 r   N)NTNFF)__name__
__module____qualname__r   r(   r	   r   r   r0   r3   __classcell__r$   s   @r   r   r      s=    HIU U	
B" SX	 	r   r   c                       e Zd Zd ZeZy)r
   N)r?   r@   rA   r    r   r    r   r   r
   r
   <   s    D0r   r
   c                   ,     e Zd Zd ZdZ fdZd Z xZS )r   2Dc                 :    t        |   |fdt               i| y Nr   r   __init__r   r   
expressionr)   r$   s      r   rK   zExtent.__init__E       I+-I5Ir   c                 8    |j                   j                  |      S r>   )r   convert_extentr   valuerM   r"   s       r   convert_valuezExtent.convert_valueH   s    ~~,,U33r   r?   r@   rA   r    r(   rK   rS   rB   rC   s   @r   r   r   A   s    DIJ4r   r   c                   ,     e Zd Zd ZdZ fdZd Z xZS )r   3Dc                 :    t        |   |fdt               i| y rI   rJ   rL   s      r   rK   zExtent3D.__init__P   rN   r   c                 8    |j                   j                  |      S r>   )r   convert_extent3drQ   s       r   rS   zExtent3D.convert_valueS   s    ~~..u55r   rT   rC   s   @r   r   r   L   s    DIJ6r   r   c                       e Zd Zd ZeZy)r   N)r?   r@   rA   r    r   r   rE   r   r   r   r   W   s    D(r   r   c                       e Zd Zd ZeZy)r   N)r?   r@   rA   r    r   r   rE   r   r   r   r   \   s    D&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   rE   r   r   <module>r`      se     . 3
@,9 ,^1l 1
4\ 46| 6)| )
'L 'r   