
    (phWI                        S SK Jr  S SKJrJr  S SKJrJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKJr  S S	KJr  \\\4r " S
 S5      r " S S\\5      r " S S\5      r  " S S5      r! " S S5      r" " S S\"\5      r# " S S\5      r$ " S S\5      r% " S S\5      r& " S S\5      r' " S S\5      r( " S  S!\5      r) " S" S#\5      r* " S$ S%\"\ 5      r+ " S& S'\"\ 5      r, " S( S)\ 5      r- " S* S+\"\ 5      r. " S, S-5      r/ " S. S/\/\"\5      r0 " S0 S1\ 5      r1 " S2 S3\ 5      r2 " S4 S5\5      r3 " S6 S7\5      r4 " S8 S9\5      r5 " S: S;\5      r6 " S< S=\"\ 5      r7\Rp                   " S> S?\\5      5       r9\Rp                   " S@ SA\"\\5      5       r: " SB SC\/\"\5      r; " SD SE\5      r< " SF SG\ 5      r= " SH SI\5      r> " SJ SK\5      r? " SL SM\5      r@ " SN SO\/\"\5      rA " SP SQ\"\ 5      rB " SR SS\5      rC " ST SU\!\ 5      rD " SV SW\!\ 5      rE " SX SY\"\ 5      rF " SZ S[\ 5      r " S\ S]\D5      rG " S^ S_\"\ 5      rHg`)a    )Decimal)BaseSpatialFieldGeometryField)	AreaFieldDistanceField)GEOSGeometry)
FieldError)NotSupportedError)BinaryFieldBooleanField
FloatFieldFuncIntegerField	TextField	TransformValue)Cast)cached_propertyc                   v   ^  \ rS rSrSrSrU 4S jr\S 5       r\	S 5       r
SU 4S jjrU 4S jrSS	 jrS
rU =r$ )GeoFuncMixin   N)r   c                 2  > [         TU ]  " U0 UD6  U R                   H  nU R                  U   n[	        U[
        5      (       d  M)   UR                  nUR                  n[	        U[        5      (       a  U(       a2  [	        U[        5      (       d  [        SU R                  US-   4-  5      eUR                  (       d  U(       d  [        S5      eU(       a  M  [        U[        UR                  S9S9U R                  U'   M     g ! [         a    S n Nf = f)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          Y/var/www/html/venv/lib/python3.13/site-packages/django/contrib/gis/db/models/functions.pyr   GeoFuncMixin.__init__   s    +// &&C**3/DdE**$#00 ::Dt\22"<??Oyy#'*+  99\ !GHH</4}$))'D0'',+ '  $#$s   DDDc                 .    U R                   R                  $ N)r,   __name__r&   s    r-   r$   GeoFuncMixin.name9   s    ~~&&&    c                 N    U R                   U R                  S      R                  $ Nr   )r    r   fieldr2   s    r-   	geo_fieldGeoFuncMixin.geo_field=   s$    &&t':':1'=>DDDr4   c                    > U R                   c(  Uc%  UR                  R                  U R                  5      n[        TU ]  " X4SU0UD6$ )Nfunction)r;   opsspatial_function_namer$   r   as_sql)r&   compiler
connectionr;   extra_contextr,   s        r-   r>   GeoFuncMixin.as_sqlA   sC    == X%5!~~;;DIIFHw~hWXWWWr4   c           
      4  > [         T
U ]  " U0 UD6nU R                  (       d  U$ UR                  5       nU R                   HS  nXE   n[	        U[
        5      (       a  M  [        U R                  < SUS-   < S[        U5      R                  < S35      e   UR                  R                  nU R                  SS   HW  nUR                  U   nUR                  R                  n	X:w  d  M/  [        X5      R                  " U0 UD6UR                  U'   MY     U$ )Nz/ function requires a GeometryField in position r   z, got .)r   resolve_expressionr   get_source_fieldsr!   r   r#   r$   typer1   r8   r   r    r   r   )r&   argskwargsressource_fieldsr)   r7   	base_sridr*   	expr_sridr,   s             r-   rE   GeoFuncMixin.resolve_expressionF   s   g($9&9""J --/&&C!&Ee]33 		aU,,	  ' MM&&	&&qr*C))#.D))..I%.7/$$/%&*/6.4/6&&s+ + 
r4   c                 ~    [        US5      (       d+  U(       a$  [        X5      (       d  [        SU< SU< S35      eU$ )NrE   zThe z) parameter has the wrong type: should be rD   )hasattrr!   r#   )r&   r"   
param_namecheck_typess       r-   _handle_paramGeoFuncMixin._handle_paramd   s;    u233:e#A#A!;0  r4    r0    N)r1   
__module____qualname____firstlineno__r;   r   r   propertyr$   r   r8   r>   rE   rS   __static_attributes____classcell__r,   s   @r-   r   r      sQ    HN: ' ' E EX
< r4   r   c                       \ rS rSrSrg)GeoFuncn   rU   Nr1   rX   rY   rZ   r\   rU   r4   r-   r`   r`   n       r4   r`   c                   $    \ rS rSr\S 5       rSrg)GeomOutputGeoFuncr   c                 <    [        U R                  R                  S9$ )Nr   )r   r8   r   r2   s    r-   r   GeomOutputGeoFunc.output_fields   s    $.."5"566r4   rU   N)r1   rX   rY   rZ   r   r   r\   rU   r4   r-   re   re   r   s    7 7r4   re   c                       \ rS rSrSrS rSrg)SQLiteDecimalToFloatMixinx   z
By default, Decimal values are converted to str by the SQLite backend, which
is not acceptable by the GIS functions expecting numeric values.
c           
      N   U R                  5       nUR                  UR                  5        Vs/ s HS  n[        US5      (       a=  [	        UR
                  [        5      (       a  [        [        UR
                  5      5      OUPMU     sn5        UR                  " X40 UD6$ s  snf )Nr"   )
copyset_source_expressionsget_source_expressionsrP   r!   r"   r   r   floatr>   )r&   r?   r@   rA   rm   r*   s         r-   	as_sqlite#SQLiteDecimalToFloatMixin.as_sqlite~   s    yy{## !779 :D tW--*TZZ2Q2Q %

+, :		
 {{8A=AAs   AB"rU   N)r1   rX   rY   rZ   __doc__rq   r\   rU   r4   r-   rj   rj   x   s    
Br4   rj   c                       \ rS rSrSrS rSrg)OracleToleranceMixin   g?c                    [        U R                  U R                  R                  SU R                  5      S[
        5      5      nU R                  5       nUR                  / U R                  5       QUP5        UR                  " X40 UD6$ )N	tolerance)
r   rS   r(   getrx   NUMERIC_TYPESrm   rn   ro   r>   )r&   r?   r@   rA   rx   clones         r-   	as_oracleOracleToleranceMixin.as_oracle   sy    

{DNN;
	 		$$%Pt'B'B'D%Pi%PQ||HBMBBr4   rU   N)r1   rX   rY   rZ   rx   r|   r\   rU   r4   r-   ru   ru      s    I
Cr4   ru   c                   B   ^  \ rS rSrSr\S 5       rU 4S jrS rSr	U =r
$ )Area   r   c                 ,    [        U R                  5      $ r0   )r   r8   r2   s    r-   r   Area.output_field   s    ((r4   c                    > UR                   R                  (       d+  U R                  R                  U5      (       a  [	        S5      e[
        TU ]  " X40 UD6$ )Nz2Area on geodetic coordinate systems not supported.)featuressupports_area_geodeticr8   geodeticr
   r   r>   r&   r?   r@   rA   r,   s       r-   r>   Area.as_sql   sS    ""99dnn>U>U?
 ?
 $D  w~hDmDDr4   c                 |    U R                   R                  U5      (       a
  SUS'   SUS'   U R                  " X40 UD6$ )Nz+%(function)s(%(expressions)s, %(spheroid)d)templateTspheroid)r8   r   r>   )r&   r?   r@   rA   s       r-   rq   Area.as_sqlite   s?    >>"":..(UM*%(,M*%{{8A=AAr4   rU   )r1   rX   rY   rZ   arityr   r   r>   rq   r\   r]   r^   s   @r-   r   r      s,    E) )EB Br4   r   c                   *    \ rS rSr\" 5       rSrSrSrg)Azimuth      r   r   rU   N	r1   rX   rY   rZ   r   r   r   r   r\   rU   r4   r-   r   r          <LENr4   r   c                   F   ^  \ rS rSr\" 5       rSU 4S jjrU 4S jrSrU =r	$ )	AsGeoJSON   c                    > U/nUb&  UR                  U R                  US[        5      5        SnU(       a
  U(       a  SnOU(       a  SnO	U(       a  SnUR                  U5        [        TU ]  " U0 UD6  g )N	precisionr      r   r   appendrS   intr   r   )	r&   
expressionbboxcrsr   r(   r'   optionsr,   s	           r-   r   AsGeoJSON.__init__   sl    !l t11)[#NO4GGG7#+//r4   c                    > U R                  5       nU R                  5       nUR                  US S 5        [        [        U]  " X40 UD6$ )Nr   )ro   rm   rn   r   r   r>   )r&   r?   r@   rA   r    r{   r,   s         r-   r|   AsGeoJSON.as_oracle   sJ    !88:		$$%7%;<Y-hTmTTr4   rU   )FF   )
r1   rX   rY   rZ   r   r   r   r|   r\   r]   r^   s   @r-   r   r      s    ;L0U Ur4   r   c                   J   ^  \ rS rSrSr\" 5       rSU 4S jjrU 4S jrSr	U =r
$ )AsGML   )r   c                 ~   > X!/nUb&  UR                  U R                  US[        5      5        [        TU ]  " U0 UD6  g Nr   r   )r&   r   versionr   r(   r'   r,   s         r-   r   AsGML.__init__   s@    + t11)[#NO+//r4   c                    > U R                  5       nUS   nU R                  5       nUR                  US   /5        UR                  S:X  a  SOSUS'   [        [
        U]  " X40 UD6$ )Nr   r   r   zSDO_UTIL.TO_GML311GEOMETRYzSDO_UTIL.TO_GMLGEOMETRYr;   )ro   rm   rn   r"   r   r   r>   )r&   r?   r@   rA   r    r   r{   r,   s          r-   r|   AsGML.as_oracle   sw    !88:$Q'		$$&8&;%<= }}! )* 	j!
 UE)(P-PPr4   rU   )r   r   )r1   rX   rY   rZ   r   r   r   r   r|   r\   r]   r^   s   @r-   r   r      s     N;L0
Q 
Qr4   r   c                   :   ^  \ rS rSr\" 5       rSU 4S jjrSrU =r$ )AsKML   c                 ~   > U/nUb&  UR                  U R                  US[        5      5        [        TU ]  " U0 UD6  g r   r   r&   r   r   r(   r'   r,   s        r-   r   AsKML.__init__   ?    !l t11)[#NO+//r4   rU   )r   	r1   rX   rY   rZ   r   r   r   r\   r]   r^   s   @r-   r   r      s    ;L0 0r4   r   c                   :   ^  \ rS rSr\" 5       rSU 4S jjrSrU =r$ )AsSVG   c                    > [        US5      (       a  UO
[        U5      nUUU R                  US[        5      /n[        TU ]  " U0 UD6  g )NrE   r   )rP   r   rS   r   r   )r&   r   relativer   r(   r'   r,   s         r-   r   AsSVG.__init__   sS    *>??HS] 	 y+s;

 	+//r4   rU   )Fr   r   r^   s   @r-   r   r      s    ;L	0 	0r4   r   c                   &    \ rS rSr\" 5       rSrSrg)AsWKBi  r   rU   N)r1   rX   rY   rZ   r   r   r   r\   rU   r4   r-   r   r     s    =LEr4   r   c                   &    \ rS rSr\" 5       rSrSrg)AsWKTi  r   rU   N)r1   rX   rY   rZ   r   r   r   r\   rU   r4   r-   r   r     s    ;LEr4   r   c                   8   ^  \ rS rSrSU 4S jjrU 4S jrSrU =r$ )BoundingCirclei  c                 (   > [         TU ]  " X40 UD6  g r0   )r   r   )r&   r   num_segr(   r,   s       r-   r   BoundingCircle.__init__  s    66r4   c                    > U R                  5       nUR                  U R                  5       S   /5        [        [        U]  " X40 UD6$ r6   )rm   rn   ro   r   r   r|   r&   r?   r@   rA   r{   r,   s        r-   r|   BoundingCircle.as_oracle  sL    		$$d&A&A&CA&F%GH^U5
$1
 	
r4   rU   )0   )r1   rX   rY   rZ   r   r|   r\   r]   r^   s   @r-   r   r     s    7
 
r4   r   c                       \ rS rSrSrSrg)Centroidi  r   rU   Nr1   rX   rY   rZ   r   r\   rU   r4   r-   r   r         Er4   r   c                       \ rS rSrSrSrSrg)ClosestPointi  r   r   rU   Nr1   rX   rY   rZ   r   r   r\   rU   r4   r-   r   r         ENr4   r   c                       \ rS rSrSrSrSrg)
Differencei!  r   r   rU   Nr   rU   r4   r-   r   r   !  r   r4   r   c                   *    \ rS rSr\S 5       rS rSrg)DistanceResultMixini&  c                 ,    [        U R                  5      $ r0   )r   r8   r2   s    r-   r    DistanceResultMixin.output_field'  s    T^^,,r4   c                 n    U R                   R                  =(       a    U R                   R                  S:H  $ )Ni  )r8   	geographyr   r2   s    r-   source_is_geography'DistanceResultMixin.source_is_geography+  s&    ~~''GDNN,?,?4,GGr4   rU   N)r1   rX   rY   rZ   r   r   r   r\   rU   r4   r-   r   r   &  s    - -Hr4   r   c                   L   ^  \ rS rSrSrSrSU 4S jjrU 4S jrU 4S jrSr	U =r
$ )	Distancei/  r   Nc                 j   > X/nUb  U R                  US[        5      U l        [        TU ]  " U0 UD6  g )Nr   )rS   boolr   r   r   )r&   expr1expr2r   r(   r'   r,   s         r-   r   Distance.__init__3  s8    n ..xTJDM+//r4   c                   > U R                  5       nS nUR                  S   nU R                  5       nUR                  R                  U:w  a[  [        U[        5      (       a  XvR                  l        O5[        U[        UR                  R                  US95      UR                  S'   U(       d  U R                  R                  U5      (       a  U R                  (       aY  UR                  R                  S5      nUR                  R                  [        U R                  R                  U5      5      5        OUR                  R                  S5      n[         ["        U]J  " X4SU0UD6$ )Nr   )r   r   DistanceSpheroidDistanceSpherer;   )rm   r    r   r   r   r!   r   r   r   r   r8   r   r   r<   r=   r   r   r   r>   )	r&   r?   r@   rA   r{   r;   r   r   r,   s	           r-   as_postgresqlDistance.as_postgresql9  s.   		((+,,.	''94%''/8"",.2!u'9'9'>'>)T/((+
 T^^44Z@@ }} &>>??@RS((//$..11*=> &>>??@PQXu,
+3
7D
 	
r4   c                    > U R                   R                  U5      (       a&  SUS'   [        [        U R                  5      5      US'   [
        TU ]  " X40 UD6$ )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)r   r   )r8   r   r   r   r   r   r>   r   s       r-   rq   Distance.as_sqliteX  sV    >>"":.. K *% ),D,?(@M*%w~hDmDDr4   r   r0   )r1   rX   rY   rZ   r   r   r   r   rq   r\   r]   r^   s   @r-   r   r   /  s#    NH0
>E Er4   r   c                       \ rS rSrSrSrg)Envelopeib  r   rU   Nr   rU   r4   r-   r   r   b  r   r4   r   c                       \ rS rSrSrSrg)ForcePolygonCWif  r   rU   Nr   rU   r4   r-   r   r   f  r   r4   r   c                   (    \ rS rSr\" SS9rSrSrSrg)FromWKBij  r   r   r   rU   N	r1   rX   rY   rZ   r   r   r   r   r\   rU   r4   r-   r   r   j       a(LENr4   r   c                   (    \ rS rSr\" SS9rSrSrSrg)FromWKTip  r   r   r   rU   Nr   rU   r4   r-   r   r   p  r   r4   r   c                   @   ^  \ rS rSr\" 5       rSU 4S jjrS rSrU =r	$ )GeoHashiv  c                 ~   > U/nUb&  UR                  U R                  US[        5      5        [        TU ]  " U0 UD6  g r   r   r   s        r-   r   GeoHash.__init__y  r   r4   c                     U R                  5       n[        UR                  5      S:  a$  UR                  R                  [	        S5      5        UR
                  " X40 UD6$ )Nr   d   )rm   lenr    r   r   r>   )r&   r?   r@   rA   r{   s        r-   as_mysqlGeoHash.as_mysql  sL    		u''(1,$$++E#J7||HBMBBr4   rU   r0   )
r1   rX   rY   rZ   r   r   r   r   r\   r]   r^   s   @r-   r   r   v  s    ;L0C Cr4   r   c                   2    \ rS rSr\" 5       rSrSrSrSr	Sr
g)GeometryDistancei  r   rW   z <-> r   rU   N)r1   rX   rY   rZ   r   r   r   r;   
arg_joinerr   r\   rU   r4   r-   r   r     s    <LEHJNr4   r   c                       \ rS rSrSrSrSrg)Intersectioni  r   r   rU   Nr   rU   r4   r-   r  r    r   r4   r  c                   &    \ rS rSrSr\" 5       rSrg)IsEmptyi  isemptyrU   N)r1   rX   rY   rZ   lookup_namer   r   r\   rU   r4   r-   r  r    s    K>Lr4   r  c                   :   ^  \ rS rSrSr\" 5       rU 4S jrSrU =r	$ )IsValidi  isvalidc                 8   > [         TU ]  " X40 UD6u  pESU-  U4$ )Nz%CASE %s WHEN 'TRUE' THEN 1 ELSE 0 END)r   r|   )r&   r?   r@   rA   sqlparamsr,   s         r-   r|   IsValid.as_oracle  s)    g'NN6<fDDr4   rU   )
r1   rX   rY   rZ   r  r   r   r|   r\   r]   r^   s   @r-   r  r    s    K>LE Er4   r  c                   P   ^  \ rS rSrSU 4S jjrU 4S jrU 4S jrU 4S jrSrU =r	$ )Lengthi  c                 4   > X l         [        TU ]  " U40 UD6  g r0   )r   r   r   )r&   r   r   r(   r,   s       r-   r   Length.__init__  s     (%(r4   c                    > U R                   R                  U5      (       a&  UR                  R                  (       d  [	        S5      e[
        TU ]  " X40 UD6$ )Nz6This backend doesn't support Length on geodetic fields)r8   r   r   supports_length_geodeticr
   r   r>   r   s       r-   r>   Length.as_sql  sM    NN##J//''@@#H  w~hDmDDr4   c                 H  > U R                  5       nS nU R                  5       (       a/  UR                  R                  [	        U R
                  5      5        OU R                  R                  U5      (       aY  UR                  R                  S5      nUR                  R                  [	        U R                  R                  U5      5      5        O<[        S U R                  5        5       5      nUS:  a  UR                  R                  n[        [        U]>  " X4SU0UD6$ )NLengthSpheroidc              3   J   #    U  H  o(       d  M  UR                   v   M     g 7fr0   dim.0fs     r-   	<genexpr>'Length.as_postgresql.<locals>.<genexpr>  s     C%=eaee%=s   
##r   r;   )rm   r   r    r   r   r   r8   r   r<   r=   minrF   length3dr   r  r>   )r&   r?   r@   rA   r{   r;   r  r,   s          r-   r   Length.as_postgresql  s    		##%%$$++E$--,@A^^$$Z00!~~;;<LMH$$++E$..2I2I*2U,VWCT%;%;%=CCCQw%>>22VU*
+3
7D
 	
r4   c                    > S nU R                   R                  U5      (       a  U R                  (       a  SOSn[        TU ]  " X4SU0UD6$ )NGeodesicLengthGreatCircleLengthr;   )r8   r   r   r   r>   )r&   r?   r@   rA   r;   r,   s        r-   rq   Length.as_sqlite  sE    >>"":..+/=='>QHw~hWXWWWr4   r   )T)
r1   rX   rY   rZ   r   r>   r   rq   r\   r]   r^   s   @r-   r  r    s    )E
"X Xr4   r  c                   *    \ rS rSr\" 5       rSrSrSrg)LineLocatePointi  r   r   rU   Nr   rU   r4   r-   r'  r'    r   r4   r'  c                       \ rS rSrSrg)	MakeValidi  rU   Nrb   rU   r4   r-   r)  r)    rc   r4   r)  c                   &    \ rS rSr\" 5       rSrSrg)MemSizei  r   rU   Nr1   rX   rY   rZ   r   r   r   r\   rU   r4   r-   r+  r+        >LEr4   r+  c                   &    \ rS rSr\" 5       rSrSrg)NumGeometriesi  r   rU   Nr,  rU   r4   r-   r/  r/    r-  r4   r/  c                   &    \ rS rSr\" 5       rSrSrg)	NumPointsi  r   rU   Nr,  rU   r4   r-   r1  r1    r-  r4   r1  c                   8   ^  \ rS rSrSrU 4S jrU 4S jrSrU =r$ )	Perimeteri  r   c                 &  > S nU R                   R                  U5      (       a   U R                  5       (       d  [        S5      e[	        S U R                  5        5       5      nUS:  a  UR                  R                  n[        TU ]$  " X4SU0UD6$ )Nz<ST_Perimeter cannot use a non-projected non-geography field.c              3   8   #    U  H  oR                   v   M     g 7fr0   r  r  s     r-   r  *Perimeter.as_postgresql.<locals>.<genexpr>  s     :!9A%%!9s   r   r;   )
r8   r   r   r
   r  rF   r<   perimeter3dr   r>   )r&   r?   r@   rA   r;   r  r,   s         r-   r   Perimeter.as_postgresql  s    >>"":..t7O7O7Q7Q#N  :!7!7!9::7!~~11Hw~hWXWWWr4   c                 |   > U R                   R                  U5      (       a  [        S5      e[        TU ]  " X40 UD6$ )Nz+Perimeter cannot use a non-projected field.)r8   r   r
   r   r>   r   s       r-   rq   Perimeter.as_sqlite  s8    >>"":..#$QRRw~hDmDDr4   rU   )	r1   rX   rY   rZ   r   r   rq   r\   r]   r^   s   @r-   r3  r3    s    E	XE Er4   r3  c                       \ rS rSrSrSrg)PointOnSurfacei  r   rU   Nr   rU   r4   r-   r<  r<    r   r4   r<  c                       \ rS rSrSrSrg)Reversei  r   rU   Nr   rU   r4   r-   r>  r>    r   r4   r>  c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )Scalei   c                    > UU R                  US[        5      U R                  US[        5      /nUS:w  a&  UR                  U R                  US[        5      5        [        TU ]  " U0 UD6  g )Nxy        z)rS   rz   r   r   r   )r&   r   rB  rC  rE  r(   r'   r,   s          r-   r   Scale.__init__  si    q#}5q#}5

 8t11!S-HI+//r4   rU   )rD  r1   rX   rY   rZ   r   r\   r]   r^   s   @r-   r@  r@     s    0 0r4   r@  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )
SnapToGridi  c           
      4  >^  [        U5      nU/nUS;   a8  UR                  U Vs/ s H  nT R                  US[        5      PM     sn5        O5US:X  a$  U/ U 4S jUSS   5       QU 4S jUSS  5       Q-  nO[	        S5      e[
        TT ]  " U0 UD6  g s  snf )	N)r   r   rW      c              3   R   >#    U  H  nTR                  US [        5      v   M     g7frV   rS   rz   r  argr&   s     r-   r  &SnapToGrid.__init__.<locals>.<genexpr>  s#     Q$$$S"m<<   $'r   c              3   R   >#    U  H  nTR                  US [        5      v   M     g7frV   rM  rN  s     r-   r  rP    s#     R	$$$S"m<<	rQ  r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)r   extendrS   rz   r%   r   r   )r&   r   rH   r(   nargsr'   rO  r,   s   `      r-   r   SnapToGrid.__init__  s    D	!lF?GKLt##C];tL aZ QQRQRQq	R K
 QRR+// Ms   !BrU   rG  r^   s   @r-   rI  rI    s    0 0r4   rI  c                       \ rS rSrSrSrSrg)SymDifferencei  r   r   rU   Nr   rU   r4   r-   rW  rW    r   r4   rW  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i$  c                 |   > UU R                  US[        5      /nSU;  a  [        US9US'   [        TU ]  " U0 UD6  g )Nr   r   r   )rS   r   r   r   r   )r&   r   r   r(   r'   r,   s        r-   r   Transform.__init__%  sJ    tVS1
 &$1t$<E.!+//r4   rU   rG  r^   s   @r-   r   r   $  s    0 0r4   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )	Translatei/  c                    > U R                  5       n[        U R                  5      S:  a$  UR                  R                  [	        S5      5        [
        [        U]  " X40 UD6$ )NrK  r   )rm   r   r    r   r   r   r\  rq   r   s        r-   rq   Translate.as_sqlite0  sP    		t&&'!+$$++E!H5Y0WWWr4   rU   )r1   rX   rY   rZ   rq   r\   r]   r^   s   @r-   r\  r\  /  s    X Xr4   r\  c                       \ rS rSrSrSrSrg)Unioni8  r   r   rU   Nr   rU   r4   r-   r`  r`  8  r   r4   r`  N)Idecimalr   #django.contrib.gis.db.models.fieldsr   r    django.contrib.gis.db.models.sqlr   r   django.contrib.gis.geosr   django.core.exceptionsr	   	django.dbr
   django.db.modelsr   r   r   r   r   r   r   r   django.db.models.functionsr   django.utils.functionalr   r   rp   rz   r   r`   re   rj   ru   r   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/  r1  r3  r<  r>  r@  rI  rW  r\  r`  rU   r4   r-   <module>rk     s    O E 0 - '	 	 	 , 3eW%S Sl	lD 	7 7B B*C C B B.g U U0QG Q.0G 00G 0G 
G 
	
)+< 	
#%6 $ 
%'8 
H H0E"$8' 0Ef  & g g Cg C"w '): 
 !!"lI " ""
 !!E"L) E "E$X "6 $XNg 	! 	g 
G 
 
E#%97 E()+< g 	0%'8 	00*,= 0&(*; 
0! 0X X "3 r4   