
    `f%I                        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 d7e          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          X/var/www/html/env/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   fieldr0   s    r,   	geo_fieldzGeoFuncMixin.geo_field=   s    &t':1'=>DDr1   c                     | j         !||j                            | j                  } t	                      j        ||fd|i|S )Nfunction)r7   opsspatial_function_namer#   r   as_sql)r%   compiler
connectionr7   extra_contextr+   s        r,   r:   zGeoFuncMixin.as_sqlA   sL    = X%5!~;;DIFFHuww~h
WWXWWWWr1   c           
          t                      j        |i |}| j        s|S |                                }| j        D ]Q}||         }t	          |t
                    s2t          | j        d|dz   dt          |          j	        d          R|j
        j        }| j        dd          D ]D}|j        |         }|j        j        }	|	|k    r# t          ||          j        |i ||j        |<   E|S )Nz/ function requires a GeometryField in position r   z, got .)r   resolve_expressionr   get_source_fieldsr    r   r"   r#   typer/   r5   r   r   r   r   )r%   argskwargsressource_fieldsr(   r4   	base_sridr)   	expr_sridr+   s             r,   r@   zGeoFuncMixin.resolve_expressionF   s<   (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+ 
r1    c                 v    t          |d          s(|r&t          ||          st          d|d|d          |S )Nr@   zThe z) parameter has the wrong type: should be r?   )hasattrr    r"   )r%   r!   
param_namecheck_typess       r,   _handle_paramzGeoFuncMixin._handle_paramd   s[    u233 	 :e[#A#A i!zz;;;0   r1   r.   rI   N)r/   
__module____qualname__r7   r   r   propertyr#   r   r5   r:   r@   rN   __classcell__r+   s   @r,   r   r      s        HN    : ' ' X' E E _EX X X X X X
    <       r1   r   c                       e Zd ZdS )GeoFuncNr/   rP   rQ    r1   r,   rV   rV   n           Dr1   rV   c                   $    e Zd Zed             ZdS )GeomOutputGeoFuncc                 6    t          | j        j                  S )Nr   )r   r5   r   r0   s    r,   r   zGeomOutputGeoFunc.output_fields   s    $."56666r1   N)r/   rP   rQ   r   r   rX   r1   r,   r[   r[   r   s-        7 7 _7 7 7r1   r[   c                       e Zd ZdZd ZdS )SQLiteDecimalToFloatMixinz
    By default, Decimal values are converted to str by the SQLite backend, which
    is not acceptable by the GIS functions expecting numeric values.
    c                     |                                  }|                    d |                                D                         |j        ||fi |S )Nc                     g | ]O}t          |d           r;t          |j        t                    r!t	          t          |j                            n|PS )r!   )rK   r    r!   r   r   float).0r)   s     r,   
<listcomp>z7SQLiteDecimalToFloatMixin.as_sqlite.<locals>.<listcomp>   sg         4)).8W.M.MeDJ''(((  r1   )copyset_source_expressionsget_source_expressionsr:   )r%   r;   r<   r=   rd   s        r,   	as_sqlitez#SQLiteDecimalToFloatMixin.as_sqlite~   so    yy{{##  !7799	  	
 	
 	
 t{8ZAA=AAAr1   N)r/   rP   rQ   __doc__rg   rX   r1   r,   r^   r^   x   s2         

B 
B 
B 
B 
Br1   r^   c                       e Zd ZdZd ZdS )OracleToleranceMixing?c                 ,   t          |                     | j                            d| j                  dt
                              }|                                 }|                    g |                                 |            |j	        ||fi |S )N	tolerance)
r   rN   r'   getrl   NUMERIC_TYPESrd   re   rf   r:   )r%   r;   r<   r=   rl   clones         r,   	as_oraclezOracleToleranceMixin.as_oracle   s    
{DN;; 
 
	 		$$%Pt'B'B'D'D%Pi%PQQQu|HjBBMBBBr1   N)r/   rP   rQ   rl   rp   rX   r1   r,   rj   rj      s-        I
C 
C 
C 
C 
Cr1   rj   c                   >     e Zd ZdZed             Z fdZd Z xZS )Arear   c                 *    t          | j                  S r.   )r   r5   r0   s    r,   r   zArea.output_field   s    (((r1   c                     |j         j        s)| j                            |          rt	          d           t                      j        ||fi |S )Nz2Area on geodetic coordinate systems not supported.)featuressupports_area_geodeticr5   geodeticr
   r   r:   r%   r;   r<   r=   r+   s       r,   r:   zArea.as_sql   sf    "9 	dn>U>U?
 ?
 	 $D   uww~h
DDmDDDr1   c                 h    | j                             |          r
d|d<   d|d<    | j        ||fi |S )Nz+%(function)s(%(expressions)s, %(spheroid)d)templateTspheroid)r5   rw   r:   )r%   r;   r<   r=   s       r,   rg   zArea.as_sqlite   sJ    >"":.. 	-(UM*%(,M*%t{8ZAA=AAAr1   )	r/   rP   rQ   arityr   r   r:   rg   rS   rT   s   @r,   rr   rr      sq        E) ) _)E E E E EB B B B B B Br1   rr   c                   *    e Zd Z e            ZdZdZdS )Azimuth   r   r   Nr/   rP   rQ   r   r   r|   r   rX   r1   r,   r~   r~      #        :<<LENNNr1   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   appendrN   intr   r   )	r%   
expressionbboxcrsr   r'   r&   optionsr+   s	           r,   r   zAsGeoJSON.__init__   s    !l t11)[#NNOOO 	4 	GG 	GG 	G7###+//////r1   c                     |                                  }|                                 }|                    |d d                     t          t          |          j        ||fi |S )Nr   )rf   rd   re   r   r   r:   )r%   r;   r<   r=   r   ro   r+   s         r,   rp   zAsGeoJSON.as_oracle   sg    !88::		$$%7%;<<<-uY&&-h
TTmTTTr1   )FFr   )r/   rP   rQ   r   r   r   rp   rS   rT   s   @r,   r   r      sj        9;;L0 0 0 0 0 0U U U U U U U U Ur1   r   c                   B     e Zd ZdZ e            Zd fd	Z fdZ xZS )AsGML)r   r   r   c                     ||g}|/|                     |                     |dt                                t                      j        |i | d S Nr   r   )r%   r   versionr   r'   r&   r+   s         r,   r   zAsGML.__init__   s[    
+ t11)[#NNOOO+//////r1   c                    |                                  }|d         }|                                 }|                    |d         g           |j        dk    rdnd|d<    t	          t
          |          j        ||fi |S )Nr   r   r   zSDO_UTIL.TO_GML311GEOMETRYzSDO_UTIL.TO_GMLGEOMETRYr7   )rf   rd   re   r!   r   r   r:   )r%   r;   r<   r=   r   r   ro   r+   s          r,   rp   zAsGML.as_oracle   s    !88::$Q'		$$&8&;%<=== }!! )(* 	j!
 *uUE"")(JPP-PPPr1   )r   r   )	r/   rP   rQ   r   r   r   r   rp   rS   rT   s   @r,   r   r      so        N9;;L0 0 0 0 0 0
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Qr1   r   c                   4     e Zd Z e            Zd fd	Z xZS )AsKMLr   c                     |g}|/|                     |                     |dt                                t                      j        |i | d S r   r   r%   r   r   r'   r&   r+   s        r,   r   zAsKML.__init__   X    !l t11)[#NNOOO+//////r1   )r   r/   rP   rQ   r   r   r   rS   rT   s   @r,   r   r      sH        9;;L0 0 0 0 0 0 0 0 0 0r1   r   c                   4     e Zd Z e            Zd fd	Z xZS )AsSVGFr   c                     t          |d          r|nt          |          }|||                     |dt                    g} t                      j        |i | d S )Nr@   r   )rK   r   rN   r   r   )r%   r   relativer   r'   r&   r+   s         r,   r   zAsSVG.__init__   sm    *>??RHHS]] 	 y+s;;

 	+//////r1   )Fr   r   rT   s   @r,   r   r      sH        9;;L	0 	0 	0 	0 	0 	0 	0 	0 	0 	0r1   r   c                   &    e Zd Z e            ZdZdS )AsWKBr   N)r/   rP   rQ   r   r   r|   rX   r1   r,   r   r      s        ;==LEEEr1   r   c                   &    e Zd Z e            ZdZdS )AsWKTr   N)r/   rP   rQ   r   r   r|   rX   r1   r,   r   r     s        9;;LEEEr1   r   c                   *     e Zd Zd 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6r1   c                     |                                  }|                    |                                 d         g            t          t          |          j        ||fi |S r3   )rd   re   rf   r   r   rp   r%   r;   r<   r=   ro   r+   s        r,   rp   zBoundingCircle.as_oracle  sk    		$$d&A&A&C&CA&F%GHHH5u^U++5j
 
$1
 
 	
r1   )r   )r/   rP   rQ   r   rp   rS   rT   s   @r,   r   r   
  sV        7 7 7 7 7 7
 
 
 
 
 
 
 
 
r1   r   c                       e Zd ZdZdS )Centroidr   Nr/   rP   rQ   r|   rX   r1   r,   r   r             EEEr1   r   c                       e Zd ZdZdZdS )ClosestPointr   r   Nr/   rP   rQ   r|   r   rX   r1   r,   r   r             ENNNr1   r   c                       e Zd ZdZdZdS )
Differencer   r   Nr   rX   r1   r,   r   r     r   r1   r   c                   *    e Zd Zed             Zd ZdS )DistanceResultMixinc                 *    t          | j                  S r.   )r   r5   r0   s    r,   r   z DistanceResultMixin.output_field%  s    T^,,,r1   c                 :    | j         j        o| j         j        dk    S )Ni  )r5   	geographyr   r0   s    r,   source_is_geographyz'DistanceResultMixin.source_is_geography)  s    ~'GDN,?4,GGr1   N)r/   rP   rQ   r   r   r   rX   r1   r,   r   r   $  sA        - - _-H H H H Hr1   r   c                   <     e Zd ZdZdZd fd	Z fdZ fdZ xZS )Distancer   Nc                     ||g}|!|                      |dt                    | _         t                      j        |i | d S )Nr{   )rN   boolr{   r   r   )r%   expr1expr2r{   r'   r&   r+   s         r,   r   zDistance.__init__1  sM    en ..xTJJDM+//////r1   c                    |                                  }d }|j        d         }|                                 }|j        j        |k    rSt          |t                    r||j        _        n1t          |t          |j        j	        |                    |j        d<   |s| j
                            |          r{| j        rZ|j                            d          }|j                            t          | j
                            |                               n|j                            d          } t!          t"          |          j        ||fd|i|S )Nr   )r   r   DistanceSpheroidDistanceSpherer7   )rd   r   r   r   r   r    r   r   r   r   r5   rw   r{   r8   r9   r   r   r   r:   )	r%   r;   r<   r=   ro   r7   r   r   r+   s	           r,   as_postgresqlzDistance.as_postgresql7  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
 
 	
r1   c                     | j                             |          r)d|d<   t          t          | j                            |d<    t                      j        ||fi |S )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)rz   r{   )r5   rw   r   r   r{   r   r:   rx   s       r,   rg   zDistance.as_sqliteV  sm    >"":.. 	A K  ),D,?,?(@(@M*%uww~h
DDmDDDr1   r.   )	r/   rP   rQ   r   r{   r   r   rg   rS   rT   s   @r,   r   r   -  s        NH0 0 0 0 0 0
 
 
 
 
>E E E E E E E E Er1   r   c                       e Zd ZdZdS )Enveloper   Nr   rX   r1   r,   r   r   `  r   r1   r   c                       e Zd ZdZdS )ForcePolygonCWr   Nr   rX   r1   r,   r   r   d  r   r1   r   c                   .    e Zd Z ed          ZdZdZdS )FromWKBr   r   r   rX   Nr/   rP   rQ   r   r   r|   r   rX   r1   r,   r   r   h  *         =a(((LENNNr1   r   c                   .    e Zd Z ed          ZdZdZdS )FromWKTr   r   r   rX   Nr   rX   r1   r,   r   r   n  r   r1   r   c                   :     e Zd Z e            Zd fd	Zd Z xZS )GeoHashNc                     |g}|/|                     |                     |dt                                t                      j        |i | d S r   r   r   s        r,   r   zGeoHash.__init__w  r   r1   c                     |                                  }t          |j                  dk     r'|j                            t	          d                      |j        ||fi |S )Nr   d   )rd   lenr   r   r   r:   )r%   r;   r<   r=   ro   s        r,   as_mysqlzGeoHash.as_mysql}  s^    		u'((1,,$++E#JJ777u|HjBBMBBBr1   r.   )r/   rP   rQ   r   r   r   r   rS   rT   s   @r,   r   r   t  s^        9;;L0 0 0 0 0 0C C C C C C Cr1   r   c                   2    e Zd Z e            ZdZdZdZdZdS )GeometryDistancer   rI   z <-> r   N)	r/   rP   rQ   r   r   r|   r7   
arg_joinerr   rX   r1   r,   r   r     s-        :<<LEHJNNNr1   r   c                       e Zd ZdZdZdS )Intersectionr   r   Nr   rX   r1   r,   r   r     r   r1   r   c                   &    e Zd ZdZ e            ZdS )IsEmptyisemptyN)r/   rP   rQ   lookup_namer   r   rX   r1   r,   r   r     s        K<>>LLLr1   r   c                   6     e Zd ZdZ e            Z fdZ xZS )IsValidisvalidc                 N     t                      j        ||fi |\  }}d|z  |fS )Nz%CASE %s WHEN 'TRUE' THEN 1 ELSE 0 END)r   rp   )r%   r;   r<   r=   sqlparamsr+   s         r,   rp   zIsValid.as_oracle  s7    'egg'*NNNNV6<fDDr1   )r/   rP   rQ   r   r   r   rp   rS   rT   s   @r,   r   r     sQ        K<>>LE E E E E E E E Er1   r   c                   >     e Zd Zd fd	Z fdZ fdZ fdZ xZS )LengthTc                 J    || _          t                      j        |fi | d S r.   )r{   r   r   )r%   r   r{   r'   r+   s       r,   r   zLength.__init__  s/     ((%(((((r1   c                     | j                             |          r|j        j        st	          d           t                      j        ||fi |S )Nz6This backend doesn't support Length on geodetic fields)r5   rw   ru   supports_length_geodeticr
   r   r:   rx   s       r,   r:   zLength.as_sql  sb    N##J//	'@	 $H   uww~h
DDmDDDr1   c                 \   |                                  }d }|                                 r-|j                            t	          | j                             n| j                            |          rZ|j        	                    d          }|j                            t	          | j                            |                               n=t          d |                                 D                       }|dk    r|j        j        } t          t          |          j        ||fd|i|S )NLengthSpheroidc              3   (   K   | ]}||j         V  d S r.   dimrb   fs     r,   	<genexpr>z'Length.as_postgresql.<locals>.<genexpr>  s)      CCCaeCCCCCCr1   r   r7   )rd   r   r   r   r   r{   r5   rw   r8   r9   minrA   length3dr   r   r:   )r%   r;   r<   r=   ro   r7   r   r+   s          r,   r   zLength.as_postgresql  s#   		##%% 		3$++E$-,@,@AAAA^$$Z00 	3!~;;<LMMH$++E$.2I2I*2U2U,V,VWWWWCCT%;%;%=%=CCCCCCQww%>2*uVU##*j
 
+3
7D
 
 	
r1   c                     d }| j                             |          r| j        rdnd} t                      j        ||fd|i|S )NGeodesicLengthGreatCircleLengthr7   )r5   rw   r{   r   r:   )r%   r;   r<   r=   r7   r+   s        r,   rg   zLength.as_sqlite  sY    >"":.. 	R+/=Q''>QHuww~h
WWXWWWWr1   )T)r/   rP   rQ   r   r:   r   rg   rS   rT   s   @r,   r   r     s        ) ) ) ) ) )E E E E E
 
 
 
 
"X X X X X X X X Xr1   r   c                   *    e Zd Z e            ZdZdZdS )LineLocatePointr   r   Nr   rX   r1   r,   r   r     r   r1   r   c                       e Zd ZdS )	MakeValidNrW   rX   r1   r,   r   r     rY   r1   r   c                   &    e Zd Z e            ZdZdS )MemSizer   Nr/   rP   rQ   r   r   r|   rX   r1   r,   r   r             <>>LEEEr1   r   c                   &    e Zd Z e            ZdZdS )NumGeometriesr   Nr   rX   r1   r,   r  r    r   r1   r  c                   &    e Zd Z e            ZdZdS )	NumPointsr   Nr   rX   r1   r,   r  r    r   r1   r  c                   ,     e Zd ZdZ fdZ fdZ xZS )	Perimeterr   c                 6   d }| j                             |          r#|                                 st          d          t	          d |                                 D                       }|dk    r|j        j        } t                      j	        ||fd|i|S )Nz<ST_Perimeter cannot use a non-projected non-geography field.c              3   $   K   | ]}|j         V  d S r.   r   r   s     r,   r   z*Perimeter.as_postgresql.<locals>.<genexpr>  s$      ::A!%::::::r1   r   r7   )
r5   rw   r   r
   r   rA   r8   perimeter3dr   r:   )r%   r;   r<   r=   r7   r   r+   s         r,   r   zPerimeter.as_postgresql  s    >"":.. 	t7O7O7Q7Q 	#N   ::!7!7!9!9:::::77!~1Huww~h
WWXWWWWr1   c                     | j                             |          rt          d           t                      j        ||fi |S )Nz+Perimeter cannot use a non-projected field.)r5   rw   r
   r   r:   rx   s       r,   rg   zPerimeter.as_sqlite  sK    >"":.. 	S#$QRRRuww~h
DDmDDDr1   )r/   rP   rQ   r|   r   rg   rS   rT   s   @r,   r  r    sd        E	X 	X 	X 	X 	XE E E E E E E E Er1   r  c                       e Zd ZdZdS )PointOnSurfacer   Nr   rX   r1   r,   r  r    r   r1   r  c                       e Zd ZdZdS )Reverser   Nr   rX   r1   r,   r  r    r   r1   r  c                         e Zd Zd fd	Z xZS )Scale        c                    ||                      |dt                    |                      |dt                    g}|dk    r/|                    |                      |dt                                t                      j        |i | d S )Nxyr  z)rN   rn   r   r   r   )r%   r   r  r  r  r'   r&   r+   s          r,   r   zScale.__init__  s    q#}55q#}55

 88t11!S-HHIII+//////r1   )r  r/   rP   rQ   r   rS   rT   s   @r,   r  r    s=        0 0 0 0 0 0 0 0 0 0r1   r  c                        e Zd Z fdZ xZS )
SnapToGridc                 :    t          |          }|g}|dv r"|                     fd|D                        nG|dk    r2|g  fd|dd          D              fd|dd         D             z  }nt          d           t                      j        |i | d S )	N)r   r   c                 H    g | ]}                     |d t                    S )rI   rN   rn   rb   argr%   s     r,   rc   z'SnapToGrid.__init__.<locals>.<listcomp>  s+    LLL##C];;LLLr1      c              3   P   K   | ] }                     |d t                    V  !dS rO   r  r  s     r,   r   z&SnapToGrid.__init__.<locals>.<genexpr>  s5      QQ$$$S"m<<QQQQQQr1   r   c              3   P   K   | ] }                     |d t                    V  !dS rO   r  r  s     r,   r   z&SnapToGrid.__init__.<locals>.<genexpr>  s5      RR$$$S"m<<RRRRRRr1   r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)r   extendr$   r   r   )r%   r   rC   r'   nargsr&   r+   s   `     r,   r   zSnapToGrid.__init__  s    D		!lF??LLL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+//////r1   r  rT   s   @r,   r  r  
  s8        0 0 0 0 0 0 0 0 0r1   r  c                       e Zd ZdZdZdS )SymDifferencer   r   Nr   rX   r1   r,   r$  r$    r   r1   r$  c                        e Zd Z fdZ xZS )r   c                     ||                      |dt                    g}d|vrt          |          |d<    t                      j        |i | d S )Nr   r   r   )rN   r   r   r   r   )r%   r   r   r'   r&   r+   s        r,   r   zTransform.__init__#  sf    tVS11
 &&$1t$<$<$<E.!+//////r1   r  rT   s   @r,   r   r   "  s8        0 0 0 0 0 0 0 0 0r1   r   c                        e Zd Z fdZ xZS )	Translatec                     |                                  }t          | j                  dk     r'|j                            t	          d                      t          t          |          j        ||fi |S )Nr  r   )rd   r   r   r   r   r   r(  rg   r   s        r,   rg   zTranslate.as_sqlite.  sj    		t&''!++$++E!HH5550uY&&0:WWWWWr1   )r/   rP   rQ   rg   rS   rT   s   @r,   r(  r(  -  sA        X X X X X X X X Xr1   r(  c                       e Zd ZdZdZdS )Unionr   r   Nr   rX   r1   r,   r+  r+  6  r   r1   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   ra   rn   r   rV   r[   r^   rj   rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   register_lookupr   r   r   r   r   r   r  r  r  r  r  r  r  r$  r(  r+  rX   r1   r,   <module>r6     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            &       g       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     r1   