Ë
    ¥#ij]Q  ã                   ó  — 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 d dlmZ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#«      Z0 G d+„ d,e%e#«      Z1 G d-„ d.«      Z2 G d/„ d0e2e%e"«      Z3 G d1„ d2e#«      Z4 G d3„ d4e#«      Z5 G d5„ d6e"«      Z6 G d7„ d8e6«      Z7 G d9„ d:e"«      Z8 G d;„ d<e"«      Z9 G d=„ d>e%e#«      Z:ejv                   G d?„ d@e!e«      «       Z<ejv                   G dA„ dBe!e«      «       Z=ejv                   G dC„ dDe%e!e«      «       Z> G dE„ dFe2e%e"«      Z? G dG„ dHe"«      Z@ G dI„ dJe#«      ZA G dK„ dLe"«      ZB G dM„ dNe"«      ZC G dO„ dPe"«      ZD G dQ„ dRe2e%e"«      ZE G dS„ dTe%e#«      ZF G dU„ dVe"«      ZG G dW„ dXe#«      ZH G dY„ dZe$e#«      ZI G d[„ d\e$e#«      ZJ G d]„ d^e%e#«      ZK G d_„ d`e#«      Z G da„ dbeI«      ZL G dc„ dde%e#«      ZMye)fé    )ÚDecimal)ÚBaseSpatialFieldÚGeometryField)Ú	AreaFieldÚDistanceField)ÚGEOSGeometry)ÚPoint)Ú
FieldError)ÚNotSupportedError)	ÚBinaryFieldÚBooleanFieldÚ	CharFieldÚ
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          €ú`/var/www/html/office/venv/lib/python3.12/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    r0   r'   zGeoFuncMixin.name;   s   € à�~‰~×&Ñ&Ð&ó    c                 óN   — | j                   | j                  d      j                  S ©Nr   )r#   r"   Úfieldr4   s    r0   Ú	geo_fieldzGeoFuncMixin.geo_field?   s$   € à×&Ñ& t×':Ñ':¸1Ñ'=Ñ>×DÑDÐDr5   c                 ó�   •— | j                   €'|€%|j                  j                  | j                  «      }t	        ‰| �  ||fd|i|¤ŽS )NÚfunction)r;   ÚopsÚspatial_function_namer'   r    Úas_sql)r)   ÚcompilerÚ
connectionr;   Úextra_contextr/   s        €r0   r>   zGeoFuncMixin.as_sqlC   sE   ø€ Ø�=‰=Ð  XÐ%5Ø!—~‘~×;Ñ;¸D¿I¹IÓFˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr5   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'   Útyper3   r9   r   r#   r   r   )r)   ÚargsÚkwargsÚresÚsource_fieldsr,   r8   Ú	base_sridr-   Ú	expr_sridr/   s             €r0   rD   zGeoFuncMixin.resolve_expressionH   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ð ˆ
r5   c                 ó^   — t        |d«      s |rt        ||«      st        d|›d|›d�«      ‚|S )NrD   zThe z) parameter has the wrong type: should be rC   )Úhasattrr$   r&   )r)   r%   Ú
param_nameÚcheck_typess       r0   Ú_handle_paramzGeoFuncMixin._handle_paramf   s7   € Ü�uÐ2Ô3Ù¤:¨e°[Ô#AÝâ!¢;ð0óð ð ˆr5   r2   ©Ú N)r3   Ú
__module__Ú__qualname__r;   r"   r!   Úpropertyr'   r   r9   r>   rD   rQ   Ú__classcell__©r/   s   @r0   r   r      sL   ø„ Ø€HØ€Nôð: ñ'ó ð'ð ñEó ðEõXô
÷<r5   r   c                   ó   — e Zd Zy)ÚGeoFuncN©r3   rT   rU   © r5   r0   rZ   rZ   p   ó   „ Ør5   rZ   c                   ó   — e Zd Zed„ «       Zy)ÚGeomOutputGeoFuncc                 óB   — t        | j                  j                  ¬«      S )Nr   )r   r9   r   r4   s    r0   r   zGeomOutputGeoFunc.output_fieldu   s   € ä $§.¡.×"5Ñ"5Ô6Ð6r5   N)r3   rT   rU   r   r   r\   r5   r0   r_   r_   t   s   „ Øñ7ó ñ7r5   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_expressionsrN   r$   r%   r   r   Úfloatr>   )r)   r?   r@   rA   rd   r-   s         r0   Ú	as_sqlitez#SQLiteDecimalToFloatMixin.as_sqlite€   sŒ   € Ø�y‰y‹{ˆØ×#Ñ#ð !×7Ñ7Ó9öð ô ˜t WÔ-´*¸T¿Z¹ZÌÔ2Qô œ% §
¡
Ó+Ô,àñòô		
ð ˆt�{‰{˜8 ZÑA°=ÑAÐAùòs   ®ABN)r3   rT   rU   Ú__doc__rh   r\   r5   r0   rb   rb   z   s   „ ñó
Br5   rb   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   rQ   r+   Úgetrm   ÚNUMERIC_TYPESrd   re   rf   r>   )r)   r?   r@   rA   rm   Úclones         r0   Ú	as_oraclezOracleToleranceMixin.as_oracle’   s}   € ÜØ×ÑØ—
‘
—‘˜{¨D¯N©NÓ;ØÜóó
ˆ	ð —	‘	“ˆØ×$Ñ$Ð%P t×'BÑ'BÓ'DÐ%PÀiÐ%PÔQØˆu�|‰|˜H jÑB°MÑBÐBr5   N)r3   rT   rU   rm   rq   r\   r5   r0   rk   rk   �   s   „ Ø€Ió
Cr5   rk   c                   ó8   ‡ — e Zd ZdZed„ «       Zˆ fd„Zd„ Zˆ xZS )ÚArear   c                 ó,   — t        | j                  «      S r2   )r   r9   r4   s    r0   r   zArea.output_field¢   s   € ä˜Ÿ™Ó(Ð(r5   c                 óž   •— |j                   j                  s&| j                  j                  |«      rt	        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz2Area on geodetic coordinate systems not supported.)ÚfeaturesÚsupports_area_geodeticr9   Úgeodeticr   r    r>   ©r)   r?   r@   rA   r/   s       €r0   r>   zArea.as_sql¦   sP   ø€ Ø×"Ñ"×9Ò9¸d¿n¹n×>UÑ>UØô?
ô $ØDóð ô ‰w‰~˜h¨
ÑD°mÑDÐDr5   c                 ót   — | j                   j                  |«      r
d|d<   d|d<    | j                  ||fi |¤ŽS )Nz+%(function)s(%(expressions)s, %(spheroid)d)ÚtemplateTÚspheroid)r9   rx   r>   )r)   r?   r@   rA   s       r0   rh   zArea.as_sqlite¯   s@   € Ø�>‰>×"Ñ" :Ô.Ø(UˆM˜*Ñ%Ø(,ˆM˜*Ñ%Øˆt�{‰{˜8 ZÑA°=ÑAÐAr5   )	r3   rT   rU   Úarityr   r   r>   rh   rW   rX   s   @r0   rs   rs   Ÿ   s&   ø„ Ø€Eàñ)ó ð)ôEöBr5   rs   c                   ó"   — e Zd Z e«       ZdZdZy)ÚAzimuthé   ©r   r   N©r3   rT   rU   r   r   r}   r"   r\   r5   r0   r   r   ¶   ó   „ Ù“<€LØ€EØ�Nr5   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€   ©ÚappendrQ   Úintr    r!   )	r)   Ú
expressionÚbboxÚcrsr‡   r+   r*   Úoptionsr/   s	           €r0   r!   zAsGeoJSON.__init__¿   sl   ø€ Ø!�lˆØÐ Ø×Ñ˜t×1Ñ1°)¸[Ì#ÓNÔOØˆÙ‘4Ø‰GÙØ‰GÙØˆGØ×Ñ˜7Ô#Ü‰Ñ˜+Ð/¨Ó/r5   c                 ó–   •— | j                  «       }| j                  «       }|j                  |d d «       t        t        |�  ||fi |¤ŽS ©Nr   )rf   rd   re   r    r…   r>   ©r)   r?   r@   rA   r#   rp   r/   s         €r0   rq   zAsGeoJSON.as_oracleÍ   sL   ø€ Ø!×8Ñ8Ó:ÐØ—	‘	“ˆØ×$Ñ$Ð%7¸¸Ð%;Ô<Ü”Y Ñ-¨h¸
ÑTÀmÑTÐTr5   )FFé   )r3   rT   rU   r   r   r!   rq   rW   rX   s   @r0   r…   r…   ¼   s   ø„ Ù“;€Lõ0÷Uð Ur5   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         €r0   r!   zAsGML.__init__Ø   sB   ø€ Ø 
Ð+ˆØÐ Ø×Ñ˜t×1Ñ1°)¸[Ì#ÓNÔOÜ‰Ñ˜+Ð/¨Ó/r5   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_GMLGEOMETRYr;   )rf   rd   re   r%   r    r•   r>   )r)   r?   r@   rA   r#   r˜   rp   r/   s          €r0   rq   zAsGML.as_oracleÞ   sy   ø€ Ø!×8Ñ8Ó:ÐØ$ QÑ'ˆØ—	‘	“ˆØ×$Ñ$Ð&8¸Ñ&;Ð%<Ô=ð �}‰} Ò!ñ )à*ð 	�jÑ!ô
 ”U˜EÑ)¨(°JÑPÀ-ÑPÐPr5   )r€   r“   )	r3   rT   rU   r"   r   r   r!   rq   rW   rX   s   @r0   r•   r•   Ô   s    ø„ Ø€NÙ“;€Lõ0÷
Qð 
Qr5   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        €r0   r!   zAsKML.__init__î   ó?   ø€ Ø!�lˆØÐ Ø×Ñ˜t×1Ñ1°)¸[Ì#ÓNÔOÜ‰Ñ˜+Ð/¨Ó/r5   )r“   ©r3   rT   rU   r   r   r!   rW   rX   s   @r0   r›   r›   ë   s   ø„ Ù“;€L÷0ñ 0r5   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 )NrD   r‡   )rN   r‹   rQ   r    r!   )r)   rŒ   Úrelativer‡   r+   r*   r/   s         €r0   r!   zAsSVG.__init__ø   sP   ø€ ä Ð*>Ô?‰HÄSÈÃ]ð 	ð ØØ×Ñ˜y¨+´sÓ;ð
ˆô
 	‰Ñ˜+Ð/¨Ó/r5   )Fr“   rŸ   rX   s   @r0   r¡   r¡   õ   s   ø„ Ù“;€L÷	0ñ 	0r5   r¡   c                   ó   — e Zd Z e«       ZdZy)ÚAsWKBr   N)r3   rT   rU   r   r   r}   r\   r5   r0   r¥   r¥     s   „ Ù“=€LØ�Er5   r¥   c                   ó   — e Zd Z e«       ZdZy)ÚAsWKTr   N)r3   rT   rU   r   r   r}   r\   r5   r0   r§   r§   	  s   „ Ù“;€LØ�Er5   r§   c                   ó4   ‡ — e Zd Zdˆ fd„	Zˆ fd„Zˆ fd„Zˆ xZS )ÚBoundingCirclec                 ó(   •— t        ‰| �  ||fi |¤Ž y r2   )r    r!   )r)   rŒ   Únum_segr+   r/   s       €r0   r!   zBoundingCircle.__init__  s   ø€ Ü‰Ñ˜ WÑ6°Ó6r5   c                 ó”   •— | j                  «       }|j                  | j                  «       d   g«       t        t        |�  ||fi |¤ŽS r7   )rd   re   rf   r    r©   rq   ©r)   r?   r@   rA   rp   r/   s        €r0   rq   zBoundingCircle.as_oracle  óN   ø€ Ø—	‘	“ˆØ×$Ñ$ d×&AÑ&AÓ&CÀAÑ&FÐ%GÔHÜ”^ UÑ5Ø�jñ
Ø$1ñ
ð 	
r5   c                 ó”   •— | j                  «       }|j                  | j                  «       d   g«       t        t        |�  ||fi |¤ŽS r7   )rd   re   rf   r    r©   rh   r­   s        €r0   rh   zBoundingCircle.as_sqlite  r®   r5   )é0   )r3   rT   rU   r!   rq   rh   rW   rX   s   @r0   r©   r©     s   ø„ õ7ô
÷
ð 
r5   r©   c                   ó   — e Zd ZdZy)ÚCentroidr   N©r3   rT   rU   r}   r\   r5   r0   r²   r²   !  ó   „ Ø�Er5   r²   c                   ó   — e Zd ZdZdZy)ÚClosestPointr€   r�   N©r3   rT   rU   r}   r"   r\   r5   r0   r¶   r¶   %  ó   „ Ø€EØ�Nr5   r¶   c                   ó   — e Zd ZdZdZy)Ú
Differencer€   r�   Nr·   r\   r5   r0   rº   rº   *  r¸   r5   rº   c                   ó"   — e Zd Zed„ «       Zd„ Zy)ÚDistanceResultMixinc                 ó,   — t        | j                  «      S r2   )r   r9   r4   s    r0   r   z DistanceResultMixin.output_field0  s   € ä˜TŸ^™^Ó,Ð,r5   c                 ód   — | j                   j                  xr | j                   j                  dk(  S )Niæ  )r9   Ú	geographyr   r4   s    r0   Úsource_is_geographyz'DistanceResultMixin.source_is_geography4  s&   € Ø�~‰~×'Ñ'ÒG¨D¯N©N×,?Ñ,?À4Ñ,GÐGr5   N)r3   rT   rU   r   r   rÀ   r\   r5   r0   r¼   r¼   /  s   „ Øñ-ó ð-óHr5   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 )Nr|   )rQ   Úboolr|   r    r!   )r)   Úexpr1Úexpr2r|   r+   r*   r/   s         €r0   r!   zDistance.__init__<  s:   ø€ Ø˜e�nˆØÐØ ×.Ñ.¨x¸ÄTÓJˆDŒMÜ‰Ñ˜+Ð/¨Ó/r5   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ÚDistanceSpherer;   )rd   r#   rÀ   r   r¿   r$   r   r   r   r   r9   rx   r|   r<   r=   rŠ   r    rÂ   r>   )	r)   r?   r@   rA   rp   r;   rÆ   r¿   r/   s	           €r0   Úas_postgresqlzDistance.as_postgresqlB  s,  ø€ Ø—	‘	“ˆØˆØ×(Ñ(¨Ñ+ˆØ×,Ñ,Ó.ˆ	Ø×Ñ×'Ñ'¨9Ò4Ü˜%¤Ô'Ø/8�×"Ñ"Õ,ä.2ØÜ! u×'9Ñ'9×'>Ñ'>È)ÔTó/�×(Ñ(¨Ñ+ñ
 ˜TŸ^™^×4Ñ4°ZÔ@ð �}Š}ð &Ÿ>™>×?Ñ?Ð@RÓS�à×(Ñ(×/Ñ/Ü˜$Ÿ.™.×1Ñ1°*Ó=Ó>õð &Ÿ>™>×?Ñ?Ð@PÓQ�Ü”X˜uÑ,Ø�jñ
Ø+3ð
Ø7Dñ
ð 	
r5   c                 ó¨   •— | j                   j                  |«      r&d|d<   t        t        | j                  «      «      |d<   t        ‰| �  ||fi |¤ŽS )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)r{   r|   )r9   rx   r‹   rÄ   r|   r    r>   ry   s       €r0   rh   zDistance.as_sqlitea  sU   ø€ Ø�>‰>×"Ñ" :Ô.ð Kð ˜*Ñ%ô ),¬D°·±Ó,?Ó(@ˆM˜*Ñ%Ü‰w‰~˜h¨
ÑD°mÑDÐDr5   r2   )	r3   rT   rU   r"   r|   r!   rÊ   rh   rW   rX   s   @r0   rÂ   rÂ   8  s#   ø„ Ø€NØ€Hõ0ô
÷>Eð Er5   rÂ   c                   ó   — e Zd ZdZy)ÚEnveloper   Nr³   r\   r5   r0   rÍ   rÍ   k  r´   r5   rÍ   c                   ó   — e Zd ZdZy)ÚForcePolygonCWr   Nr³   r\   r5   r0   rÏ   rÏ   o  r´   r5   rÏ   c                   ó2   ‡ — e Zd ZdZdZdˆ fd„	Zˆ fd„Zˆ xZS )ÚFromWKBr€   r\   c                 ó|   •— || j                  |dt        «      g}d|vrt        |¬«      |d<   t        ‰| �  |i |¤Ž y ©Nr   r   r   ©rQ   r‹   r   r    r!   ©r)   rŒ   r   r+   r*   r/   s        €r0   r!   zFromWKB.__init__w  óJ   ø€ àØ×Ñ˜t V¬SÓ1ð
ˆð  Ñ&Ü$1°tÔ$<ˆE�.Ñ!Ü‰Ñ˜+Ð/¨Ó/r5   c                 ó–   •— | j                  «       }| j                  «       }|j                  |d d «       t        t        |�  ||fi |¤ŽS r‘   )rf   rd   re   r    rÑ   r>   r’   s         €r0   rq   zFromWKB.as_oracle€  sL   ø€ à!×8Ñ8Ó:ÐØ—	‘	“ˆØ×$Ñ$Ð%7¸¸Ð%;Ô<Ü”W˜eÑ+¨H°jÑRÀMÑRÐRr5   r   )r3   rT   rU   r}   r"   r!   rq   rW   rX   s   @r0   rÑ   rÑ   s  s   ø„ Ø€EØ€Nõ0÷Sð Sr5   rÑ   c                   ó   — e Zd Zy)ÚFromWKTNr[   r\   r5   r0   rÙ   rÙ   ˆ  r]   r5   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        €r0   r!   zGeoHash.__init__�  rž   r5   c                 óÂ   — | j                  «       }t        |j                  «      dk  r$|j                  j                  t	        d«      «        |j
                  ||fi |¤ŽS )Nr€   éd   )rd   Úlenr#   rŠ   r   r>   )r)   r?   r@   rA   rp   s        r0   Úas_mysqlzGeoHash.as_mysql•  sP   € Ø—	‘	“ˆäˆu×'Ñ'Ó(¨1Ò,Ø×$Ñ$×+Ñ+¬E°#«JÔ7Øˆu�|‰|˜H jÑB°MÑBÐBr5   r2   )r3   rT   rU   r   r   r!   rà   rW   rX   s   @r0   rÛ   rÛ   Œ  s   ø„ Ù“;€Lõ0öCr5   rÛ   c                   ó*   — e Zd Z e«       ZdZdZdZdZy)ÚGeometryDistancer€   rS   z <-> r�   N)	r3   rT   rU   r   r   r}   r;   Ú
arg_joinerr"   r\   r5   r0   râ   râ   �  s   „ Ù“<€LØ€EØ€HØ€JØ�Nr5   râ   c                   ó   — e Zd ZdZdZy)ÚIntersectionr€   r�   Nr·   r\   r5   r0   rå   rå   ¥  r¸   r5   rå   c                   ó$   — e Zd Z e«       ZdZd„ Zy)ÚGeometryTypeÚ	geom_typec                 óR   — |j                  | j                  «      \  }}d|› d�}||fS )Nz&(SELECT DECODE(SDO_GEOMETRY.GET_GTYPE(z‡),1, 'POINT',2, 'LINESTRING',3, 'POLYGON',4, 'COLLECTION',5, 'MULTIPOINT',6, 'MULTILINESTRING',7, 'MULTIPOLYGON',8, 'SOLID','UNKNOWN')))ÚcompileÚlhs)r)   r?   r@   rA   rë   ÚparamsÚsqls          r0   rq   zGeometryType.as_oracle¯  s?   € Ø×&Ñ& t§x¡xÓ0‰ˆˆVð&Ø&) Uð 	+ð
ð 	ð �Fˆ{Ðr5   N)r3   rT   rU   r   r   Úlookup_namerq   r\   r5   r0   rç   rç   ª  s   „ á“;€LØ€Kór5   rç   c                   ó   — e Zd ZdZ e«       Zy)ÚIsEmptyÚisemptyN)r3   rT   rU   rî   r   r   r\   r5   r0   rð   rð   Á  s   „ à€KÙ“>�Lr5   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    rq   )r)   r?   r@   rA   rí   rì   r/   s         €r0   rq   zIsValid.as_oracleÌ  s-   ø€ Ü‘gÑ'¨°*ÑNÀÑN‰ˆˆVØ6¸Ñ<¸fÐDÐDr5   )r3   rT   rU   rî   r   r   rq   rW   rX   s   @r0   ró   ró   Ç  s   ø„ à€KÙ“>€L÷Eð Er5   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 r2   )r|   r    r!   )r)   rÅ   r|   r+   r/   s       €r0   r!   zLength.__init__Ò  s   ø€ Ø ˆŒÜ‰Ñ˜Ñ( %Ó(r5   c                 óž   •— | j                   j                  |«      r!|j                  j                  st	        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz6This backend doesn't support Length on geodetic fields)r9   rx   rv   Úsupports_length_geodeticr   r    r>   ry   s       €r0   r>   zLength.as_sqlÖ  sL   ø€ à�N‰N×#Ñ# JÔ/Ø×'Ñ'×@Ò@ä#ØHóð ô ‰w‰~˜h¨
ÑD°mÑDÐDr5   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r2   ©Údim©Ú.0Úfs     r0   ú	<genexpr>z'Length.as_postgresql.<locals>.<genexpr>ë  s   è ø€ ÒC Â�a—e•eÑCùs   ‚Šr€   r;   )rd   rÀ   r#   rŠ   r   r|   r9   rx   r<   r=   ÚminrE   Úlength3dr    r÷   r>   )r)   r?   r@   rA   rp   r;   rÿ   r/   s          €r0   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ñ
ð 	
r5   c                 ó„   •— d }| j                   j                  |«      r| j                  rdnd}t        ‰| �  ||fd|i|¤ŽS )NÚGeodesicLengthÚGreatCircleLengthr;   )r9   rx   r|   r    r>   )r)   r?   r@   rA   r;   r/   s        €r0   rh   zLength.as_sqliteò  sD   ø€ ØˆØ�>‰>×"Ñ" :Ô.Ø+/¯=ª=Ñ'Ð>QˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr5   )T)r3   rT   rU   r!   r>   rÊ   rh   rW   rX   s   @r0   r÷   r÷   Ñ  s   ø„ õ)ôEô
÷$Xð Xr5   r÷   c                   ó"   — e Zd Z e«       ZdZdZy)ÚLineLocatePointr€   r�   Nr‚   r\   r5   r0   r
  r
  ù  rƒ   r5   r
  c                   ó   — e Zd Zy)Ú	MakeValidNr[   r\   r5   r0   r  r  ÿ  r]   r5   r  c                   ó   — e Zd Z e«       ZdZy)ÚMemSizer   N©r3   rT   rU   r   r   r}   r\   r5   r0   r  r    ó   „ Ù“>€LØ�Er5   r  c                   ó   — e Zd Z e«       ZdZy)ÚNumGeometriesr   Nr  r\   r5   r0   r  r    r  r5   r  c                   ó   — e Zd Z e«       ZdZy)Ú	NumPointsr   Nr  r\   r5   r0   r  r    r  r5   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r2   rþ   r   s     r0   r  z*Perimeter.as_postgresql.<locals>.<genexpr>  s   è ø€ Ò:˜A�!—%•%Ñ:ùs   ‚r€   r;   )
r9   rx   rÀ   r   r  rE   r<   Úperimeter3dr    r>   )r)   r?   r@   rA   r;   rÿ   r/   s         €r0   rÊ   zPerimeter.as_postgresql  s�   ø€ ØˆØ�>‰>×"Ñ" :Ô.°t×7OÑ7OÔ7QÜ#ØNóð ô Ñ: ×!7Ñ!7Ó!9Ô:Ó:ˆØ�Š7Ø!—~‘~×1Ñ1ˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr5   c                 ór   •— | j                   j                  |«      rt        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz+Perimeter cannot use a non-projected field.)r9   rx   r   r    r>   ry   s       €r0   rh   zPerimeter.as_sqlite   s7   ø€ Ø�>‰>×"Ñ" :Ô.Ü#Ð$QÓRÐRÜ‰w‰~˜h¨
ÑD°mÑDÐDr5   )r3   rT   rU   r}   rÊ   rh   rW   rX   s   @r0   r  r    s   ø„ Ø€Eô	X÷Eð Er5   r  c                   ó   — e Zd ZdZy)ÚPointOnSurfacer   Nr³   r\   r5   r0   r  r  &  r´   r5   r  c                   ó   — e Zd ZdZy)ÚReverser   Nr³   r\   r5   r0   r  r  *  r´   r5   r  c                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚRotatec                 óì   •— || j                  |dt        «      g}|�It        |t        «      st	        d«      ‚|j                  t        |j                  t        «       ¬«      «       t        ‰| �(  |i |¤Ž y )NÚanglezorigin argument must be a Pointr   )rQ   ro   r$   r	   r&   rŠ   r   Úwktr   r    r!   )r)   rŒ   r"  Úoriginr+   r*   r/   s         €r0   r!   zRotate.__init__/  sj   ø€ àØ×Ñ˜u g¬}Ó=ð
ˆð ÐÜ˜f¤eÔ,ÜÐ AÓBÐBØ×Ñœu V§Z¡Z¼m»oÔNÔOÜ‰Ñ˜+Ð/¨Ó/r5   r2   ©r3   rT   rU   r!   rW   rX   s   @r0   r   r   .  s   ø„ ÷	0ñ 	0r5   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)rQ   ro   rŠ   r    r!   )r)   rŒ   r)  r*  r,  r+   r*   r/   s          €r0   r!   zScale.__init__<  si   ø€ àØ×Ñ˜q #¤}Ó5Ø×Ñ˜q #¤}Ó5ð
ˆð
 �Š8Ø×Ñ˜t×1Ñ1°!°S¼-ÓHÔIÜ‰Ñ˜+Ð/¨Ó/r5   )r+  r%  rX   s   @r0   r'  r'  ;  s   ø„ ÷0ñ 0r5   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€   rS   é   c              3   óL   •K  — | ]  }‰j                  |d t        «      –— Œ y­wrR   ©rQ   ro   ©r  Úargr)   s     €r0   r  z&SnapToGrid.__init__.<locals>.<genexpr>R  s    øè ø€ ÒQÀ�$×$Ñ$ S¨"¬m×<ÑQùó   ƒ!$r€   c              3   óL   •K  — | ]  }‰j                  |d t        «      –— Œ y­wrR   r2  r3  s     €r0   r  z&SnapToGrid.__init__.<locals>.<genexpr>S  s    øè ø€ ÒRÀ�$×$Ñ$ S¨"¬m×<ÑRùr5  r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)rß   ÚextendrQ   ro   r(   r    r!   )r)   rŒ   rG   r+   Únargsr*   r4  r/   s   `      €r0   r!   zSnapToGrid.__init__H  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%  rX   s   @r0   r.  r.  G  s   ø„ ÷0ð 0r5   r.  c                   ó   — e Zd ZdZdZy)ÚSymDifferencer€   r�   Nr·   r\   r5   r0   r:  r:  Z  r¸   r5   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 rÓ   rÔ   rÕ   s        €r0   r!   zTransform.__init__`  rÖ   r5   r%  rX   s   @r0   r   r   _  s   ø„ ÷0ð 0r5   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 )Nr0  r   )rd   rß   r#   rŠ   r   r    r>  rh   r­   s        €r0   rh   zTranslate.as_sqlitek  sR   ø€ Ø—	‘	“ˆÜˆt×&Ñ&Ó'¨!Ò+à×$Ñ$×+Ñ+¬E°!«HÔ5Ü”Y Ñ0°¸:ÑWÈÑWÐWr5   )r3   rT   rU   rh   rW   rX   s   @r0   r>  r>  j  s   ø„ ÷Xð Xr5   r>  c                   ó   — e Zd ZdZdZy)ÚUnionr€   r�   Nr·   r\   r5   r0   rA  rA  s  r¸   r5   rA  N)NÚdecimalr   Ú#django.contrib.gis.db.models.fieldsr   r   Ú django.contrib.gis.db.models.sqlr   r   Údjango.contrib.gis.geosr   Údjango.contrib.gis.geos.pointr	   Údjango.core.exceptionsr
   Ú	django.dbr   Údjango.db.modelsr   r   r   r   r   r   r   r   r   Údjango.db.models.functionsr   Údjango.utils.functionalr   r‹   rg   ro   r   rZ   r_   rb   rk   rs   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:  r>  rA  r\   r5   r0   ú<module>rM     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Ð ô ôÐ&ô ôSˆgô Sô*	ˆgô 	ôCˆgô Cô"�wô ôÐ'Ð):ô ð
 ×!Ñ!ô�< ó ó "ðð, ×!Ñ!ô"ˆl˜Ió "ó "ð"ð
 ×!Ñ!ôEÐ" L°)ó Eó "ðEô%XÐ Ð"6¸ô %XôP�gô ô	Ð!ô 	ôˆgô ô
�Gô ô
�ô ô
EÐ#Ð%9¸7ô Eô(Ð)Ð+<ô ôˆgô ô
0Ðô 
0ô	0Ð%Ð'8ô 	0ô0Ð*Ð,=ô 0ô&Ð(Ð*;ô ô
0Ð!ô 0ôX�ô XôÐ Ð"3õ r5   