§
    Ÿj–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j8         G d>„ d?ee¦  «        ¦   «         Z9ej8         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 ¦  «        ZHd`S )aé    )Ú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          €ús/var/www/finuniver-perm.ru/html/student/venv/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   Úfieldr1   s    r-   Ú	geo_fieldzGeoFuncMixin.geo_field=   s   € àÔ& tÔ':¸1Ô'=Ô>ÔDÐDr2   c                 óŽ   •— | j         €!|€|j                             | j        ¦  «        } t	          ¦   «         j        ||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   sL   ø€ ØŒ=Ð  XÐ%5Ø!”~×;Ò;¸D¼IÑFÔFˆHØ�u‰wŒwŒ~˜h¨
ÐWÐW¸XÐWÈÐWÐWÐWr2   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$   Ú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<  ø€ Ø(�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Ñ+øð ˆ
r2   Ú c                 óv   — 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   s[   € Ý�uÐ2Ñ3Ô3ð 	Øð ¥:¨e°[Ñ#AÔ#Að Ý�ià!�z�z ; ; ;ð0ñô ð ð ˆr2   r/   ©rJ   N)r0   Ú
__module__Ú__qualname__r8   r   r   Úpropertyr$   r   r6   r;   rA   rO   Ú__classcell__©r,   s   @r-   r   r      sÌ   ø€ € € € € Ø€HØ€Nðð ð ð ð ð: ð'ð 'ñ „Xð'ð ðEð Eñ „_ðEðXð Xð Xð Xð Xð Xð
ð ð ð ð ð<ð ð ð ð ð ð ð r2   r   c                   ó   — e Zd ZdS )ÚGeoFuncN©r0   rQ   rR   © r2   r-   rW   rW   n   ó   € € € € € Ø€Dr2   rW   c                   ó$   — e Zd Zed„ ¦   «         ZdS )ÚGeomOutputGeoFuncc                 ó6   — t          | j        j        ¬¦  «        S )Nr   )r   r6   r   r1   s    r-   r   zGeomOutputGeoFunc.output_fields   s   € å $¤.Ô"5Ð6Ñ6Ô6Ð6r2   N)r0   rQ   rR   r   r   rY   r2   r-   r\   r\   r   s-   € € € € € Øð7ð 7ñ „_ð7ð 7ð 7r2   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"   )rL   r!   r"   r   r   Úfloat)Ú.0r*   s     r-   ú
<listcomp>z7SQLiteDecimalToFloatMixin.as_sqlite.<locals>.<listcomp>�   sg   € ð ð ð ð õ ˜t WÑ-Ô-ðÝ2<¸T¼ZÍÑ2QÔ2Qð•E�% ¤
Ñ+Ô+Ñ,Ô,Ð,àð	ð ð r2   )ÚcopyÚset_source_expressionsÚget_source_expressionsr;   )r&   r<   r=   r>   re   s        r-   Ú	as_sqlitez#SQLiteDecimalToFloatMixin.as_sqlite~   so   € Ø�yŠy‰{Œ{ˆØ×#Ò#ðð ð !×7Ò7Ñ9Ô9ðñ ô ñ		
ô 		
ð 		
ð ˆtŒ{˜8 ZÐAÐA°=ÐAÐAÐAr2   N)r0   rQ   rR   Ú__doc__rh   rY   r2   r-   r_   r_   x   s2   € € € € € ðð ð
Bð Bð Bð Bð Br2   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   rO   r(   Úgetrm   ÚNUMERIC_TYPESre   rf   rg   r;   )r&   r<   r=   r>   rm   Ú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ÐBr2   N)r0   rQ   rR   rm   rq   rY   r2   r-   rk   rk   �   s-   € € € € € Ø€Ið
Cð 
Cð 
Cð 
Cð 
Cr2   rk   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   r6   r1   s    r-   r   zArea.output_field    s   € å˜œÑ(Ô(Ð(r2   c                 ó¤   •— |j         j        s)| j                             |¦  «        rt	          d¦  «        ‚ t          ¦   «         j        ||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¤   sf   ø€ ØÔ"Ô9ð 	¸d¼n×>UÒ>UØñ?
ô ?
ð 	õ $ØDñô ð ð �u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr2   c                 óh   — | j                              |¦  «        r
d|d<   d|d<    | j        ||fi |¤ŽS )Nz+%(function)s(%(expressions)s, %(spheroid)d)ÚtemplateTÚspheroid)r6   rx   r;   )r&   r<   r=   r>   s       r-   rh   zArea.as_sqlite­   sJ   € ØŒ>×"Ò" :Ñ.Ô.ð 	-Ø(UˆM˜*Ñ%Ø(,ˆM˜*Ñ%ØˆtŒ{˜8 ZÐAÐA°=ÐAÐAÐAr2   )	r0   rQ   rR   Úarityr   r   r;   rh   rT   rU   s   @r-   rs   rs   �   sq   ø€ € € € € Ø€Eàð)ð )ñ „_ð)ðEð Eð Eð Eð EðBð Bð Bð Bð Bð Bð Br2   rs   c                   ó*   — e Zd Z e¦   «         ZdZdZdS )ÚAzimuthé   ©r   r   N©r0   rQ   rR   r   r   r}   r   rY   r2   r-   r   r   ´   ó#   € € € € € Ø�:‘<”<€LØ€EØ€N€N€Nr2   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}|                      |¦  «          t          ¦   «         j        |i |¤Ž d S )NÚ	precisionr   é   r   r€   ©ÚappendrO   Ú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Ø×Ò˜7Ñ#Ô#Ð#Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   c                 óÒ   •— |                       ¦   «         }|                      ¦   «         }|                     |d d…         ¦  «          t          t          |¦  «        j        ||fi |¤ŽS ©Nr   )rg   re   rf   r   r…   r;   ©r&   r<   r=   r>   r    rp   r,   s         €r-   rq   zAsGeoJSON.as_oracleË   sg   ø€ Ø!×8Ò8Ñ:Ô:ÐØ—	’	‘”ˆØ×$Ò$Ð%7¸¸¸Ô%;Ñ<Ô<Ð<Ø-�u•Y Ñ&Ô&Ô-¨h¸
ÐTÐTÀmÐTÐTÐTr2   )FFr†   )r0   rQ   rR   r   r   r   rq   rT   rU   s   @r-   r…   r…   º   sj   ø€ € € € € Ø�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ðUð Uð Uð Uð Uð Uð Uð Uð Ur2   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Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   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_GMLGEOMETRYr8   )rg   re   rf   r"   r   r•   r;   )r&   r<   r=   r>   r    r˜   rp   r,   s          €r-   rq   zAsGML.as_oracleÜ   s–   ø€ Ø!×8Ò8Ñ:Ô:ÐØ$ QÔ'ˆØ—	’	‘”ˆØ×$Ò$Ð&8¸Ô&;Ð%<Ñ=Ô=Ð=ð Œ} Ò!Ð!ð )Ð(à*ð 	�jÑ!ð
 *�u•U˜EÑ"Ô"Ô)¨(°JÐPÐPÀ-ÐPÐPÐPr2   )r€   r†   )	r0   rQ   rR   r   r   r   r   rq   rT   rU   s   @r-   r•   r•   Ò   so   ø€ € € € € Ø€NØ�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ð
Qð 
Qð 
Qð 
Qð 
Qð 
Qð 
Qð 
Qð 
Qr2   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Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   )r†   ©r0   rQ   rR   r   r   r   rT   rU   s   @r-   r›   r›   é   sH   ø€ € € € € Ø�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r2   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 )NrA   rˆ   )rL   rŒ   rO   r   r   )r&   r�   Úrelativerˆ   r(   r'   r,   s         €r-   r   zAsSVG.__init__ö   sm   ø€ å Ð*>Ñ?Ô?ÐRˆHˆHÅSÈÁ]Ä]ð 	ð ØØ×Ò˜y¨+µsÑ;Ô;ð
ˆð
 	�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   )Fr†   rŸ   rU   s   @r-   r¡   r¡   ó   sH   ø€ € € € € Ø�9‘;”;€Lð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0r2   r¡   c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚAsWKBr   N)r0   rQ   rR   r   r   r}   rY   r2   r-   r¥   r¥     s   € € € € € Ø�;‘=”=€LØ€E€E€Er2   r¥   c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚAsWKTr   N)r0   rQ   rR   r   r   r}   rY   r2   r-   r§   r§     s   € € € € € Ø�9‘;”;€LØ€E€E€Er2   r§   c                   ó4   ‡ — e Zd Zdˆ fd„	Zˆ 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Ð6r2   c                 óÌ   •— |                       ¦   «         }|                     |                      ¦   «         d         g¦  «          t          t          |¦  «        j        ||fi |¤ŽS r4   )re   rf   rg   r   r©   rq   ©r&   r<   r=   r>   rp   r,   s        €r-   rq   zBoundingCircle.as_oracle  ók   ø€ Ø—	’	‘”ˆØ×$Ò$ d×&AÒ&AÑ&CÔ&CÀAÔ&FÐ%GÑHÔHÐHØ5�u•^ UÑ+Ô+Ô5Ø�jð
ð 
Ø$1ð
ð 
ð 	
r2   c                 óÌ   •— |                       ¦   «         }|                     |                      ¦   «         d         g¦  «          t          t          |¦  «        j        ||fi |¤ŽS r4   )re   rf   rg   r   r©   rh   r®   s        €r-   rh   zBoundingCircle.as_sqlite  r¯   r2   )rª   )r0   rQ   rR   r   rq   rh   rT   rU   s   @r-   r©   r©     so   ø€ € € € € ð7ð 7ð 7ð 7ð 7ð 7ð
ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r2   r©   c                   ó   — e Zd ZdZdS )ÚCentroidr   N©r0   rQ   rR   r}   rY   r2   r-   r²   r²     ó   € € € € € Ø€E€E€Er2   r²   c                   ó   — e Zd ZdZdZdS )ÚClosestPointr€   r�   N©r0   rQ   rR   r}   r   rY   r2   r-   r¶   r¶   #  ó   € € € € € Ø€EØ€N€N€Nr2   r¶   c                   ó   — e Zd ZdZdZdS )Ú
Differencer€   r�   Nr·   rY   r2   r-   rº   rº   (  r¸   r2   rº   c                   ó*   — e Zd Zed„ ¦   «         Zd„ ZdS )ÚDistanceResultMixinc                 ó*   — t          | j        ¦  «        S r/   )r   r6   r1   s    r-   r   z DistanceResultMixin.output_field.  s   € å˜Tœ^Ñ,Ô,Ð,r2   c                 ó:   — | j         j        o| j         j        dk    S )Niæ  )r6   Ú	geographyr   r1   s    r-   Úsource_is_geographyz'DistanceResultMixin.source_is_geography2  s   € ØŒ~Ô'ÐG¨D¬NÔ,?À4Ò,GÐGr2   N)r0   rQ   rR   r   r   rÀ   rY   r2   r-   r¼   r¼   -  sA   € € € € € Øð-ð -ñ „_ð-ðHð Hð Hð Hð 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                 óˆ   •— ||g}|�!|                       |dt          ¦  «        | _         t          ¦   «         j        |i |¤Ž d S )Nr|   )rO   Úboolr|   r   r   )r&   Úexpr1Úexpr2r|   r(   r'   r,   s         €r-   r   zDistance.__init__:  sM   ø€ Ø˜e�nˆØÐØ ×.Ò.¨x¸ÅTÑJÔJˆDŒMØ�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   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ÚDistanceSpherer8   )re   r    rÀ   r   r¿   r!   r   r   r   r   r6   rx   r|   r9   r:   r‹   r   rÂ   r;   )	r&   r<   r=   r>   rp   r8   rÆ   r¿   r,   s	           €r-   Úas_postgresqlzDistance.as_postgresql@  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ð
ð 
ð 	
r2   c                 óÀ   •— | j                              |¦  «        r)d|d<   t          t          | j        ¦  «        ¦  «        |d<    t          ¦   «         j        ||fi |¤ŽS )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)r{   r|   )r6   rx   rŒ   rÄ   r|   r   r;   ry   s       €r-   rh   zDistance.as_sqlite_  sj   ø€ ØŒ>×"Ò" :Ñ.Ô.ð 	Að Kð ˜*Ñ%õ ),­D°´Ñ,?Ô,?Ñ(@Ô(@ˆM˜*Ñ%Ø�u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr2   r/   )	r0   rQ   rR   r   r|   r   rÊ   rh   rT   rU   s   @r-   rÂ   rÂ   6  s‚   ø€ € € € € Ø€NØ€Hð0ð 0ð 0ð 0ð 0ð 0ð
ð 
ð 
ð 
ð 
ð>Eð Eð Eð Eð Eð Eð Eð Eð Er2   rÂ   c                   ó   — e Zd ZdZdS )ÚEnveloper   Nr³   rY   r2   r-   rÍ   rÍ   i  r´   r2   rÍ   c                   ó   — e Zd ZdZdS )Ú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   r   c                 ó¤   •— ||                       |dt          ¦  «        g}d|vrt          |¬¦  «        |d<    t          ¦   «         j        |i |¤Ž d S ©Nr   r   r   ©rO   rŒ   r   r   r   ©r&   r�   r   r(   r'   r,   s        €r-   r   zFromWKB.__init__u  óf   ø€ àØ×Ò˜t V­SÑ1Ô1ð
ˆð  Ð&Ð&Ý$1°tÐ$<Ñ$<Ô$<ˆE�.Ñ!Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   c                 óÒ   •— |                       ¦   «         }|                      ¦   «         }|                     |d d…         ¦  «          t          t          |¦  «        j        ||fi |¤ŽS r’   )rg   re   rf   r   rÑ   r;   r“   s         €r-   rq   zFromWKB.as_oracle~  sg   ø€ à!×8Ò8Ñ:Ô:ÐØ—	’	‘”ˆØ×$Ò$Ð%7¸¸¸Ô%;Ñ<Ô<Ð<Ø+�u•W˜eÑ$Ô$Ô+¨H°jÐRÐRÀMÐRÐRÐRr2   r   )r0   rQ   rR   r}   r   r   rq   rT   rU   s   @r-   rÑ   rÑ   q  si   ø€ € € € € Ø€EØ€Nð0ð 0ð 0ð 0ð 0ð 0ðSð Sð Sð Sð Sð Sð Sð Sð Sr2   rÑ   c                   ó   — e Zd ZdS )ÚFromWKTNrX   rY   r2   r-   rÙ   rÙ   †  rZ   r2   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__�  rž   r2   c                 óÆ   — |                       ¦   «         }t          |j        ¦  «        dk     r'|j                             t	          d¦  «        ¦  «          |j        ||fi |¤ŽS )Nr€   éd   )re   Úlenr    r‹   r   r;   )r&   r<   r=   r>   rp   s        r-   Úas_mysqlzGeoHash.as_mysql“  s^   € Ø—	’	‘”ˆåˆuÔ'Ñ(Ô(¨1Ò,Ð,ØÔ$×+Ò+­E°#©J¬JÑ7Ô7Ð7ØˆuŒ|˜H jÐBÐB°MÐBÐBÐBr2   r/   )r0   rQ   rR   r   r   r   rà   rT   rU   s   @r-   rÛ   rÛ   Š  s^   ø€ € € € € Ø�9‘;”;€Lð0ð 0ð 0ð 0ð 0ð 0ðCð Cð Cð Cð Cð Cð Cr2   rÛ   c                   ó2   — e Zd Z e¦   «         ZdZdZdZdZdS )ÚGeometryDistancer€   rJ   z <-> r�   N)	r0   rQ   rR   r   r   r}   r8   Ú
arg_joinerr   rY   r2   r-   râ   râ   ›  s-   € € € € € Ø�:‘<”<€LØ€EØ€HØ€JØ€N€N€Nr2   râ   c                   ó   — e Zd ZdZdZdS )ÚIntersectionr€   r�   Nr·   rY   r2   r-   rå   rå   £  r¸   r2   rå   c                   ó&   — e Zd ZdZ e¦   «         ZdS )ÚIsEmptyÚisemptyN)r0   rQ   rR   Úlookup_namer   r   rY   r2   r-   rç   rç   ¨  s   € € € € € à€KØ�<‘>”>€L€L€Lr2   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   rq   )r&   r<   r=   r>   ÚsqlÚparamsr,   s         €r-   rq   zIsValid.as_oracle³  s7   ø€ Ø'•e‘g”gÔ'¨°*ÐNÐNÀÐNÐN‰ˆˆVØ6¸Ñ<¸fÐDÐDr2   )r0   rQ   rR   ré   r   r   rq   rT   rU   s   @r-   rë   rë   ®  sQ   ø€ € € € € à€KØ�<‘>”>€LðEð Eð Eð Eð Eð Eð Eð 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 )ÚLengthTc                 óJ   •— || _          t          ¦   «         j        |fi |¤Ž d S r/   )r|   r   r   )r&   rÅ   r|   r(   r,   s       €r-   r   zLength.__init__¹  s/   ø€ Ø ˆŒØ�‰ŒÔ˜Ð(Ð( %Ð(Ð(Ð(Ð(Ð(r2   c                 ó¤   •— | j                              |¦  «        r|j        j        st	          d¦  «        ‚ t          ¦   «         j        ||fi |¤ŽS )Nz6This backend doesn't support Length on geodetic fields)r6   rx   rv   Úsupports_length_geodeticr
   r   r;   ry   s       €r-   r;   zLength.as_sql½  sb   ø€ àŒN×#Ò# JÑ/Ô/ð	àÔ'Ô@ð	õ $ØHñô ð ð �u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr2   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©rc   Úfs     r-   ú	<genexpr>z'Length.as_postgresql.<locals>.<genexpr>Ñ  s)   è è € ÐCÐC ÀÐC�a”eÐCÐCÐCÐCÐCÐCr2   r€   r8   )re   rÀ   r    r‹   r   r|   r6   rx   r9   r:   ÚminrB   Úlength3dr   rñ   r;   )r&   r<   r=   r>   rp   r8   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ð
ð 
ð 	
r2   c                 óŒ   •— d }| j                              |¦  «        r| j        rdnd} t          ¦   «         j        ||fd|i|¤ŽS )NÚGeodesicLengthÚGreatCircleLengthr8   )r6   rx   r|   r   r;   )r&   r<   r=   r>   r8   r,   s        €r-   rh   zLength.as_sqliteØ  sY   ø€ ØˆØŒ>×"Ò" :Ñ.Ô.ð 	RØ+/¬=ÐQÐ'Ð'Ð>QˆHØ�u‰wŒwŒ~˜h¨
ÐWÐW¸XÐWÈÐWÐWÐWr2   )T)r0   rQ   rR   r   r;   rÊ   rh   rT   rU   s   @r-   rñ   rñ   ¸  s–   ø€ € € € € ð)ð )ð )ð )ð )ð )ðEð Eð Eð Eð Eð
ð 
ð 
ð 
ð 
ð"Xð Xð Xð Xð Xð Xð Xð Xð Xr2   rñ   c                   ó*   — e Zd Z e¦   «         ZdZdZdS )ÚLineLocatePointr€   r�   Nr‚   rY   r2   r-   r  r  ß  rƒ   r2   r  c                   ó   — e Zd ZdS )Ú	MakeValidNrX   rY   r2   r-   r  r  å  rZ   r2   r  c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚMemSizer   N©r0   rQ   rR   r   r   r}   rY   r2   r-   r  r  é  ó   € € € € € Ø�<‘>”>€LØ€E€E€Er2   r  c                   ó&   — e Zd Z e¦   «         ZdZdS )ÚNumGeometriesr   Nr  rY   r2   r-   r  r  î  r	  r2   r  c                   ó&   — e Zd Z e¦   «         ZdZdS )Ú	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                 ó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�!”%Ð:Ð:Ð:Ð:Ð:Ð:r2   r€   r8   )
r6   rx   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Ô7Qð 	Ý#ØNñô ð õ Ð:Ð: ×!7Ò!7Ñ!9Ô!9Ð:Ñ:Ô:Ñ:Ô:ˆØ�Š7ˆ7Ø!”~Ô1ˆHØ�u‰wŒwŒ~˜h¨
ÐWÐW¸XÐWÈÐWÐWÐWr2   c                 óŒ   •— | j                              |¦  «        rt          d¦  «        ‚ t          ¦   «         j        ||fi |¤ŽS )Nz+Perimeter cannot use a non-projected field.)r6   rx   r
   r   r;   ry   s       €r-   rh   zPerimeter.as_sqlite  sK   ø€ ØŒ>×"Ò" :Ñ.Ô.ð 	SÝ#Ð$QÑRÔRÐRØ�u‰wŒwŒ~˜h¨
ÐDÐD°mÐDÐDÐDr2   )r0   rQ   rR   r}   rÊ   rh   rT   rU   s   @r-   r  r  ø  sd   ø€ € € € € Ø€Eð	Xð 	Xð 	Xð 	Xð 	XðEð Eð Eð Eð Eð Eð Eð Eð Er2   r  c                   ó   — e Zd ZdZdS )ÚPointOnSurfacer   Nr³   rY   r2   r-   r  r    r´   r2   r  c                   ó   — e Zd ZdZdS )ÚReverser   Nr³   rY   r2   r-   r  r    r´   r2   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)rO   ro   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Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   )r  ©r0   rQ   rR   r   rT   rU   s   @r-   r  r    s=   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r2   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 )rJ   ©rO   ro   ©rc   Úargr&   s     €r-   rd   z'SnapToGrid.__init__.<locals>.<listcomp>&  s+   ø€ ÐLÐLÐLÀ�×#Ò# C¨­]Ñ;Ô;ÐLÐLÐLr2   é   c              3   óP   •K  — | ] }‰                      |d t          ¦  «        V — Œ!dS rP   r$  r%  s     €r-   rü   z&SnapToGrid.__init__.<locals>.<genexpr>+  s5   øè è € ÐQÐQÀ�$×$Ò$ S¨"­mÑ<Ô<ÐQÐQÐQÐQÐQÐQr2   r€   c              3   óP   •K  — | ] }‰                      |d t          ¦  «        V — Œ!dS rP   r$  r%  s     €r-   rü   z&SnapToGrid.__init__.<locals>.<genexpr>,  s5   øè è € ÐRÐRÀ�$×$Ò$ S¨"­mÑ<Ô<ÐRÐRÐRÐRÐRÐRr2   r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)rß   Úextendr%   r   r   )r&   r�   rD   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Ø�‰ŒÔ˜+Ð/¨Ð/Ð/Ð/Ð/Ð/r2   r  rU   s   @r-   r!  r!     s8   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r2   r!  c                   ó   — e Zd ZdZdZdS )Ú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                 ó¤   •— ||                       |dt          ¦  «        g}d|vrt          |¬¦  «        |d<    t          ¦   «         j        |i |¤Ž d S rÓ   rÔ   rÕ   s        €r-   r   zTransform.__init__9  rÖ   r2   r  rU   s   @r-   r   r   8  s8   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r2   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   )re   rß   r    r‹   r   r   r1  rh   r®   s        €r-   rh   zTranslate.as_sqliteD  sj   ø€ Ø—	’	‘”ˆÝˆtÔ&Ñ'Ô'¨!Ò+Ð+àÔ$×+Ò+­E°!©H¬HÑ5Ô5Ð5Ø0�u•Y Ñ&Ô&Ô0°¸:ÐWÐWÈÐWÐWÐWr2   )r0   rQ   rR   rh   rT   rU   s   @r-   r1  r1  C  sA   ø€ € € € € ðXð Xð Xð Xð Xð Xð Xð Xð Xr2   r1  c                   ó   — e Zd ZdZdZdS )ÚUnionr€   r�   Nr·   rY   r2   r-   r4  r4  L  r¸   r2   r4  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Œ   rb   ro   r   rW   r\   r_   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-  r1  r4  rY   r2   r-   ú<module>r?     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ð0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ð ð ð ð Ð ñ ô ð ðð ð ð ð Ð&ñ ô ð ðSð Sð Sð Sð Sˆgñ Sô Sð Sð*	ð 	ð 	ð 	ð 	ˆ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ñ ô ð ð ð r2   