Ë
    øi¯e%I  ã                   ó¬  — d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d d	lmZ eeefZ G d
„ d«      Z G d„ dee«      Z G d„ de«      Z  G d„ d«      Z! G d„ d«      Z" G d„ de"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( G d „ d!e«      Z) G d"„ d#e«      Z* G d$„ d%e"e «      Z+ G d&„ d'e"e «      Z, G d(„ d)e «      Z- G d*„ d+e"e «      Z. G d,„ d-«      Z/ G d.„ d/e/e"e«      Z0 G d0„ d1e «      Z1 G d2„ d3e «      Z2 G d4„ d5e«      Z3 G d6„ d7e«      Z4 G d8„ d9e«      Z5 G d:„ d;e«      Z6 G d<„ d=e"e «      Z7ejp                   G d>„ d?ee«      «       Z9ejp                   G d@„ dAe"ee«      «       Z: G dB„ dCe/e"e«      Z; G dD„ dEe«      Z< G dF„ dGe «      Z= G dH„ dIe«      Z> G dJ„ dKe«      Z? G dL„ dMe«      Z@ G dN„ dOe/e"e«      ZA G dP„ dQe"e «      ZB G dR„ dSe«      ZC G dT„ dUe!e «      ZD G dV„ dWe!e «      ZE G dX„ dYe"e «      ZF G dZ„ d[e «      Z G d\„ d]eD«      ZG G d^„ d_e"e «      ZHy`)aé    )ÚDecimal)ÚBaseSpatialFieldÚGeometryField)Ú	AreaFieldÚDistanceField)ÚGEOSGeometry)Ú
FieldError)ÚNotSupportedError)ÚBinaryFieldÚBooleanFieldÚ
FloatFieldÚFuncÚIntegerFieldÚ	TextFieldÚ	TransformÚValue)ÚCast)Úcached_propertyc                   ód   ‡ — e Zd ZdZdZˆ fd„Zed„ «       Zed„ «       Z	d	ˆ fd„	Z
ˆ fd„Zd
d„Zˆ xZS )ÚGeoFuncMixinN)r   c                 óì  •— t        ‰| �  |i |¤Ž | j                  D ]Ä  }| j                  |   }t	        |t
        «      sŒ#	 |j                  }|j                  }t	        |t        «      r|r-t	        |t        «      st        d| j                  |dz   fz  «      ‚|j                  s|st        d«      ‚|rŒ—t        |t        |j                  ¬«      ¬«      | j                  |<   ŒÆ y # t        $ r d }Y Œ¥w xY w)Nz9%s function requires a geometric argument in position %d.é   z$SRID is required for all geometries.©Úsrid)Úoutput_field)ÚsuperÚ__init__Úgeom_param_posÚsource_expressionsÚ
isinstancer   r   r	   Úvaluer   r   Ú	TypeErrorÚnamer   Ú
ValueError)ÚselfÚexpressionsÚextraÚposÚexprr   ÚgeomÚ	__class__s          €úOE:\TRUCKING_PROJECT\Lib\site-packages\django/contrib/gis/db/models/functions.pyr   zGeoFuncMixin.__init__   só   ø€ Ü‰Ñ˜+Ð/¨Ò/ð ×&Ñ&ò 	ˆCØ×*Ñ*¨3Ñ/ˆDÜ˜d¤EÔ*Øð$Ø#×0Ñ0�ð —:‘:ˆDä˜t¤\Ô2ÙÜ" <´Ô?äØOØ—y‘y #¨¡'Ð*ñ+óð ð —9’9¡\Ü Ð!GÓHÐHÚÜ/4Ø¤}¸$¿)¹)Ô'Dô0�×'Ñ'¨Ò,ñ+	øô ò $Ø#’ð$ús   ÁC%Ã%C3Ã2C3c                 ó.   — | j                   j                  S ©N)r+   Ú__name__©r%   s    r,   r#   zGeoFuncMixin.name9   s   € à�~‰~×&Ñ&Ð&ó    c                 óN   — | j                   | j                  d      j                  S ©Nr   )r   r   Úfieldr0   s    r,   Ú	geo_fieldzGeoFuncMixin.geo_field=   s$   € à×&Ñ& t×':Ñ':¸1Ñ'=Ñ>×DÑDÐDr1   c                 ó�   •— | j                   €'|€%|j                  j                  | j                  «      }t	        ‰| �  ||fd|i|¤ŽS )NÚfunction)r7   ÚopsÚspatial_function_namer#   r   Úas_sql)r%   ÚcompilerÚ
connectionr7   Úextra_contextr+   s        €r,   r:   zGeoFuncMixin.as_sqlA   sE   ø€ Ø�=‰=Ð  XÐ%5Ø!—~‘~×;Ñ;¸D¿I¹IÓFˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr1   c           
      ó  •— t        ‰
| �  |i |¤Ž}| j                  s|S |j                  «       }| j                  D ]K  }||   }t	        |t
        «      rŒt        | j                  ›d|dz   ›dt        |«      j                  ›d�«      ‚ |j                  j                  }| j                  dd  D ]V  }|j                  |   }|j                  j                  }	|	|k7  sŒ. t        ||«      j                  |i |¤Ž|j                  |<   ŒX |S )Nz/ function requires a GeometryField in position r   z, got ú.)r   Úresolve_expressionr   Úget_source_fieldsr    r   r"   r#   Útyper/   r5   r   r   r   r   )r%   ÚargsÚkwargsÚresÚsource_fieldsr(   r4   Ú	base_sridr)   Ú	expr_sridr+   s             €r,   r@   zGeoFuncMixin.resolve_expressionF   s  ø€ Ü‰gÑ(¨$Ð9°&Ñ9ˆØ×"Ò"ØˆJð ×-Ñ-Ó/ˆØ×&Ñ&ò 
	ˆCØ! #Ñ&ˆEÜ˜e¤]Õ3Üð Ÿ	›	Ø˜a›Ü˜U›×,Ó,ð	óð ð
	ð —M‘M×&Ñ&ˆ	Ø×&Ñ& q rÐ*ò 	6ˆCØ×)Ñ)¨#Ñ.ˆDØ×)Ñ)×.Ñ.ˆIØ˜IÓ%ð/%¬iØ˜)ó/ç$Ñ$ dð/6à.4ñ/6�×&Ñ& sÒ+ð	6ð ˆ
r1   c                 ó^   — t        |d«      s |rt        ||«      st        d|›d|›d�«      ‚|S )Nr@   zThe z) parameter has the wrong type: should be r?   )Úhasattrr    r"   )r%   r!   Ú
param_nameÚcheck_typess       r,   Ú_handle_paramzGeoFuncMixin._handle_paramd   s7   € Ü�uÐ2Ô3Ù¤:¨e°[Ô#AÝâ!¢;ð0óð ð ˆr1   r.   ©Ú N)r/   Ú
__module__Ú__qualname__r7   r   r   Úpropertyr#   r   r5   r:   r@   rM   Ú__classcell__©r+   s   @r,   r   r      sL   ø„ Ø€HØ€Nôð: ñ'ó ð'ð ñEó ðEõXô
÷<r1   r   c                   ó   — e Zd Zy)ÚGeoFuncN©r/   rP   rQ   © r1   r,   rV   rV   n   ó   „ Ør1   rV   c                   ó   — e Zd Zed„ «       Zy)ÚGeomOutputGeoFuncc                 óB   — t        | j                  j                  ¬«      S )Nr   )r   r5   r   r0   s    r,   r   zGeomOutputGeoFunc.output_fields   s   € ä $§.¡.×"5Ñ"5Ô6Ð6r1   N)r/   rP   rQ   r   r   rX   r1   r,   r[   r[   r   s   „ Øñ7ó ñ7r1   r[   c                   ó   — e Zd ZdZd„ Zy)ÚSQLiteDecimalToFloatMixinz›
    By default, Decimal values are converted to str by the SQLite backend, which
    is not acceptable by the GIS functions expecting numeric values.
    c           
      ó6  — | j                  «       }|j                  |j                  «       D �cg c]H  }t        |d«      r8t	        |j
                  t        «      rt        t        |j
                  «      «      n|‘ŒJ c}«        |j                  ||fi |¤ŽS c c}w )Nr!   )
ÚcopyÚset_source_expressionsÚget_source_expressionsrJ   r    r!   r   r   Úfloatr:   )r%   r;   r<   r=   r`   r)   s         r,   Ú	as_sqlitez#SQLiteDecimalToFloatMixin.as_sqlite~   sŒ   € Ø�y‰y‹{ˆØ×#Ñ#ð
 !×7Ñ7Ó9ö	ð ô ˜4 Ô)¬j¸¿¹ÄWÔ.Mô ”e˜DŸJ™JÓ'Ô(àñòô	
ð ˆt�{‰{˜8 ZÑA°=ÑAÐAùòs   ®ABN)r/   rP   rQ   Ú__doc__rd   rX   r1   r,   r^   r^   x   s   „ ñó

Br1   r^   c                   ó   — e Zd ZdZd„ Zy)ÚOracleToleranceMixingš™™™™™©?c                 ó  — t        | j                  | j                  j                  d| j                  «      dt
        «      «      }| j                  «       }|j                  g | j                  «       ¢|‘«        |j                  ||fi |¤ŽS )NÚ	tolerance)
r   rM   r'   Úgetri   ÚNUMERIC_TYPESr`   ra   rb   r:   )r%   r;   r<   r=   ri   Úclones         r,   Ú	as_oraclezOracleToleranceMixin.as_oracleŽ   s}   € ÜØ×ÑØ—
‘
—‘˜{¨D¯N©NÓ;ØÜóó
ˆ	ð —	‘	“ˆØ×$Ñ$Ð%P t×'BÑ'BÓ'DÐ%PÀiÐ%PÔQØˆu�|‰|˜H jÑB°MÑBÐBr1   N)r/   rP   rQ   ri   rm   rX   r1   r,   rg   rg   ‹   s   „ Ø€Ió
Cr1   rg   c                   ó8   ‡ — e Zd ZdZed„ «       Zˆ fd„Zd„ Zˆ xZS )ÚArear   c                 ó,   — t        | j                  «      S r.   )r   r5   r0   s    r,   r   zArea.output_fieldž   s   € ä˜Ÿ™Ó(Ð(r1   c                 óž   •— |j                   j                  s&| j                  j                  |«      rt	        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz2Area on geodetic coordinate systems not supported.)ÚfeaturesÚsupports_area_geodeticr5   Úgeodeticr
   r   r:   ©r%   r;   r<   r=   r+   s       €r,   r:   zArea.as_sql¢   sP   ø€ Ø×"Ñ"×9Ò9¸d¿n¹n×>UÑ>UØô?
ô $ØDóð ô ‰w‰~˜h¨
ÑD°mÑDÐDr1   c                 ót   — | j                   j                  |«      r
d|d<   d|d<    | j                  ||fi |¤ŽS )Nz+%(function)s(%(expressions)s, %(spheroid)d)ÚtemplateTÚspheroid)r5   rt   r:   )r%   r;   r<   r=   s       r,   rd   zArea.as_sqlite«   s@   € Ø�>‰>×"Ñ" :Ô.Ø(UˆM˜*Ñ%Ø(,ˆM˜*Ñ%Øˆt�{‰{˜8 ZÑA°=ÑAÐAr1   )	r/   rP   rQ   Úarityr   r   r:   rd   rS   rT   s   @r,   ro   ro   ›   s&   ø„ Ø€Eàñ)ó ð)ôEöBr1   ro   c                   ó"   — e Zd Z e«       ZdZdZy)ÚAzimuthé   ©r   r   N©r/   rP   rQ   r   r   ry   r   rX   r1   r,   r{   r{   ²   ó   „ Ù“<€LØ€EØ�Nr1   r{   c                   ó8   ‡ — e Zd Z e«       Zdˆ fd„	Zˆ fd„Zˆ xZS )Ú	AsGeoJSONc                 óÀ   •— |g}|�&|j                  | j                  |dt        «      «       d}|r|rd}n	|rd}n|rd}|j                  |«       t        ‰| �  |i |¤Ž y )NÚ	precisionr   é   r   r|   ©ÚappendrM   Úintr   r   )	r%   Ú
expressionÚbboxÚcrsrƒ   r'   r&   Úoptionsr+   s	           €r,   r   zAsGeoJSON.__init__»   sl   ø€ Ø!�lˆØÐ Ø×Ñ˜t×1Ñ1°)¸[Ì#ÓNÔOØˆÙ‘4Ø‰GÙØ‰GÙØˆGØ×Ñ˜7Ô#Ü‰Ñ˜+Ð/¨Ó/r1   c                 ó–   •— | j                  «       }| j                  «       }|j                  |d d «       t        t        |�  ||fi |¤ŽS )Nr   )rb   r`   ra   r   r�   r:   )r%   r;   r<   r=   r   rl   r+   s         €r,   rm   zAsGeoJSON.as_oracleÉ   sL   ø€ Ø!×8Ñ8Ó:ÐØ—	‘	“ˆØ×$Ñ$Ð%7¸¸Ð%;Ô<Ü”Y Ñ-¨h¸
ÑTÀmÑTÐTr1   )FFé   )r/   rP   rQ   r   r   r   rm   rS   rT   s   @r,   r�   r�   ¸   s   ø„ Ù“;€Lõ0÷Uð Ur1   r�   c                   ó<   ‡ — e Zd ZdZ e«       Zdˆ fd„	Zˆ fd„Zˆ xZS )ÚAsGML)r   c                 ó|   •— ||g}|�&|j                  | j                  |dt        «      «       t        ‰| �  |i |¤Ž y ©Nrƒ   r…   )r%   rˆ   Úversionrƒ   r'   r&   r+   s         €r,   r   zAsGML.__init__Ô   sB   ø€ Ø 
Ð+ˆØÐ Ø×Ñ˜t×1Ñ1°)¸[Ì#ÓNÔOÜ‰Ñ˜+Ð/¨Ó/r1   c                 óÎ   •— | j                  «       }|d   }| j                  «       }|j                  |d   g«       |j                  dk(  rdnd|d<   t	        t
        |�  ||fi |¤ŽS )Nr   r   r„   zSDO_UTIL.TO_GML311GEOMETRYzSDO_UTIL.TO_GMLGEOMETRYr7   )rb   r`   ra   r!   r   r�   r:   )r%   r;   r<   r=   r   r’   rl   r+   s          €r,   rm   zAsGML.as_oracleÚ   sy   ø€ Ø!×8Ñ8Ó:ÐØ$ QÑ'ˆØ—	‘	“ˆØ×$Ñ$Ð&8¸Ñ&;Ð%<Ô=ð �}‰} Ò!ñ )à*ð 	�jÑ!ô
 ”U˜EÑ)¨(°JÑPÀ-ÑPÐPr1   )r|   r�   )	r/   rP   rQ   r   r   r   r   rm   rS   rT   s   @r,   r�   r�   Ð   s    ø„ Ø€NÙ“;€Lõ0÷
Qð 
Qr1   r�   c                   ó.   ‡ — e Zd Z e«       Zdˆ fd„	Zˆ xZS )ÚAsKMLc                 óz   •— |g}|�&|j                  | j                  |dt        «      «       t        ‰| �  |i |¤Ž y r‘   r…   ©r%   rˆ   rƒ   r'   r&   r+   s        €r,   r   zAsKML.__init__ê   ó?   ø€ Ø!�lˆØÐ Ø×Ñ˜t×1Ñ1°)¸[Ì#ÓNÔOÜ‰Ñ˜+Ð/¨Ó/r1   )r�   ©r/   rP   rQ   r   r   r   rS   rT   s   @r,   r•   r•   ç   s   ø„ Ù“;€L÷0ñ 0r1   r•   c                   ó.   ‡ — e Zd Z e«       Zdˆ fd„	Zˆ xZS )ÚAsSVGc                 óŠ   •— t        |d«      r|n
t        |«      }||| j                  |dt        «      g}t        ‰| �  |i |¤Ž y )Nr@   rƒ   )rJ   r‡   rM   r   r   )r%   rˆ   Úrelativerƒ   r'   r&   r+   s         €r,   r   zAsSVG.__init__ô   sP   ø€ ä Ð*>Ô?‰HÄSÈÃ]ð 	ð ØØ×Ñ˜y¨+´sÓ;ð
ˆô
 	‰Ñ˜+Ð/¨Ó/r1   )Fr�   r™   rT   s   @r,   r›   r›   ñ   s   ø„ Ù“;€L÷	0ñ 	0r1   r›   c                   ó   — e Zd Z e«       ZdZy)ÚAsWKBr   N)r/   rP   rQ   r   r   ry   rX   r1   r,   rŸ   rŸ      s   „ Ù“=€LØ�Er1   rŸ   c                   ó   — e Zd Z e«       ZdZy)ÚAsWKTr   N)r/   rP   rQ   r   r   ry   rX   r1   r,   r¡   r¡     s   „ Ù“;€LØ�Er1   r¡   c                   ó*   ‡ — e Zd Zdˆ fd„	Zˆ fd„Zˆ xZS )ÚBoundingCirclec                 ó(   •— t        ‰| �  ||fi |¤Ž y r.   )r   r   )r%   rˆ   Únum_segr'   r+   s       €r,   r   zBoundingCircle.__init__  s   ø€ Ü‰Ñ˜ WÑ6°Ó6r1   c                 ó”   •— | j                  «       }|j                  | j                  «       d   g«       t        t        |�  ||fi |¤ŽS r3   )r`   ra   rb   r   r£   rm   ©r%   r;   r<   r=   rl   r+   s        €r,   rm   zBoundingCircle.as_oracle  sN   ø€ Ø—	‘	“ˆØ×$Ñ$ d×&AÑ&AÓ&CÀAÑ&FÐ%GÔHÜ”^ UÑ5Ø�jñ
Ø$1ñ
ð 	
r1   )é0   )r/   rP   rQ   r   rm   rS   rT   s   @r,   r£   r£   
  s   ø„ õ7÷
ð 
r1   r£   c                   ó   — e Zd ZdZy)ÚCentroidr   N©r/   rP   rQ   ry   rX   r1   r,   rª   rª     ó   „ Ø�Er1   rª   c                   ó   — e Zd ZdZdZy)ÚClosestPointr|   r}   N©r/   rP   rQ   ry   r   rX   r1   r,   r®   r®     ó   „ Ø€EØ�Nr1   r®   c                   ó   — e Zd ZdZdZy)Ú
Differencer|   r}   Nr¯   rX   r1   r,   r²   r²     r°   r1   r²   c                   ó"   — e Zd Zed„ «       Zd„ Zy)ÚDistanceResultMixinc                 ó,   — t        | j                  «      S r.   )r   r5   r0   s    r,   r   z DistanceResultMixin.output_field%  s   € ä˜TŸ^™^Ó,Ð,r1   c                 ód   — | j                   j                  xr | j                   j                  dk(  S )Niæ  )r5   Ú	geographyr   r0   s    r,   Úsource_is_geographyz'DistanceResultMixin.source_is_geography)  s&   € Ø�~‰~×'Ñ'ÒG¨D¯N©N×,?Ñ,?À4Ñ,GÐGr1   N)r/   rP   rQ   r   r   r¸   rX   r1   r,   r´   r´   $  s   „ Øñ-ó ð-óHr1   r´   c                   ó<   ‡ — e Zd ZdZdZdˆ fd„	Zˆ fd„Zˆ fd„Zˆ xZS )ÚDistancer}   Nc                 óh   •— ||g}|�| j                  |dt        «      | _        t        ‰| �  |i |¤Ž y )Nrx   )rM   Úboolrx   r   r   )r%   Úexpr1Úexpr2rx   r'   r&   r+   s         €r,   r   zDistance.__init__1  s:   ø€ Ø˜e�nˆØÐØ ×.Ñ.¨x¸ÄTÓJˆDŒMÜ‰Ñ˜+Ð/¨Ó/r1   c                 ó´  •— | j                  «       }d }|j                  d   }| j                  «       }|j                  j                  |k7  rZt        |t        «      r||j                  _        n8t        |t        |j                  j                  |¬«      «      |j                  d<   |s›| j                  j                  |«      r€| j                  rY|j                  j                  d«      }|j                  j                  t        | j                  j                  |«      «      «       n|j                  j                  d«      }t!        t"        |�J  ||fd|i|¤ŽS )Nr   )r   r·   ÚDistanceSpheroidÚDistanceSpherer7   )r`   r   r¸   r   r·   r    r   r   r   r   r5   rt   rx   r8   r9   r†   r   rº   r:   )	r%   r;   r<   r=   rl   r7   r¾   r·   r+   s	           €r,   Úas_postgresqlzDistance.as_postgresql7  s,  ø€ Ø—	‘	“ˆØˆØ×(Ñ(¨Ñ+ˆØ×,Ñ,Ó.ˆ	Ø×Ñ×'Ñ'¨9Ò4Ü˜%¤Ô'Ø/8�×"Ñ"Õ,ä.2ØÜ! u×'9Ñ'9×'>Ñ'>È)ÔTó/�×(Ñ(¨Ñ+ñ
 ˜TŸ^™^×4Ñ4°ZÔ@ð �}Š}ð &Ÿ>™>×?Ñ?Ð@RÓS�à×(Ñ(×/Ñ/Ü˜$Ÿ.™.×1Ñ1°*Ó=Ó>õð &Ÿ>™>×?Ñ?Ð@PÓQ�Ü”X˜uÑ,Ø�jñ
Ø+3ð
Ø7Dñ
ð 	
r1   c                 ó¨   •— | j                   j                  |«      r&d|d<   t        t        | j                  «      «      |d<   t        ‰| �  ||fi |¤ŽS )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)rw   rx   )r5   rt   r‡   r¼   rx   r   r:   ru   s       €r,   rd   zDistance.as_sqliteV  sX   ø€ Ø�>‰>×"Ñ" :Ô.ð Kð Øñô ),¬D°·±Ó,?Ó(@ˆM˜*Ñ%Ü‰w‰~˜h¨
ÑD°mÑDÐDr1   r.   )	r/   rP   rQ   r   rx   r   rÂ   rd   rS   rT   s   @r,   rº   rº   -  s#   ø„ Ø€NØ€Hõ0ô
÷>Eð Er1   rº   c                   ó   — e Zd ZdZy)ÚEnveloper   Nr«   rX   r1   r,   rÅ   rÅ   `  r¬   r1   rÅ   c                   ó   — e Zd ZdZy)ÚForcePolygonCWr   Nr«   rX   r1   r,   rÇ   rÇ   d  r¬   r1   rÇ   c                   ó&   — e Zd Z ed¬«      ZdZdZy)ÚFromWKBr   r   r   rX   N©r/   rP   rQ   r   r   ry   r   rX   r1   r,   rÉ   rÉ   h  ó   „ Ù  aÔ(€LØ€EØ�Nr1   rÉ   c                   ó&   — e Zd Z ed¬«      ZdZdZy)ÚFromWKTr   r   r   rX   NrÊ   rX   r1   r,   rÍ   rÍ   n  rË   r1   rÍ   c                   ó4   ‡ — e Zd Z e«       Zdˆ fd„	Zd„ Zˆ xZS )ÚGeoHashc                 óz   •— |g}|�&|j                  | j                  |dt        «      «       t        ‰| �  |i |¤Ž y r‘   r…   r—   s        €r,   r   zGeoHash.__init__w  r˜   r1   c                 óÂ   — | j                  «       }t        |j                  «      dk  r$|j                  j                  t	        d«      «        |j
                  ||fi |¤ŽS )Nr|   éd   )r`   Úlenr   r†   r   r:   )r%   r;   r<   r=   rl   s        r,   Úas_mysqlzGeoHash.as_mysql}  sP   € Ø—	‘	“ˆäˆu×'Ñ'Ó(¨1Ò,Ø×$Ñ$×+Ñ+¬E°#«JÔ7Øˆu�|‰|˜H jÑB°MÑBÐBr1   r.   )r/   rP   rQ   r   r   r   rÔ   rS   rT   s   @r,   rÏ   rÏ   t  s   ø„ Ù“;€Lõ0öCr1   rÏ   c                   ó*   — e Zd Z e«       ZdZdZdZdZy)ÚGeometryDistancer|   rO   z <-> r}   N)	r/   rP   rQ   r   r   ry   r7   Ú
arg_joinerr   rX   r1   r,   rÖ   rÖ   …  s   „ Ù“<€LØ€EØ€HØ€JØ�Nr1   rÖ   c                   ó   — e Zd ZdZdZy)ÚIntersectionr|   r}   Nr¯   rX   r1   r,   rÙ   rÙ   �  r°   r1   rÙ   c                   ó   — e Zd ZdZ e«       Zy)ÚIsEmptyÚisemptyN)r/   rP   rQ   Úlookup_namer   r   rX   r1   r,   rÛ   rÛ   ’  s   „ à€KÙ“>�Lr1   rÛ   c                   ó0   ‡ — e Zd ZdZ e«       Zˆ fd„Zˆ xZS )ÚIsValidÚisvalidc                 ó:   •— t        ‰| �  ||fi |¤Ž\  }}d|z  |fS )Nz%CASE %s WHEN 'TRUE' THEN 1 ELSE 0 END)r   rm   )r%   r;   r<   r=   ÚsqlÚparamsr+   s         €r,   rm   zIsValid.as_oracle�  s-   ø€ Ü‘gÑ'¨°*ÑNÀÑN‰ˆˆVØ6¸Ñ<¸fÐDÐDr1   )r/   rP   rQ   rÝ   r   r   rm   rS   rT   s   @r,   rß   rß   ˜  s   ø„ à€KÙ“>€L÷Eð Er1   rß   c                   ó>   ‡ — e Zd Zdˆ fd„	Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZS )ÚLengthc                 ó4   •— || _         t        ‰| �  |fi |¤Ž y r.   )rx   r   r   )r%   r½   rx   r'   r+   s       €r,   r   zLength.__init__£  s   ø€ Ø ˆŒÜ‰Ñ˜Ñ( %Ó(r1   c                 óž   •— | j                   j                  |«      r!|j                  j                  st	        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz6This backend doesn't support Length on geodetic fields)r5   rt   rr   Úsupports_length_geodeticr
   r   r:   ru   s       €r,   r:   zLength.as_sql§  sL   ø€ à�N‰N×#Ñ# JÔ/Ø×'Ñ'×@Ò@ä#ØHóð ô ‰w‰~˜h¨
ÑD°mÑDÐDr1   c                 ó2  •— | j                  «       }d }| j                  «       r/|j                  j                  t	        | j
                  «      «       n¯| j                  j                  |«      rY|j                  j                  d«      }|j                  j                  t	        | j                  j                  |«      «      «       n;t        d„ | j                  «       D «       «      }|dkD  r|j                  j                  }t        t        |�>  ||fd|i|¤ŽS )NÚLengthSpheroidc              3   ó:   K  — | ]  }|sŒ|j                   –— Œ y ­wr.   ©Údim©Ú.0Úfs     r,   ú	<genexpr>z'Length.as_postgresql.<locals>.<genexpr>»  s   è ø€ ÒC Â�a—e•eÑCùs   ‚Šr|   r7   )r`   r¸   r   r†   r   rx   r5   rt   r8   r9   ÚminrA   Úlength3dr   rå   r:   )r%   r;   r<   r=   rl   r7   rí   r+   s          €r,   rÂ   zLength.as_postgresql±  sã   ø€ Ø—	‘	“ˆØˆØ×#Ñ#Ô%Ø×$Ñ$×+Ñ+¬E°$·-±-Ó,@ÕAØ�^‰^×$Ñ$ ZÔ0à!—~‘~×;Ñ;Ð<LÓMˆHØ×$Ñ$×+Ñ+¬E°$·.±.×2IÑ2IÈ*Ó2UÓ,VÕWäÑC T×%;Ñ%;Ó%=ÔCÓCˆCØ�QŠwØ%Ÿ>™>×2Ñ2�Ü”V˜UÑ*Ø�jñ
Ø+3ð
Ø7Dñ
ð 	
r1   c                 ó„   •— d }| j                   j                  |«      r| j                  rdnd}t        ‰| �  ||fd|i|¤ŽS )NÚGeodesicLengthÚGreatCircleLengthr7   )r5   rt   rx   r   r:   )r%   r;   r<   r=   r7   r+   s        €r,   rd   zLength.as_sqliteÂ  sD   ø€ ØˆØ�>‰>×"Ñ" :Ô.Ø+/¯=ª=Ñ'Ð>QˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr1   )T)r/   rP   rQ   r   r:   rÂ   rd   rS   rT   s   @r,   rå   rå   ¢  s   ø„ õ)ôEô
÷"Xð Xr1   rå   c                   ó"   — e Zd Z e«       ZdZdZy)ÚLineLocatePointr|   r}   Nr~   rX   r1   r,   rø   rø   É  r   r1   rø   c                   ó   — e Zd Zy)Ú	MakeValidNrW   rX   r1   r,   rú   rú   Ï  rY   r1   rú   c                   ó   — e Zd Z e«       ZdZy)ÚMemSizer   N©r/   rP   rQ   r   r   ry   rX   r1   r,   rü   rü   Ó  ó   „ Ù“>€LØ�Er1   rü   c                   ó   — e Zd Z e«       ZdZy)ÚNumGeometriesr   Nrý   rX   r1   r,   r   r   Ø  rþ   r1   r   c                   ó   — e Zd Z e«       ZdZy)Ú	NumPointsr   Nrý   rX   r1   r,   r  r  Ý  rþ   r1   r  c                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )Ú	Perimeterr   c                 ó  •— d }| j                   j                  |«      r| j                  «       st        d«      ‚t	        d„ | j                  «       D «       «      }|dkD  r|j                  j                  }t        ‰| �$  ||fd|i|¤ŽS )Nz<ST_Perimeter cannot use a non-projected non-geography field.c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   rì   rî   s     r,   rñ   z*Perimeter.as_postgresql.<locals>.<genexpr>ë  s   è ø€ Ò:˜A�!—%•%Ñ:ùs   ‚r|   r7   )
r5   rt   r¸   r
   rò   rA   r8   Úperimeter3dr   r:   )r%   r;   r<   r=   r7   rí   r+   s         €r,   rÂ   zPerimeter.as_postgresqlå  s�   ø€ ØˆØ�>‰>×"Ñ" :Ô.°t×7OÑ7OÔ7QÜ#ØNóð ô Ñ: ×!7Ñ!7Ó!9Ô:Ó:ˆØ�Š7Ø!—~‘~×1Ñ1ˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr1   c                 ór   •— | j                   j                  |«      rt        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz+Perimeter cannot use a non-projected field.)r5   rt   r
   r   r:   ru   s       €r,   rd   zPerimeter.as_sqliteð  s7   ø€ Ø�>‰>×"Ñ" :Ô.Ü#Ð$QÓRÐRÜ‰w‰~˜h¨
ÑD°mÑDÐDr1   )r/   rP   rQ   ry   rÂ   rd   rS   rT   s   @r,   r  r  â  s   ø„ Ø€Eô	X÷Eð Er1   r  c                   ó   — e Zd ZdZy)ÚPointOnSurfacer   Nr«   rX   r1   r,   r
  r
  ö  r¬   r1   r
  c                   ó   — e Zd ZdZy)ÚReverser   Nr«   rX   r1   r,   r  r  ú  r¬   r1   r  c                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚScalec                 óØ   •— || j                  |dt        «      | j                  |dt        «      g}|dk7  r&|j                  | j                  |dt        «      «       t        ‰| �  |i |¤Ž y )NÚxÚyç        Úz)rM   rk   r†   r   r   )r%   rˆ   r  r  r  r'   r&   r+   s          €r,   r   zScale.__init__ÿ  si   ø€ àØ×Ñ˜q #¤}Ó5Ø×Ñ˜q #¤}Ó5ð
ˆð
 �Š8Ø×Ñ˜t×1Ñ1°!°S¼-ÓHÔIÜ‰Ñ˜+Ð/¨Ó/r1   )r  ©r/   rP   rQ   r   rS   rT   s   @r,   r  r  þ  s   ø„ ÷0ñ 0r1   r  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú
SnapToGridc           
      ó"  •‡ — t        |«      }|g}|dv r5|j                  |D �cg c]  }‰ j                  |dt        «      ‘Œ c}«       n2|dk(  r"|g ˆ fd„|dd  D «       ¢ˆ fd„|dd D «       ¢z  }nt	        d«      ‚t        ‰‰ �  |i |¤Ž y c c}w )	N)r   r|   rO   é   c              3   óL   •K  — | ]  }‰j                  |d t        «      –— Œ y­wrN   ©rM   rk   ©rï   Úargr%   s     €r,   rñ   z&SnapToGrid.__init__.<locals>.<genexpr>  s    øè ø€ ÒQÀ�$×$Ñ$ S¨"¬m×<ÑQùó   ƒ!$r|   c              3   óL   •K  — | ]  }‰j                  |d t        «      –— Œ y­wrN   r  r  s     €r,   rñ   z&SnapToGrid.__init__.<locals>.<genexpr>  s    øè ø€ ÒRÀ�$×$Ñ$ S¨"¬m×<ÑRùr  r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)rÓ   ÚextendrM   rk   r$   r   r   )r%   rˆ   rC   r'   Únargsr&   r  r+   s   `      €r,   r   zSnapToGrid.__init__  s©   ù€ Ü�D“	ˆØ!�lˆØ�F‰?Ø×ÑØGKÖLÀ�×#Ñ# C¨¬]Õ;ÒLõð �aŠZàð ÛQÈÈQÈRÈÔQðãRÈÈQÈqÈ	ÔRðñ ‰Kô
 ÐQÓRÐRÜ‰Ñ˜+Ð/¨Ó/ùò Ms   ¤Br  rT   s   @r,   r  r  
  s   ø„ ÷0ð 0r1   r  c                   ó   — e Zd ZdZdZy)ÚSymDifferencer|   r}   Nr¯   rX   r1   r,   r"  r"    r°   r1   r"  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )r   c                 ó|   •— || j                  |dt        «      g}d|vrt        |¬«      |d<   t        ‰| �  |i |¤Ž y )Nr   r   r   )rM   r‡   r   r   r   )r%   rˆ   r   r'   r&   r+   s        €r,   r   zTransform.__init__#  sJ   ø€ àØ×Ñ˜t V¬SÓ1ð
ˆð  Ñ&Ü$1°tÔ$<ˆE�.Ñ!Ü‰Ñ˜+Ð/¨Ó/r1   r  rT   s   @r,   r   r   "  s   ø„ ÷0ð 0r1   r   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú	Translatec                 óÆ   •— | j                  «       }t        | j                  «      dk  r$|j                  j                  t	        d«      «       t        t        |�  ||fi |¤ŽS )Nr  r   )r`   rÓ   r   r†   r   r   r&  rd   r§   s        €r,   rd   zTranslate.as_sqlite.  sR   ø€ Ø—	‘	“ˆÜˆt×&Ñ&Ó'¨!Ò+à×$Ñ$×+Ñ+¬E°!«HÔ5Ü”Y Ñ0°¸:ÑWÈÑWÐWr1   )r/   rP   rQ   rd   rS   rT   s   @r,   r&  r&  -  s   ø„ ÷Xð Xr1   r&  c                   ó   — e Zd ZdZdZy)ÚUnionr|   r}   Nr¯   rX   r1   r,   r)  r)  6  r°   r1   r)  N)IÚdecimalr   Ú#django.contrib.gis.db.models.fieldsr   r   Ú django.contrib.gis.db.models.sqlr   r   Údjango.contrib.gis.geosr   Údjango.core.exceptionsr	   Ú	django.dbr
   Údjango.db.modelsr   r   r   r   r   r   r   r   Údjango.db.models.functionsr   Údjango.utils.functionalr   r‡   rc   rk   r   rV   r[   r^   rg   ro   r{   r�   r�   r•   r›   rŸ   r¡   r£   rª   r®   r²   r´   rº   rÅ   rÇ   rÉ   rÍ   rÏ   rÖ   rÙ   Úregister_lookuprÛ   rß   rå   rø   rú   rü   r   r  r  r
  r  r  r  r"  r&  r)  rX   r1   r,   ú<module>r4     sÅ  ðÝ ç Oß EÝ 0Ý -Ý '÷	÷ 	ó 	õ ,Ý 3à�e˜WÐ%€÷Sñ Sôl	ˆl˜Dô 	ô7˜ô 7÷Bñ B÷&Cñ Cô BÐ ô Bô.ˆgô ôU�ô Uô0QˆGô Qô.0ˆGô 0ô0ˆGô 0ôˆGô ô
ˆGô ô
	
Ð)Ð+<ô 	
ôÐ#Ð%6ô ôÐ$ô ô
Ð%Ð'8ô ÷
Hñ Hô0EÐ"Ð$8¸'ô 0EôfÐ ô ôÐ&ô ôˆgô ôˆgô ôCˆgô Cô"�wô ôÐ'Ð):ô ð
 ×!Ñ!ô"ˆl˜Ió "ó "ð"ð
 ×!Ñ!ôEÐ" L°)ó Eó "ðEô$XÐ Ð"6¸ô $XôN�gô ô	Ð!ô 	ôˆgô ô
�Gô ô
�ô ô
EÐ#Ð%9¸7ô Eô(Ð)Ð+<ô ôˆgô ô	0Ð%Ð'8ô 	0ô0Ð*Ð,=ô 0ô&Ð(Ð*;ô ô
0Ð!ô 0ôX�ô XôÐ Ð"3õ r1   