§
    Î“ÙhêH  ã                   óŒ  — 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"e ¦  «        Z- G d*„ d+¦  «        Z. G d,„ d-e.e"e¦  «        Z/ G d.„ d/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"e ¦  «        Z6ej7         G d<„ d=ee¦  «        ¦   «         Z8ej7         G d>„ d?e"ee¦  «        ¦   «         Z9 G d@„ dAe.e"e¦  «        Z: G dB„ dCe¦  «        Z; G dD„ dEe ¦  «        Z< G dF„ dGe¦  «        Z= G dH„ dIe¦  «        Z> G dJ„ dKe¦  «        Z? G dL„ dMe.e"e¦  «        Z@ G dN„ dOe"e ¦  «        ZA G dP„ dQe¦  «        ZB G dR„ dSe!e ¦  «        ZC G dT„ dUe!e ¦  «        ZD G dV„ dWe"e ¦  «        ZE G dX„ dYe ¦  «        Z G dZ„ d[eC¦  «        ZF G d\„ d]e"e ¦  «        ZGd^S )_é    )ÚDecimal)ÚBaseSpatialFieldÚGeometryField)Ú	AreaFieldÚDistanceField)ÚGEOSGeometry)Ú
FieldError)ÚNotSupportedError)ÚBinaryFieldÚBooleanFieldÚ
FloatFieldÚFuncÚIntegerFieldÚ	TextFieldÚ	TransformÚValue)ÚCast)Úcached_propertyc                   óp   ‡ — 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          ¦   «         j        |i |¤Ž | j        D ]Õ}| j        |         }t	          |t
          ¦  «        sŒ%	 |j        }n# t          $ r d }Y nw xY w|j        }t	          |t          ¦  «        r|r1t	          |t          ¦  «        st          d| j        |dz   fz  ¦  «        ‚|j        s|st          d¦  «        ‚|s,t          |t          |j        ¬¦  «        ¬¦  «        | j        |<   ŒÖd S )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          €úe/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django/contrib/gis/db/models/functions.pyr   zGeoFuncMixin.__init__   sL  ø€ Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/ð Ô&ð 	ð 	ˆCØÔ*¨3Ô/ˆDÝ˜d¥EÑ*Ô*ð Øð$Ø#Ô0��øÝð $ð $ð $Ø#���ð$øøøà”:ˆDå˜t¥\Ñ2Ô2ðàðõ # <µÑ?Ô?ðõ
  ØOØ”y #¨¡'Ð*ñ+ñô ð ð ”9ð I \ð IÝ Ð!GÑHÔHÐHØð Ý/4Ø¥}¸$¼)Ð'DÑ'DÔ'Dð0ñ 0ô 0�Ô'¨Ñ,øð+	ð 	s   ÁAÁAÁAc                 ó   — | j         j        S ©N)r+   Ú__name__©r%   s    r,   r#   zGeoFuncMixin.name9   s   € àŒ~Ô&Ð&ó    c                 ó<   — | j         | j        d                  j        S ©Nr   )r   r   Úfieldr0   s    r,   Ú	geo_fieldzGeoFuncMixin.geo_field=   s   € àÔ& tÔ':¸1Ô'=Ô>ÔDÐDr1   c                 óŽ   •— | j         €!|€|j                             | j        ¦  «        } t	          ¦   «         j        ||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   sL   ø€ ØŒ=Ð  XÐ%5Ø!”~×;Ò;¸D¼IÑFÔFˆHØ�u‰wŒwŒ~˜h¨
ÐWÐW¸XÐWÈÐWÐWÐWr1   c           
      óæ  •—  t          ¦   «         j        |i |¤Ž}| j        s|S |                     ¦   «         }| j        D ]Q}||         }t	          |t
          ¦  «        s2t          | j        ›d|dz   ›dt          |¦  «        j	        ›d�¦  «        ‚ŒR|j
        j        }| j        dd …         D ]D}|j        |         }|j        j        }	|	|k    r# t          ||¦  «        j        |i |¤Ž|j        |<   ŒE|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<  ø€ Ø(�e‰gŒgÔ(¨$Ð9°&Ð9Ð9ˆØÔ"ð 	ØˆJð ×-Ò-Ñ/Ô/ˆØÔ&ð 
	ð 
	ˆCØ! #Ô&ˆEÝ˜e¥]Ñ3Ô3ð Ýð œ	˜	˜	Ø˜a™˜˜Ý˜U™œÔ,Ð,Ð,ð	ñô ð ðð ”MÔ&ˆ	ØÔ& q r rÔ*ð 	6ð 	6ˆCØÔ)¨#Ô.ˆDØÔ)Ô.ˆIØ˜IÒ%Ð%ð/%­iØ˜)ñ/ô /ä$ dð/6à.4ð/6ð /6�Ô& sÑ+øð ˆ
r1   Ú c                 óv   — 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   s[   € Ý�uÐ2Ñ3Ô3ð 	Øð ¥:¨e°[Ñ#AÔ#Að Ý�ià!�z�z ; ; ;ð0ñô ð ð ˆr1   r.   ©rI   N)r/   Ú
__module__Ú__qualname__r7   r   r   Úpropertyr#   r   r5   r:   r@   rN   Ú__classcell__©r+   s   @r,   r   r      sÌ   ø€ € € € € Ø€HØ€Nðð ð ð ð ð: ð'ð 'ñ „Xð'ð ðEð Eñ „_ðEðXð Xð Xð Xð Xð Xð
ð ð ð ð ð<ð ð ð ð ð ð ð r1   r   c                   ó   — e Zd ZdS )ÚGeoFuncN©r/   rP   rQ   © r1   r,   rV   rV   n   ó   € € € € € Ø€Dr1   rV   c                   ó$   — e Zd Zed„ ¦   «         ZdS )ÚGeomOutputGeoFuncc                 ó6   — t          | j        j        ¬¦  «        S )Nr   )r   r5   r   r0   s    r,   r   zGeomOutputGeoFunc.output_fields   s   € å $¤.Ô"5Ð6Ñ6Ô6Ð6r1   N)r/   rP   rQ   r   r   rX   r1   r,   r[   r[   r   s-   € € € € € Øð7ð 7ñ „_ð7ð 7ð 7r1   r[   c                   ó   — e Zd ZdZd„ ZdS )Ú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                 óª   — |                       ¦   «         }|                     d„ |                     ¦   «         D ¦   «         ¦  «          |j        ||fi |¤ŽS )Nc                 ó¨   — g | ]O}t          |d ¦  «        r;t          |j        t          ¦  «        r!t	          t          |j        ¦  «        ¦  «        n|‘ŒPS )r!   )rK   r    r!   r   r   Úfloat)Ú.0r)   s     r,   ú
<listcomp>z7SQLiteDecimalToFloatMixin.as_sqlite.<locals>.<listcomp>�   sg   € ð ð ð ð õ ˜4 Ñ)Ô)ðÝ.8¸¼ÅWÑ.MÔ.Mð••e˜DœJÑ'Ô'Ñ(Ô(Ð(àðð ð r1   )ÚcopyÚset_source_expressionsÚget_source_expressionsr:   )r%   r;   r<   r=   rd   s        r,   Ú	as_sqlitez#SQLiteDecimalToFloatMixin.as_sqlite~   so   € Ø�yŠy‰{Œ{ˆØ×#Ò#ðð ð !×7Ò7Ñ9Ô9ð	ñ ô ñ	
ô 	
ð 	
ð ˆtŒ{˜8 ZÐAÐA°=ÐAÐAÐAr1   N)r/   rP   rQ   Ú__doc__rg   rX   r1   r,   r^   r^   x   s2   € € € € € ðð ð

Bð 
Bð 
Bð 
Bð 
Br1   r^   c                   ó   — e Zd ZdZd„ ZdS )ÚOracleToleranceMixingš™™™™™©?c                 ó,  — t          |                      | j                             d| j        ¦  «        dt
          ¦  «        ¦  «        }|                      ¦   «         }|                     g |                      ¦   «         ¢|‘¦  «          |j	        ||fi |¤ŽS )NÚ	tolerance)
r   rN   r'   Úgetrl   ÚNUMERIC_TYPESrd   re   rf   r:   )r%   r;   r<   r=   rl   Úclones         r,   Ú	as_oraclezOracleToleranceMixin.as_oracleŽ   s•   € ÝØ×ÒØ”
—’˜{¨D¬NÑ;Ô;ØÝñô ñ
ô 
ˆ	ð —	’	‘”ˆØ×$Ò$Ð%P t×'BÒ'BÑ'DÔ'DÐ%PÀiÐ%PÑQÔQÐQØˆuŒ|˜H jÐBÐB°MÐBÐBÐBr1   N)r/   rP   rQ   rl   rp   rX   r1   r,   rj   rj   ‹   s-   € € € € € Ø€Ið
Cð 
Cð 
Cð 
Cð 
Cr1   rj   c                   ó>   ‡ — 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                             |¦  «        rt	          d¦  «        ‚ t          ¦   «         j        ||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¢   sf   ø€ ØÔ"Ô9ð 	¸d¼n×>UÒ>UØñ?
ô ?
ð 	õ $ØDñô ð ð �u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr1   c                 óh   — | j                              |¦  «        r
d|d<   d|d<    | j        ||fi |¤ŽS )Nz+%(function)s(%(expressions)s, %(spheroid)d)ÚtemplateTÚspheroid)r5   rw   r:   )r%   r;   r<   r=   s       r,   rg   zArea.as_sqlite«   sJ   € ØŒ>×"Ò" :Ñ.Ô.ð 	-Ø(UˆM˜*Ñ%Ø(,ˆM˜*Ñ%ØˆtŒ{˜8 ZÐAÐA°=ÐAÐAÐAr1   )	r/   rP   rQ   Úarityr   r   r:   rg   rS   rT   s   @r,   rr   rr   ›   sq   ø€ € € € € Ø€Eàð)ð )ñ „_ð)ðEð Eð Eð Eð EðBð Bð Bð Bð Bð Bð Br1   rr   c                   ó*   — e Zd Z e¦   «         ZdZdZdS )ÚAzimuthé   ©r   r   N©r/   rP   rQ   r   r   r|   r   rX   r1   r,   r~   r~   ²   ó#   € € € € € Ø�:‘<”<€LØ€EØ€N€N€Nr1   r~   c                   ó>   ‡ — e Zd Z e¦   «         Zdˆ fd„	Zˆ fd„Zˆ xZS )Ú	AsGeoJSONFé   c                 óô   •— |g}|�/|                      |                      |dt          ¦  «        ¦  «         d}|r|rd}n	|rd}n|rd}|r|                      |¦  «          t          ¦   «         j        |i |¤Ž d S )NÚ	precisionr   é   r   r   ©ÚappendrN   Úintr   r   )	r%   Ú
expressionÚbboxÚcrsr‡   r'   r&   Úoptionsr+   s	           €r,   r   zAsGeoJSON.__init__»   s«   ø€ Ø!�lˆØÐ Ø×Ò˜t×1Ò1°)¸[Í#ÑNÔNÑOÔOÐOØˆØð 	�4ð 	ØˆGˆGØð 	ØˆGˆGØð 	ØˆGØð 	(Ø×Ò˜wÑ'Ô'Ð'Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   c                 óÒ   •— |                       ¦   «         }|                      ¦   «         }|                     |d d…         ¦  «          t          t          |¦  «        j        ||fi |¤ŽS )Nr   )rf   rd   re   r   r„   r:   )r%   r;   r<   r=   r   ro   r+   s         €r,   rp   zAsGeoJSON.as_oracleÊ   sg   ø€ Ø!×8Ò8Ñ:Ô:ÐØ—	’	‘”ˆØ×$Ò$Ð%7¸¸¸Ô%;Ñ<Ô<Ð<Ø-�u•Y Ñ&Ô&Ô-¨h¸
ÐTÐTÀmÐTÐTÐTr1   )FFr…   )r/   rP   rQ   r   r   r   rp   rS   rT   s   @r,   r„   r„   ¸   sj   ø€ € € € € Ø�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ðUð Uð Uð Uð Uð Uð Uð Uð Ur1   r„   c                   óB   ‡ — e Zd ZdZ e¦   «         Zdˆ fd„	Zˆ fd„Zˆ xZS )ÚAsGML)r   r   r…   c                 ó¤   •— ||g}|�/|                      |                      |dt          ¦  «        ¦  «          t          ¦   «         j        |i |¤Ž d S ©Nr‡   r‰   )r%   rŒ   Úversionr‡   r'   r&   r+   s         €r,   r   zAsGML.__init__Õ   s[   ø€ Ø 
Ð+ˆØÐ Ø×Ò˜t×1Ò1°)¸[Í#ÑNÔNÑOÔOÐOØ�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   c                 ó  •— |                       ¦   «         }|d         }|                      ¦   «         }|                     |d         g¦  «         |j        dk    rdnd|d<    t	          t
          |¦  «        j        ||fi |¤ŽS )Nr   r   rˆ   zSDO_UTIL.TO_GML311GEOMETRYzSDO_UTIL.TO_GMLGEOMETRYr7   )rf   rd   re   r!   r   r’   r:   )r%   r;   r<   r=   r   r•   ro   r+   s          €r,   rp   zAsGML.as_oracleÛ   s–   ø€ Ø!×8Ò8Ñ:Ô:ÐØ$ QÔ'ˆØ—	’	‘”ˆØ×$Ò$Ð&8¸Ô&;Ð%<Ñ=Ô=Ð=ð Œ} Ò!Ð!ð )Ð(à*ð 	�jÑ!ð
 *�u•U˜EÑ"Ô"Ô)¨(°JÐPÐPÀ-ÐPÐPÐPr1   )r   r…   )	r/   rP   rQ   r   r   r   r   rp   rS   rT   s   @r,   r’   r’   Ñ   so   ø€ € € € € Ø€NØ�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ð
Qð 
Qð 
Qð 
Qð 
Qð 
Qð 
Qð 
Qð 
Qr1   r’   c                   ó4   ‡ — e Zd Z e¦   «         Zdˆ fd„	Zˆ xZS )ÚAsKMLr…   c                 ó¢   •— |g}|�/|                      |                      |dt          ¦  «        ¦  «          t          ¦   «         j        |i |¤Ž d S r”   r‰   ©r%   rŒ   r‡   r'   r&   r+   s        €r,   r   zAsKML.__init__ë   óX   ø€ Ø!�lˆØÐ Ø×Ò˜t×1Ò1°)¸[Í#ÑNÔNÑOÔOÐOØ�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   )r…   ©r/   rP   rQ   r   r   r   rS   rT   s   @r,   r˜   r˜   è   sH   ø€ € € € € Ø�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r1   r˜   c                   ó4   ‡ — e Zd Z e¦   «         Zdˆ fd„	Zˆ xZS )ÚAsSVGFr…   c                 óº   •— t          |d¦  «        r|nt          |¦  «        }|||                      |dt          ¦  «        g} t          ¦   «         j        |i |¤Ž d S )Nr@   r‡   )rK   r‹   rN   r   r   )r%   rŒ   Úrelativer‡   r'   r&   r+   s         €r,   r   zAsSVG.__init__õ   sm   ø€ å Ð*>Ñ?Ô?ÐRˆHˆHÅSÈÁ]Ä]ð 	ð ØØ×Ò˜y¨+µsÑ;Ô;ð
ˆð
 	�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   )Fr…   rœ   rT   s   @r,   rž   rž   ò   sH   ø€ € € € € Ø�9‘;”;€Lð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0r1   rž   c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚAsWKBr   N)r/   rP   rQ   r   r   r|   rX   r1   r,   r¢   r¢     s   € € € € € Ø�;‘=”=€LØ€E€E€Er1   r¢   c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚAsWKTr   N)r/   rP   rQ   r   r   r|   rX   r1   r,   r¤   r¤     s   € € € € € Ø�9‘;”;€LØ€E€E€Er1   r¤   c                   ó*   ‡ — e Zd Zdˆ fd„	Zˆ fd„Zˆ xZS )ÚBoundingCircleé0   c                 ó>   •—  t          ¦   «         j        ||fi |¤Ž d S r.   )r   r   )r%   rŒ   Únum_segr'   r+   s       €r,   r   zBoundingCircle.__init__  s*   ø€ Ø�‰ŒÔ˜ WÐ6Ð6°Ð6Ð6Ð6Ð6Ð6r1   c                 óÌ   •— |                       ¦   «         }|                     |                      ¦   «         d         g¦  «          t          t          |¦  «        j        ||fi |¤ŽS r3   )rd   re   rf   r   r¦   rp   ©r%   r;   r<   r=   ro   r+   s        €r,   rp   zBoundingCircle.as_oracle  sk   ø€ Ø—	’	‘”ˆØ×$Ò$ d×&AÒ&AÑ&CÔ&CÀAÔ&FÐ%GÑHÔHÐHØ5�u•^ UÑ+Ô+Ô5Ø�jð
ð 
Ø$1ð
ð 
ð 	
r1   )r§   )r/   rP   rQ   r   rp   rS   rT   s   @r,   r¦   r¦     sV   ø€ € € € € ð7ð 7ð 7ð 7ð 7ð 7ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r1   r¦   c                   ó   — e Zd ZdZdS )ÚCentroidr   N©r/   rP   rQ   r|   rX   r1   r,   r­   r­     ó   € € € € € Ø€E€E€Er1   r­   c                   ó   — e Zd ZdZdZdS )Ú
Differencer   r€   N©r/   rP   rQ   r|   r   rX   r1   r,   r±   r±     ó   € € € € € Ø€EØ€N€N€Nr1   r±   c                   ó*   — e Zd Zed„ ¦   «         Zd„ ZdS )ÚDistanceResultMixinc                 ó*   — t          | j        ¦  «        S r.   )r   r5   r0   s    r,   r   z DistanceResultMixin.output_field!  s   € å˜Tœ^Ñ,Ô,Ð,r1   c                 ó:   — | j         j        o| j         j        dk    S )Niæ  )r5   Ú	geographyr   r0   s    r,   Úsource_is_geographyz'DistanceResultMixin.source_is_geography%  s   € ØŒ~Ô'ÐG¨D¬NÔ,?À4Ò,GÐGr1   N)r/   rP   rQ   r   r   r¹   rX   r1   r,   rµ   rµ      sA   € € € € € Øð-ð -ñ „_ð-ðHð Hð Hð Hð 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                 óˆ   •— ||g}|�!|                       |dt          ¦  «        | _         t          ¦   «         j        |i |¤Ž d S )Nr{   )rN   Úboolr{   r   r   )r%   Úexpr1Úexpr2r{   r'   r&   r+   s         €r,   r   zDistance.__init__-  sM   ø€ Ø˜e�nˆØÐØ ×.Ò.¨x¸ÅTÑJÔJˆDŒMØ�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   c                 ó®  •— |                       ¦   «         }d }|j        d         }|                      ¦   «         }|j        j        |k    rSt          |t          ¦  «        r||j        _        n1t          |t          |j        j	        |¬¦  «        ¦  «        |j        d<   |s•| j
                             |¦  «        r{| j        rZ|j                             d¦  «        }|j                             t          | j
                             |¦  «        ¦  «        ¦  «         n|j                             d¦  «        } t!          t"          |¦  «        j        ||fd|i|¤ŽS )Nr   )r   r¸   ÚDistanceSpheroidÚDistanceSpherer7   )rd   r   r¹   r   r¸   r    r   r   r   r   r5   rw   r{   r8   r9   rŠ   r   r»   r:   )	r%   r;   r<   r=   ro   r7   r¿   r¸   r+   s	           €r,   Úas_postgresqlzDistance.as_postgresql3  sj  ø€ Ø—	’	‘”ˆØˆØÔ(¨Ô+ˆØ×,Ò,Ñ.Ô.ˆ	ØÔÔ'¨9Ò4Ð4Ý˜%¥Ñ'Ô'ð Ø/8�Ô"Ô,Ð,å.2ØÝ! uÔ'9Ô'>È)ÐTÑTÔTñ/ô /�Ô(¨Ñ+ð
 ð 	R˜Tœ^×4Ò4°ZÑ@Ô@ð 	Rð Œ}ð 	Rð &œ>×?Ò?Ð@RÑSÔS�àÔ(×/Ò/Ý˜$œ.×1Ò1°*Ñ=Ô=Ñ>Ô>ñô ð ð ð &œ>×?Ò?Ð@PÑQÔQ�Ø,�u•X˜uÑ%Ô%Ô,Ø�jð
ð 
Ø+3ð
Ø7Dð
ð 
ð 	
r1   c                 óÀ   •— | j                              |¦  «        r)d|d<   t          t          | j        ¦  «        ¦  «        |d<    t          ¦   «         j        ||fi |¤ŽS )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)rz   r{   )r5   rw   r‹   r½   r{   r   r:   rx   s       €r,   rg   zDistance.as_sqliteR  sm   ø€ ØŒ>×"Ò" :Ñ.Ô.ð 	Að Kð Øñõ ),­D°´Ñ,?Ô,?Ñ(@Ô(@ˆM˜*Ñ%Ø�u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr1   r.   )	r/   rP   rQ   r   r{   r   rÃ   rg   rS   rT   s   @r,   r»   r»   )  s‚   ø€ € € € € Ø€NØ€Hð0ð 0ð 0ð 0ð 0ð 0ð
ð 
ð 
ð 
ð 
ð>Eð Eð Eð Eð Eð Eð Eð Eð Er1   r»   c                   ó   — e Zd ZdZdS )ÚEnveloper   Nr®   rX   r1   r,   rÆ   rÆ   \  r¯   r1   rÆ   c                   ó   — e Zd ZdZdS )ÚForcePolygonCWr   Nr®   rX   r1   r,   rÈ   rÈ   `  r¯   r1   rÈ   c                   ó.   — e Zd Z ed¬¦  «        ZdZdZdS )ÚFromWKBr   r   r   rX   N©r/   rP   rQ   r   r   r|   r   rX   r1   r,   rÊ   rÊ   d  ó*   € € € € € Ø �= aÐ(Ñ(Ô(€LØ€EØ€N€N€Nr1   rÊ   c                   ó.   — e Zd Z ed¬¦  «        ZdZdZdS )ÚFromWKTr   r   r   rX   NrË   rX   r1   r,   rÎ   rÎ   j  rÌ   r1   rÎ   c                   ó:   ‡ — e Zd Z e¦   «         Zdˆ fd„	Zd„ Zˆ xZS )ÚGeoHashNc                 ó¢   •— |g}|�/|                      |                      |dt          ¦  «        ¦  «          t          ¦   «         j        |i |¤Ž d S r”   r‰   rš   s        €r,   r   zGeoHash.__init__s  r›   r1   c                 óÆ   — |                       ¦   «         }t          |j        ¦  «        dk     r'|j                             t	          d¦  «        ¦  «          |j        ||fi |¤ŽS )Nr   éd   )rd   Úlenr   rŠ   r   r:   )r%   r;   r<   r=   ro   s        r,   Úas_mysqlzGeoHash.as_mysqly  s^   € Ø—	’	‘”ˆåˆuÔ'Ñ(Ô(¨1Ò,Ð,ØÔ$×+Ò+­E°#©J¬JÑ7Ô7Ð7ØˆuŒ|˜H jÐBÐB°MÐBÐBÐBr1   r.   )r/   rP   rQ   r   r   r   rÕ   rS   rT   s   @r,   rÐ   rÐ   p  s^   ø€ € € € € Ø�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ðCð Cð Cð Cð Cð Cð Cr1   rÐ   c                   ó2   — e Zd Z e¦   «         ZdZdZdZdZdS )ÚGeometryDistancer   rI   z <-> r€   N)	r/   rP   rQ   r   r   r|   r7   Ú
arg_joinerr   rX   r1   r,   r×   r×   �  s-   € € € € € Ø�:‘<”<€LØ€EØ€HØ€JØ€N€N€Nr1   r×   c                   ó   — e Zd ZdZdZdS )ÚIntersectionr   r€   Nr²   rX   r1   r,   rÚ   rÚ   ‰  r³   r1   rÚ   c                   ó&   — e Zd ZdZ e¦   «         ZdS )ÚIsEmptyÚisemptyN)r/   rP   rQ   Úlookup_namer   r   rX   r1   r,   rÜ   rÜ   Ž  s   € € € € € à€KØ�<‘>”>€L€L€Lr1   rÜ   c                   ó6   ‡ — e Zd ZdZ e¦   «         Zˆ fd„Zˆ xZS )ÚIsValidÚisvalidc                 óN   •—  t          ¦   «         j        ||fi |¤Ž\  }}d|z  |fS )Nz%CASE %s WHEN 'TRUE' THEN 1 ELSE 0 END)r   rp   )r%   r;   r<   r=   ÚsqlÚparamsr+   s         €r,   rp   zIsValid.as_oracle™  s7   ø€ Ø'•e‘g”gÔ'¨°*ÐNÐNÀÐNÐN‰ˆˆVØ6¸Ñ<¸fÐDÐDr1   )r/   rP   rQ   rÞ   r   r   rp   rS   rT   s   @r,   rà   rà   ”  sQ   ø€ € € € € à€KØ�<‘>”>€LðEð Eð Eð Eð Eð Eð Eð 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 )ÚLengthTc                 óJ   •— || _          t          ¦   «         j        |fi |¤Ž d S r.   )r{   r   r   )r%   r¾   r{   r'   r+   s       €r,   r   zLength.__init__Ÿ  s/   ø€ Ø ˆŒØ�‰ŒÔ˜Ð(Ð( %Ð(Ð(Ð(Ð(Ð(r1   c                 ó¤   •— | j                              |¦  «        r|j        j        st	          d¦  «        ‚ t          ¦   «         j        ||fi |¤ŽS )Nz6This backend doesn't support Length on geodetic fields)r5   rw   ru   Úsupports_length_geodeticr
   r   r:   rx   s       €r,   r:   zLength.as_sql£  sb   ø€ àŒN×#Ò# JÑ/Ô/ð	àÔ'Ô@ð	õ $ØHñô ð ð �u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr1   c                 ó\  •— |                       ¦   «         }d }|                      ¦   «         r-|j                             t	          | j        ¦  «        ¦  «         n±| j                             |¦  «        rZ|j         	                    d¦  «        }|j                             t	          | j                             |¦  «        ¦  «        ¦  «         n=t          d„ |                      ¦   «         D ¦   «         ¦  «        }|dk    r|j        j        } t          t          |¦  «        j        ||fd|i|¤ŽS )NÚLengthSpheroidc              3   ó(   K  — | ]}|¯|j         V — Œd S r.   ©Údim©rb   Úfs     r,   ú	<genexpr>z'Length.as_postgresql.<locals>.<genexpr>·  s)   è è € ÐCÐC ÀÐC�a”eÐCÐCÐCÐCÐCÐCr1   r   r7   )rd   r¹   r   rŠ   r   r{   r5   rw   r8   r9   ÚminrA   Úlength3dr   ræ   r:   )r%   r;   r<   r=   ro   r7   rî   r+   s          €r,   rÃ   zLength.as_postgresql­  s#  ø€ Ø—	’	‘”ˆØˆØ×#Ò#Ñ%Ô%ð 		3ØÔ$×+Ò+­E°$´-Ñ,@Ô,@ÑAÔAÐAÐAØŒ^×$Ò$ ZÑ0Ô0ð 	3à!”~×;Ò;Ð<LÑMÔMˆHØÔ$×+Ò+­E°$´.×2IÒ2IÈ*Ñ2UÔ2UÑ,VÔ,VÑWÔWÐWÐWåÐCÐC T×%;Ò%;Ñ%=Ô%=ÐCÑCÔCÑCÔCˆCØ�QŠwˆwØ%œ>Ô2�Ø*�u•V˜UÑ#Ô#Ô*Ø�jð
ð 
Ø+3ð
Ø7Dð
ð 
ð 	
r1   c                 óŒ   •— d }| j                              |¦  «        r| j        rdnd} t          ¦   «         j        ||fd|i|¤ŽS )NÚGeodesicLengthÚGreatCircleLengthr7   )r5   rw   r{   r   r:   )r%   r;   r<   r=   r7   r+   s        €r,   rg   zLength.as_sqlite¾  sY   ø€ ØˆØŒ>×"Ò" :Ñ.Ô.ð 	RØ+/¬=ÐQÐ'Ð'Ð>QˆHØ�u‰wŒwŒ~˜h¨
ÐWÐW¸XÐWÈÐWÐWÐWr1   )T)r/   rP   rQ   r   r:   rÃ   rg   rS   rT   s   @r,   ræ   ræ   ž  s–   ø€ € € € € ð)ð )ð )ð )ð )ð )ðEð Eð Eð Eð Eð
ð 
ð 
ð 
ð 
ð"Xð Xð Xð Xð Xð Xð Xð Xð Xr1   ræ   c                   ó*   — e Zd Z e¦   «         ZdZdZdS )ÚLineLocatePointr   r€   Nr�   rX   r1   r,   rø   rø   Å  r‚   r1   rø   c                   ó   — e Zd ZdS )Ú	MakeValidNrW   rX   r1   r,   rú   rú   Ë  rY   r1   rú   c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚMemSizer   N©r/   rP   rQ   r   r   r|   rX   r1   r,   rü   rü   Ï  ó   € € € € € Ø�<‘>”>€LØ€E€E€Er1   rü   c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚNumGeometriesr   Nrý   rX   r1   r,   r   r   Ô  rþ   r1   r   c                   ó&   — e Zd Z e¦   «         ZdZdS )Ú	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                 ó6  •— d }| j                              |¦  «        r#|                      ¦   «         st          d¦  «        ‚t	          d„ |                      ¦   «         D ¦   «         ¦  «        }|dk    r|j        j        } t          ¦   «         j	        ||fd|i|¤ŽS )Nz<ST_Perimeter cannot use a non-projected non-geography field.c              3   ó$   K  — | ]}|j         V — Œd S r.   rí   rï   s     r,   rñ   z*Perimeter.as_postgresql.<locals>.<genexpr>ç  s$   è è € Ð:Ð:˜A�!”%Ð:Ð:Ð:Ð:Ð:Ð:r1   r   r7   )
r5   rw   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Ô7Qð 	Ý#ØNñô ð õ Ð:Ð: ×!7Ò!7Ñ!9Ô!9Ð:Ñ:Ô:Ñ:Ô:ˆØ�Š7ˆ7Ø!”~Ô1ˆHØ�u‰wŒwŒ~˜h¨
ÐWÐW¸XÐWÈÐWÐWÐWr1   c                 óŒ   •— | j                              |¦  «        rt          d¦  «        ‚ t          ¦   «         j        ||fi |¤ŽS )Nz+Perimeter cannot use a non-projected field.)r5   rw   r
   r   r:   rx   s       €r,   rg   zPerimeter.as_sqliteì  sK   ø€ ØŒ>×"Ò" :Ñ.Ô.ð 	SÝ#Ð$QÑRÔRÐRØ�u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr1   )r/   rP   rQ   r|   rÃ   rg   rS   rT   s   @r,   r  r  Þ  sd   ø€ € € € € Ø€Eð	Xð 	Xð 	Xð 	Xð 	XðEð Eð Eð Eð Eð Eð Eð Eð Er1   r  c                   ó   — e Zd ZdZdS )ÚPointOnSurfacer   Nr®   rX   r1   r,   r
  r
  ò  r¯   r1   r
  c                   ó   — e Zd ZdZdS )ÚReverser   Nr®   rX   r1   r,   r  r  ö  r¯   r1   r  c                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚScaleç        c                 ó  •— ||                       |dt          ¦  «        |                       |dt          ¦  «        g}|dk    r/|                     |                       |dt          ¦  «        ¦  «          t          ¦   «         j        |i |¤Ž d S )NÚxÚyr  Úz)rN   rn   rŠ   r   r   )r%   rŒ   r  r  r  r'   r&   r+   s          €r,   r   zScale.__init__û  sŠ   ø€ àØ×Ò˜q #¥}Ñ5Ô5Ø×Ò˜q #¥}Ñ5Ô5ð
ˆð
 �Š8ˆ8Ø×Ò˜t×1Ò1°!°S½-ÑHÔHÑIÔIÐIØ�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   )r  ©r/   rP   rQ   r   rS   rT   s   @r,   r  r  ú  s=   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r1   r  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú
SnapToGridc                 ó:  •‡ — t          |¦  «        }|g}|dv r"|                     ˆ fd„|D ¦   «         ¦  «         nG|dk    r2|g ˆ fd„|dd …         D ¦   «         ¢ˆ fd„|dd…         D ¦   «         ¢z  }nt          d¦  «        ‚ t          ¦   «         j        |i |¤Ž d S )	N)r   r   c                 óH   •— g | ]}‰                      |d t          ¦  «        ‘ŒS )rI   ©rN   rn   ©rb   Úargr%   s     €r,   rc   z'SnapToGrid.__init__.<locals>.<listcomp>  s+   ø€ ÐLÐLÐLÀ�×#Ò# C¨­]Ñ;Ô;ÐLÐLÐLr1   é   c              3   óP   •K  — | ] }‰                      |d t          ¦  «        V — Œ!dS rO   r  r  s     €r,   rñ   z&SnapToGrid.__init__.<locals>.<genexpr>  s5   øè è € ÐQÐQÀ�$×$Ò$ S¨"­mÑ<Ô<ÐQÐQÐQÐQÐQÐQr1   r   c              3   óP   •K  — | ] }‰                      |d t          ¦  «        V — Œ!dS rO   r  r  s     €r,   rñ   z&SnapToGrid.__init__.<locals>.<genexpr>  s5   øè è € ÐRÐRÀ�$×$Ò$ S¨"­mÑ<Ô<ÐRÐRÐRÐRÐRÐRr1   r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)rÔ   Úextendr$   r   r   )r%   rŒ   rC   r'   Únargsr&   r+   s   `     €r,   r   zSnapToGrid.__init__  sê   øø€ Ý�D‘	”	ˆØ!�lˆØ�Fˆ?ˆ?Ø×ÒØLÐLÐLÐLÀtÐLÑLÔLñô ð ð ð �aŠZˆZàð ØQÐQÐQÐQÈÈQÈRÈRÌÐQÑQÔQðàRÐRÐRÐRÈÈQÈqÈSÌ	ÐRÑRÔRðñ ˆKˆKõ
 ÐQÑRÔRÐRØ�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   r  rT   s   @r,   r  r    s8   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r1   r  c                   ó   — e Zd ZdZdZdS )ÚSymDifferencer   r€   Nr²   rX   r1   r,   r"  r"    r³   r1   r"  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )r   c                 ó¤   •— ||                       |dt          ¦  «        g}d|vrt          |¬¦  «        |d<    t          ¦   «         j        |i |¤Ž d S )Nr   r   r   )rN   r‹   r   r   r   )r%   rŒ   r   r'   r&   r+   s        €r,   r   zTransform.__init__  sf   ø€ àØ×Ò˜t V­SÑ1Ô1ð
ˆð  Ð&Ð&Ý$1°tÐ$<Ñ$<Ô$<ˆE�.Ñ!Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r1   r  rT   s   @r,   r   r     s8   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r1   r   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú	Translatec                 óî   •— |                       ¦   «         }t          | j        ¦  «        dk     r'|j                             t	          d¦  «        ¦  «          t          t          |¦  «        j        ||fi |¤ŽS )Nr  r   )rd   rÔ   r   rŠ   r   r   r&  rg   r«   s        €r,   rg   zTranslate.as_sqlite*  sj   ø€ Ø—	’	‘”ˆÝˆtÔ&Ñ'Ô'¨!Ò+Ð+àÔ$×+Ò+­E°!©H¬HÑ5Ô5Ð5Ø0�u•Y Ñ&Ô&Ô0°¸:ÐWÐWÈÐWÐWÐWr1   )r/   rP   rQ   rg   rS   rT   s   @r,   r&  r&  )  sA   ø€ € € € € ðXð Xð Xð Xð Xð Xð Xð Xð Xr1   r&  c                   ó   — e Zd ZdZdZdS )ÚUnionr   r€   Nr²   rX   r1   r,   r)  r)  2  r³   r1   r)  N)HÚ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‹   ra   rn   r   rV   r[   r^   rj   rr   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Ð OÐ OÐ OÐ OÐ OÐ OÐ OØ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ,Ð +Ð +Ð +Ð +Ð +Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à�e˜WÐ%€ðSð Sð Sð Sð Sñ Sô Sð Sðl	ð 	ð 	ð 	ð 	ˆl˜Dñ 	ô 	ð 	ð7ð 7ð 7ð 7ð 7˜ñ 7ô 7ð 7ðBð Bð Bð Bð Bñ Bô Bð Bð&Cð Cð Cð Cð Cñ Cô Cð Cð Bð Bð Bð Bð BÐ ñ Bô Bð Bð.ð ð ð ð ˆgñ ô ð ðUð Uð Uð Uð U�ñ Uô Uð Uð2Qð Qð Qð Qð QˆGñ Qô Qð Qð.0ð 0ð 0ð 0ð 0ˆGñ 0ô 0ð 0ð0ð 0ð 0ð 0ð 0ˆGñ 0ô 0ð 0ðð ð ð ð ˆGñ ô ð ð
ð ð ð ð ˆGñ ô ð ð
	
ð 	
ð 	
ð 	
ð 	
Ð)Ð+<ñ 	
ô 	
ð 	
ðð ð ð ð Ð#Ð%6ñ ô ð ðð ð ð ð Ð%Ð'8ñ ô ð ð
Hð Hð Hð Hð Hñ Hô Hð Hð0Eð 0Eð 0Eð 0Eð 0EÐ"Ð$8¸'ñ 0Eô 0Eð 0Eðfð ð ð ð Ð ñ ô ð ðð ð ð ð Ð&ñ ô ð ðð ð ð ð ˆgñ ô ð ðð ð ð ð ˆgñ ô ð ðCð Cð Cð Cð Cˆgñ Cô Cð Cð"ð ð ð ð �wñ ô ð ðð ð ð ð Ð'Ð):ñ ô ð ð
 Ô!ð"ð "ð "ð "ð "ˆl˜Iñ "ô "ñ "Ô!ð"ð
 Ô!ðEð Eð Eð Eð EÐ" L°)ñ Eô Eñ "Ô!ðEð$Xð $Xð $Xð $Xð $XÐ Ð"6¸ñ $Xô $Xð $XðNð ð ð ð �gñ ô ð ð	ð 	ð 	ð 	ð 	Ð!ñ 	ô 	ð 	ðð ð ð ð ˆgñ ô ð ð
ð ð ð ð �Gñ ô ð ð
ð ð ð ð �ñ ô ð ð
Eð Eð Eð Eð EÐ#Ð%9¸7ñ Eô Eð Eð(ð ð ð ð Ð)Ð+<ñ ô ð ðð ð ð ð ˆgñ ô ð ð	0ð 	0ð 	0ð 	0ð 	0Ð%Ð'8ñ 	0ô 	0ð 	0ð0ð 0ð 0ð 0ð 0Ð*Ð,=ñ 0ô 0ð 0ð&ð ð ð ð Ð(Ð*;ñ ô ð ð
0ð 0ð 0ð 0ð 0Ð!ñ 0ô 0ð 0ðXð Xð Xð Xð X�ñ Xô Xð Xðð ð ð ð Ð Ð"3ñ ô ð ð ð r1   