Ë
    ¹ûàg–L  ã                   ó¬  — 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„ d7e3«      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          €úd/var/www/skyplay_api_hub/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    r-   r$   zGeoFuncMixin.name9   s   € à�~‰~×&Ñ&Ð&ó    c                 óN   — | j                   | j                  d      j                  S ©Nr   )r    r   Úfieldr1   s    r-   Ú	geo_fieldzGeoFuncMixin.geo_field=   s$   € à×&Ñ& t×':Ñ':¸1Ñ'=Ñ>×DÑDÐDr2   c                 ó�   •— | j                   €'|€%|j                  j                  | j                  «      }t	        ‰| �  ||fd|i|¤ŽS )NÚfunction)r8   ÚopsÚspatial_function_namer$   r   Úas_sql)r&   ÚcompilerÚ
connectionr8   Úextra_contextr,   s        €r-   r;   zGeoFuncMixin.as_sqlA   sE   ø€ Ø�=‰=Ð  XÐ%5Ø!—~‘~×;Ñ;¸D¿I¹IÓFˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr2   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$   Útyper0   r6   r   r    r   r   )r&   ÚargsÚkwargsÚresÚsource_fieldsr)   r5   Ú	base_sridr*   Ú	expr_sridr,   s             €r-   rA   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ð ˆ
r2   c                 ó^   — t        |d«      s |rt        ||«      st        d|›d|›d�«      ‚|S )NrA   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óð ð ˆr2   r/   ©Ú N)r0   Ú
__module__Ú__qualname__r8   r   r   Úpropertyr$   r   r6   r;   rA   rN   Ú__classcell__©r,   s   @r-   r   r      sL   ø„ Ø€HØ€Nôð: ñ'ó ð'ð ñEó ðEõXô
÷<r2   r   c                   ó   — e Zd Zy)ÚGeoFuncN©r0   rQ   rR   © r2   r-   rW   rW   n   ó   „ Ør2   rW   c                   ó   — e Zd Zed„ «       Zy)ÚGeomOutputGeoFuncc                 óB   — t        | j                  j                  ¬«      S )Nr   )r   r6   r   r1   s    r-   r   zGeomOutputGeoFunc.output_fields   s   € ä $§.¡.×"5Ñ"5Ô6Ð6r2   N)r0   rQ   rR   r   r   rY   r2   r-   r\   r\   r   s   „ Øñ7ó ñ7r2   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_expressionsrK   r!   r"   r   r   Úfloatr;   )r&   r<   r=   r>   ra   r*   s         r-   Ú	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)r0   rQ   rR   Ú__doc__re   rY   r2   r-   r_   r_   x   s   „ ñó
Br2   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   rN   r(   Úgetrj   ÚNUMERIC_TYPESra   rb   rc   r;   )r&   r<   r=   r>   rj   Ú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ÐBr2   N)r0   rQ   rR   rj   rn   rY   r2   r-   rh   rh   �   s   „ Ø€Ió
Cr2   rh   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   r6   r1   s    r-   r   zArea.output_field    s   € ä˜Ÿ™Ó(Ð(r2   c                 óž   •— |j                   j                  s&| j                  j                  |«      rt	        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz2Area on geodetic coordinate systems not supported.)ÚfeaturesÚsupports_area_geodeticr6   Ú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ÐDr2   c                 ót   — | j                   j                  |«      r
d|d<   d|d<    | j                  ||fi |¤ŽS )Nz+%(function)s(%(expressions)s, %(spheroid)d)ÚtemplateTÚspheroid)r6   ru   r;   )r&   r<   r=   r>   s       r-   re   zArea.as_sqlite­   s@   € Ø�>‰>×"Ñ" :Ô.Ø(UˆM˜*Ñ%Ø(,ˆM˜*Ñ%Øˆt�{‰{˜8 ZÑA°=ÑAÐAr2   )	r0   rQ   rR   Úarityr   r   r;   re   rT   rU   s   @r-   rp   rp   �   s&   ø„ Ø€Eàñ)ó ð)ôEöBr2   rp   c                   ó"   — e Zd Z e«       ZdZdZy)ÚAzimuthé   ©r   r   N©r0   rQ   rR   r   r   rz   r   rY   r2   r-   r|   r|   ´   ó   „ Ù“<€LØ€EØ�Nr2   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}   ©ÚappendrN   Ú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Ô#Ü‰Ñ˜+Ð/¨Ó/r2   c                 ó–   •— | j                  «       }| j                  «       }|j                  |d d «       t        t        |�  ||fi |¤ŽS ©Nr   )rc   ra   rb   r   r‚   r;   ©r&   r<   r=   r>   r    rm   r,   s         €r-   rn   zAsGeoJSON.as_oracleË   sL   ø€ Ø!×8Ñ8Ó:ÐØ—	‘	“ˆØ×$Ñ$Ð%7¸¸Ð%;Ô<Ü”Y Ñ-¨h¸
ÑTÀmÑTÐTr2   )FFé   )r0   rQ   rR   r   r   r   rn   rT   rU   s   @r-   r‚   r‚   º   s   ø„ Ù“;€Lõ0÷Uð Ur2   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Ü‰Ñ˜+Ð/¨Ó/r2   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_GMLGEOMETRYr8   )rc   ra   rb   r"   r   r’   r;   )r&   r<   r=   r>   r    r•   rm   r,   s          €r-   rn   zAsGML.as_oracleÜ   sy   ø€ Ø!×8Ñ8Ó:ÐØ$ QÑ'ˆØ—	‘	“ˆØ×$Ñ$Ð&8¸Ñ&;Ð%<Ô=ð �}‰} Ò!ñ )à*ð 	�jÑ!ô
 ”U˜EÑ)¨(°JÑPÀ-ÑPÐPr2   )r}   r�   )	r0   rQ   rR   r   r   r   r   rn   rT   rU   s   @r-   r’   r’   Ò   s    ø„ Ø€NÙ“;€Lõ0÷
Qð 
Qr2   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Ü‰Ñ˜+Ð/¨Ó/r2   )r�   ©r0   rQ   rR   r   r   r   rT   rU   s   @r-   r˜   r˜   é   s   ø„ Ù“;€L÷0ñ 0r2   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 )NrA   r„   )rK   rˆ   rN   r   r   )r&   r‰   Úrelativer„   r(   r'   r,   s         €r-   r   zAsSVG.__init__ö   sP   ø€ ä Ð*>Ô?‰HÄSÈÃ]ð 	ð ØØ×Ñ˜y¨+´sÓ;ð
ˆô
 	‰Ñ˜+Ð/¨Ó/r2   )Fr�   rœ   rU   s   @r-   rž   rž   ó   s   ø„ Ù“;€L÷	0ñ 	0r2   rž   c                   ó   — e Zd Z e«       ZdZy)ÚAsWKBr   N)r0   rQ   rR   r   r   rz   rY   r2   r-   r¢   r¢     s   „ Ù“=€LØ�Er2   r¢   c                   ó   — e Zd Z e«       ZdZy)ÚAsWKTr   N)r0   rQ   rR   r   r   rz   rY   r2   r-   r¤   r¤     s   „ Ù“;€LØ�Er2   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 r/   )r   r   )r&   r‰   Únum_segr(   r,   s       €r-   r   zBoundingCircle.__init__  s   ø€ Ü‰Ñ˜ WÑ6°Ó6r2   c                 ó”   •— | j                  «       }|j                  | j                  «       d   g«       t        t        |�  ||fi |¤ŽS r4   )ra   rb   rc   r   r¦   rn   ©r&   r<   r=   r>   rm   r,   s        €r-   rn   zBoundingCircle.as_oracle  óN   ø€ Ø—	‘	“ˆØ×$Ñ$ d×&AÑ&AÓ&CÀAÑ&FÐ%GÔHÜ”^ UÑ5Ø�jñ
Ø$1ñ
ð 	
r2   c                 ó”   •— | j                  «       }|j                  | j                  «       d   g«       t        t        |�  ||fi |¤ŽS r4   )ra   rb   rc   r   r¦   re   rª   s        €r-   re   zBoundingCircle.as_sqlite  r«   r2   )é0   )r0   rQ   rR   r   rn   re   rT   rU   s   @r-   r¦   r¦     s   ø„ õ7ô
÷
ð 
r2   r¦   c                   ó   — e Zd ZdZy)ÚCentroidr   N©r0   rQ   rR   rz   rY   r2   r-   r¯   r¯     ó   „ Ø�Er2   r¯   c                   ó   — e Zd ZdZdZy)ÚClosestPointr}   r~   N©r0   rQ   rR   rz   r   rY   r2   r-   r³   r³   #  ó   „ Ø€EØ�Nr2   r³   c                   ó   — e Zd ZdZdZy)Ú
Differencer}   r~   Nr´   rY   r2   r-   r·   r·   (  rµ   r2   r·   c                   ó"   — e Zd Zed„ «       Zd„ Zy)ÚDistanceResultMixinc                 ó,   — t        | j                  «      S r/   )r   r6   r1   s    r-   r   z DistanceResultMixin.output_field.  s   € ä˜TŸ^™^Ó,Ð,r2   c                 ód   — | j                   j                  xr | j                   j                  dk(  S )Niæ  )r6   Ú	geographyr   r1   s    r-   Úsource_is_geographyz'DistanceResultMixin.source_is_geography2  s&   € Ø�~‰~×'Ñ'ÒG¨D¯N©N×,?Ñ,?À4Ñ,GÐGr2   N)r0   rQ   rR   r   r   r½   rY   r2   r-   r¹   r¹   -  s   „ Øñ-ó ð-óHr2   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 )Nry   )rN   Úboolry   r   r   )r&   Úexpr1Úexpr2ry   r(   r'   r,   s         €r-   r   zDistance.__init__:  s:   ø€ Ø˜e�nˆØÐØ ×.Ñ.¨x¸ÄTÓJˆDŒMÜ‰Ñ˜+Ð/¨Ó/r2   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ÚDistanceSpherer8   )ra   r    r½   r   r¼   r!   r   r   r   r   r6   ru   ry   r9   r:   r‡   r   r¿   r;   )	r&   r<   r=   r>   rm   r8   rÃ   r¼   r,   s	           €r-   Úas_postgresqlzDistance.as_postgresql@  s,  ø€ Ø—	‘	“ˆØˆØ×(Ñ(¨Ñ+ˆØ×,Ñ,Ó.ˆ	Ø×Ñ×'Ñ'¨9Ò4Ü˜%¤Ô'Ø/8�×"Ñ"Õ,ä.2ØÜ! u×'9Ñ'9×'>Ñ'>È)ÔTó/�×(Ñ(¨Ñ+ñ
 ˜TŸ^™^×4Ñ4°ZÔ@ð �}Š}ð &Ÿ>™>×?Ñ?Ð@RÓS�à×(Ñ(×/Ñ/Ü˜$Ÿ.™.×1Ñ1°*Ó=Ó>õð &Ÿ>™>×?Ñ?Ð@PÓQ�Ü”X˜uÑ,Ø�jñ
Ø+3ð
Ø7Dñ
ð 	
r2   c                 ó¨   •— | j                   j                  |«      r&d|d<   t        t        | j                  «      «      |d<   t        ‰| �  ||fi |¤ŽS )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)rx   ry   )r6   ru   rˆ   rÁ   ry   r   r;   rv   s       €r-   re   zDistance.as_sqlite_  sU   ø€ Ø�>‰>×"Ñ" :Ô.ð Kð ˜*Ñ%ô ),¬D°·±Ó,?Ó(@ˆM˜*Ñ%Ü‰w‰~˜h¨
ÑD°mÑDÐDr2   r/   )	r0   rQ   rR   r   ry   r   rÇ   re   rT   rU   s   @r-   r¿   r¿   6  s#   ø„ Ø€NØ€Hõ0ô
÷>Eð Er2   r¿   c                   ó   — e Zd ZdZy)ÚEnveloper   Nr°   rY   r2   r-   rÊ   rÊ   i  r±   r2   rÊ   c                   ó   — e Zd ZdZy)ÚForcePolygonCWr   Nr°   rY   r2   r-   rÌ   rÌ   m  r±   r2   rÌ   c                   ó2   ‡ — e Zd ZdZdZdˆ fd„	Zˆ fd„Zˆ xZS )ÚFromWKBr}   rY   c                 ó|   •— || j                  |dt        «      g}d|vrt        |¬«      |d<   t        ‰| �  |i |¤Ž y ©Nr   r   r   ©rN   rˆ   r   r   r   ©r&   r‰   r   r(   r'   r,   s        €r-   r   zFromWKB.__init__u  óJ   ø€ àØ×Ñ˜t V¬SÓ1ð
ˆð  Ñ&Ü$1°tÔ$<ˆE�.Ñ!Ü‰Ñ˜+Ð/¨Ó/r2   c                 ó–   •— | j                  «       }| j                  «       }|j                  |d d «       t        t        |�  ||fi |¤ŽS rŽ   )rc   ra   rb   r   rÎ   r;   r�   s         €r-   rn   zFromWKB.as_oracle~  sL   ø€ à!×8Ñ8Ó:ÐØ—	‘	“ˆØ×$Ñ$Ð%7¸¸Ð%;Ô<Ü”W˜eÑ+¨H°jÑRÀMÑRÐRr2   r   )r0   rQ   rR   rz   r   r   rn   rT   rU   s   @r-   rÎ   rÎ   q  s   ø„ Ø€EØ€Nõ0÷Sð Sr2   rÎ   c                   ó   — e Zd Zy)ÚFromWKTNrX   rY   r2   r-   rÖ   rÖ   †  rZ   r2   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__�  r›   r2   c                 óÂ   — | j                  «       }t        |j                  «      dk  r$|j                  j                  t	        d«      «        |j
                  ||fi |¤ŽS )Nr}   éd   )ra   Úlenr    r‡   r   r;   )r&   r<   r=   r>   rm   s        r-   Úas_mysqlzGeoHash.as_mysql“  sP   € Ø—	‘	“ˆäˆu×'Ñ'Ó(¨1Ò,Ø×$Ñ$×+Ñ+¬E°#«JÔ7Øˆu�|‰|˜H jÑB°MÑBÐBr2   r/   )r0   rQ   rR   r   r   r   rÝ   rT   rU   s   @r-   rØ   rØ   Š  s   ø„ Ù“;€Lõ0öCr2   rØ   c                   ó*   — e Zd Z e«       ZdZdZdZdZy)ÚGeometryDistancer}   rP   z <-> r~   N)	r0   rQ   rR   r   r   rz   r8   Ú
arg_joinerr   rY   r2   r-   rß   rß   ›  s   „ Ù“<€LØ€EØ€HØ€JØ�Nr2   rß   c                   ó   — e Zd ZdZdZy)ÚIntersectionr}   r~   Nr´   rY   r2   r-   râ   râ   £  rµ   r2   râ   c                   ó   — e Zd ZdZ e«       Zy)ÚIsEmptyÚisemptyN)r0   rQ   rR   Úlookup_namer   r   rY   r2   r-   rä   rä   ¨  s   „ à€KÙ“>�Lr2   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   rn   )r&   r<   r=   r>   ÚsqlÚparamsr,   s         €r-   rn   zIsValid.as_oracle³  s-   ø€ Ü‘gÑ'¨°*ÑNÀÑN‰ˆˆVØ6¸Ñ<¸fÐDÐDr2   )r0   rQ   rR   ræ   r   r   rn   rT   rU   s   @r-   rè   rè   ®  s   ø„ à€KÙ“>€L÷Eð Er2   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/   )ry   r   r   )r&   rÂ   ry   r(   r,   s       €r-   r   zLength.__init__¹  s   ø€ Ø ˆŒÜ‰Ñ˜Ñ( %Ó(r2   c                 óž   •— | j                   j                  |«      r!|j                  j                  st	        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz6This backend doesn't support Length on geodetic fields)r6   ru   rs   Úsupports_length_geodeticr
   r   r;   rv   s       €r-   r;   zLength.as_sql½  sL   ø€ à�N‰N×#Ñ# JÔ/Ø×'Ñ'×@Ò@ä#ØHóð ô ‰w‰~˜h¨
ÑD°mÑDÐDr2   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}   r8   )ra   r½   r    r‡   r   ry   r6   ru   r9   r:   ÚminrB   Úlength3dr   rî   r;   )r&   r<   r=   r>   rm   r8   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ñ
ð 	
r2   c                 ó„   •— d }| j                   j                  |«      r| j                  rdnd}t        ‰| �  ||fd|i|¤ŽS )NÚGeodesicLengthÚGreatCircleLengthr8   )r6   ru   ry   r   r;   )r&   r<   r=   r>   r8   r,   s        €r-   re   zLength.as_sqliteØ  sD   ø€ ØˆØ�>‰>×"Ñ" :Ô.Ø+/¯=ª=Ñ'Ð>QˆHÜ‰w‰~˜h¨
ÑW¸XÐWÈÑWÐWr2   )T)r0   rQ   rR   r   r;   rÇ   re   rT   rU   s   @r-   rî   rî   ¸  s   ø„ õ)ôEô
÷"Xð Xr2   rî   c                   ó"   — e Zd Z e«       ZdZdZy)ÚLineLocatePointr}   r~   Nr   rY   r2   r-   r  r  ß  r€   r2   r  c                   ó   — e Zd Zy)Ú	MakeValidNrX   rY   r2   r-   r  r  å  rZ   r2   r  c                   ó   — e Zd Z e«       ZdZy)ÚMemSizer   N©r0   rQ   rR   r   r   rz   rY   r2   r-   r  r  é  ó   „ Ù“>€LØ�Er2   r  c                   ó   — e Zd Z e«       ZdZy)ÚNumGeometriesr   Nr  rY   r2   r-   r	  r	  î  r  r2   r	  c                   ó   — e Zd Z e«       ZdZy)Ú	NumPointsr   Nr  rY   r2   r-   r  r  ó  r  r2   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}   r8   )
r6   ru   r½   r
   rû   rB   r9   Úperimeter3dr   r;   )r&   r<   r=   r>   r8   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ÐWr2   c                 ór   •— | j                   j                  |«      rt        d«      ‚t        ‰| �  ||fi |¤ŽS )Nz+Perimeter cannot use a non-projected field.)r6   ru   r
   r   r;   rv   s       €r-   re   zPerimeter.as_sqlite  s7   ø€ Ø�>‰>×"Ñ" :Ô.Ü#Ð$QÓRÐRÜ‰w‰~˜h¨
ÑD°mÑDÐDr2   )r0   rQ   rR   rz   rÇ   re   rT   rU   s   @r-   r  r  ø  s   ø„ Ø€Eô	X÷Eð Er2   r  c                   ó   — e Zd ZdZy)ÚPointOnSurfacer   Nr°   rY   r2   r-   r  r    r±   r2   r  c                   ó   — e Zd ZdZy)ÚReverser   Nr°   rY   r2   r-   r  r    r±   r2   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)rN   rl   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Ü‰Ñ˜+Ð/¨Ó/r2   )r  ©r0   rQ   rR   r   rT   rU   s   @r-   r  r    s   ø„ ÷0ñ 0r2   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}   rP   é   c              3   óL   •K  — | ]  }‰j                  |d t        «      –— Œ y­wrO   ©rN   rl   ©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rO   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Ü   ÚextendrN   rl   r%   r   r   )r&   r‰   rD   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  rU   s   @r-   r  r     s   ø„ ÷0ð 0r2   r  c                   ó   — e Zd ZdZdZy)ÚSymDifferencer}   r~   Nr´   rY   r2   r-   r+  r+  3  rµ   r2   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        €r-   r   zTransform.__init__9  rÓ   r2   r  rU   s   @r-   r   r   8  s   ø„ ÷0ð 0r2   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   )ra   rÜ   r    r‡   r   r   r/  re   rª   s        €r-   re   zTranslate.as_sqliteD  sR   ø€ Ø—	‘	“ˆÜˆt×&Ñ&Ó'¨!Ò+à×$Ñ$×+Ñ+¬E°!«HÔ5Ü”Y Ñ0°¸:ÑWÈÑWÐWr2   )r0   rQ   rR   re   rT   rU   s   @r-   r/  r/  C  s   ø„ ÷Xð Xr2   r/  c                   ó   — e Zd ZdZdZy)ÚUnionr}   r~   Nr´   rY   r2   r-   r2  r2  L  rµ   r2   r2  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ˆ   rd   rl   r   rW   r\   r_   rh   rp   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/  r2  rY   r2   r-   ú<module>r=     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ôN�gô ô	Ð!ô 	ôˆgô ô
�Gô ô
�ô ô
EÐ#Ð%9¸7ô Eô(Ð)Ð+<ô ôˆgô ô	0Ð%Ð'8ô 	0ô0Ð*Ð,=ô 0ô&Ð(Ð*;ô ô
0Ð!ô 0ôX�ô XôÐ Ð"3õ r2   