
    DvgL                        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          c/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/gis/db/models/functions.pyr   zGeoFuncMixin.__init__   sL   +//// & 	 	C*3/DdE** $#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!~;;DIFFHuww~h
WWX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<   (egg($9&99" 	J --//& 
	 
	C!#&Ee]33  			aU,,,	   M&	&qrr* 	6 	6C)#.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!zz;;;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         tW--2<TZ2Q2QE%
++,,,	  r2   )copyset_source_expressionsget_source_expressionsr;   )r&   r<   r=   r>   re   s        r-   	as_sqlitez#SQLiteDecimalToFloatMixin.as_sqlite~   so    yy{{##  !7799  		
 		
 		
 t{8Z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    
{DN;; 
 
	 		$$%Pt'B'B'D'D%Pi%PQQQu|HjBBM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 	dn>U>U?
 ?
 	 $D   uww~h
DDm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    >"":.. 	-(UM*%(,M*%t{8Z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NNNr2   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 	GG 	GG 	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%;<<<-uY&&-h
TTm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!
 *uUE"")(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    *>??RHHS]] 	 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EEEr2   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EEEr2   r   c                   4     e Zd Zd fd	Z fdZ fdZ xZS )BoundingCircle0   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&CA&F%GHHH5u^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             EEEr2   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NNNr2   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    ~'GDN,?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    en ..xTJJDM+//////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4Z@@ 	R } 	R &>??@RSS(//$.11*==>>    &>??@PQQ,uXu%%,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*%uww~h
DDm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    tVS11
 &&$1t$<$<$<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%;<<<+uWe$$+HjRRM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#JJ777u|HjBBM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NNNr2   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<>>LLLr2   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    'egg'*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   uww~h
DDm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Cae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MH$++E$.2I2I*2U2U,V,VWWWWCCT%;%;%=%=CCCCCCQww%>2*uVU##*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''>QHuww~h
WWX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EEEr2   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    >"":.. 	t7O7O7Q7Q 	#N   ::!7!7!9!9:::::77!~1Huww~h
WWX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uww~h
DDm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

 88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LtLLL    aZZ QQQQQRRQQQRRRRQqS	RRR KK
 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!HH5550uY&&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eW%S S S S S S S Sl	 	 	 	 	lD 	 	 	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 0G 0 0 00 0 0 0 0G 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       '):   
 !" " " " "lI " " "!"
 !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#%97 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   