
    hL                        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\35      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          X/var/www/html/env/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    fieldr3   s    r.   	geo_fieldGeoFuncMixin.geo_field=   s$    &&t':':1'=>DDDr5   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Wr5   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%   typer2   r9   r   r!   r   r   )r'   argskwargsressource_fieldsr*   r8   	base_sridr+   	expr_sridr-   s             r.   rF   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+ + 
r5   c                 ~    [        US5      (       d+  U(       a$  [        X5      (       d  [        SU< SU< S35      eU$ )NrF   zThe z) parameter has the wrong type: should be rE   )hasattrr"   r$   )r'   r#   
param_namecheck_typess       r.   _handle_paramGeoFuncMixin._handle_paramd   s;    u233:e#A#A!;0  r5    r1    N)r2   
__module____qualname____firstlineno__r<   r    r   propertyr%   r   r9   r?   rF   rT   __static_attributes____classcell__r-   s   @r.   r   r      sQ    HN: ' ' E EX
< r5   r   c                       \ rS rSrSrg)GeoFuncn   rV   Nr2   rY   rZ   r[   r]   rV   r5   r.   ra   ra   n       r5   ra   c                   $    \ rS rSr\S 5       rSrg)GeomOutputGeoFuncr   c                 <    [        U R                  R                  S9$ )Nr   )r   r9   r   r3   s    r.   r   GeomOutputGeoFunc.output_fields   s    $.."5"566r5   rV   N)r2   rY   rZ   r[   r   r   r]   rV   r5   r.   rf   rf   r   s    7 7r5   rf   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_expressionsrQ   r"   r#   r   r   floatr?   )r'   r@   rA   rB   rn   r+   s         r.   	as_sqlite#SQLiteDecimalToFloatMixin.as_sqlite~   s    yy{## !779 :D tW--*TZZ2Q2Q %

+, :		
 {{8A=AAs   AB"rV   N)r2   rY   rZ   r[   __doc__rr   r]   rV   r5   r.   rk   rk   x   s    
Br5   rk   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   rT   r)   getry   NUMERIC_TYPESrn   ro   rp   r?   )r'   r@   rA   rB   ry   clones         r.   	as_oracleOracleToleranceMixin.as_oracle   sy    

{DNN;
	 		$$%Pt'B'B'D%Pi%PQ||HBMBBr5   rV   N)r2   rY   rZ   r[   ry   r}   r]   rV   r5   r.   rv   rv      s    I
Cr5   rv   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      $ r1   )r   r9   r3   s    r.   r   Area.output_field   s    ((r5   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_geodeticr9   geodeticr
   r   r?   r'   r@   rA   rB   r-   s       r.   r?   Area.as_sql   sS    ""99dnn>U>U?
 ?
 $D  w~hDmDDr5   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)r9   r   r?   )r'   r@   rA   rB   s       r.   rr   Area.as_sqlite   s?    >>"":..(UM*%(,M*%{{8A=AAr5   rV   )r2   rY   rZ   r[   arityr   r   r?   rr   r]   r^   r_   s   @r.   r   r      s,    E) )EB Br5   r   c                   *    \ rS rSr\" 5       rSrSrSrg)Azimuth      r   r   rV   N	r2   rY   rZ   r[   r   r   r   r    r]   rV   r5   r.   r   r          <LENr5   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   appendrT   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#+//r5   c                    > U R                  5       nU R                  5       nUR                  US S 5        [        [        U]  " X40 UD6$ Nr   )rp   rn   ro   r   r   r?   r'   r@   rA   rB   r!   r|   r-   s         r.   r}   AsGeoJSON.as_oracle   sJ    !88:		$$%7%;<Y-hTmTTr5   rV   )FF   )
r2   rY   rZ   r[   r   r   r   r}   r]   r^   r_   s   @r.   r   r      s    ;L0U Ur5   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+//r5   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<   )rp   rn   ro   r#   r   r   r?   )r'   r@   rA   rB   r!   r   r|   r-   s          r.   r}   AsGML.as_oracle   sw    !88:$Q'		$$&8&;%<= }}! )* 	j!
 UE)(P-PPr5   rV   )r   r   )r2   rY   rZ   r[   r    r   r   r   r}   r]   r^   r_   s   @r.   r   r      s     N;L0
Q 
Qr5   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+//r5   rV   )r   	r2   rY   rZ   r[   r   r   r   r]   r^   r_   s   @r.   r   r      s    ;L0 0r5   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 )NrF   r   )rQ   r   rT   r   r   )r'   r   relativer   r)   r(   r-   s         r.   r   AsSVG.__init__   sS    *>??HS] 	 y+s;

 	+//r5   rV   )Fr   r   r_   s   @r.   r   r      s    ;L	0 	0r5   r   c                   &    \ rS rSr\" 5       rSrSrg)AsWKBi  r   rV   N)r2   rY   rZ   r[   r   r   r   r]   rV   r5   r.   r   r     s    =LEr5   r   c                   &    \ rS rSr\" 5       rSrSrg)AsWKTi  r   rV   N)r2   rY   rZ   r[   r   r   r   r]   rV   r5   r.   r   r     s    ;LEr5   r   c                   D   ^  \ 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$ )BoundingCirclei  c                 (   > [         TU ]  " X40 UD6  g r1   )r   r   )r'   r   num_segr)   r-   s       r.   r   BoundingCircle.__init__  s    66r5   c                    > U R                  5       nUR                  U R                  5       S   /5        [        [        U]  " X40 UD6$ r7   )rn   ro   rp   r   r   r}   r'   r@   rA   rB   r|   r-   s        r.   r}   BoundingCircle.as_oracle  L    		$$d&A&A&CA&F%GH^U5
$1
 	
r5   c                    > U R                  5       nUR                  U R                  5       S   /5        [        [        U]  " X40 UD6$ r7   )rn   ro   rp   r   r   rr   r   s        r.   rr   BoundingCircle.as_sqlite  r   r5   rV   )0   )	r2   rY   rZ   r[   r   r}   rr   r]   r^   r_   s   @r.   r   r     s    7

 
r5   r   c                       \ rS rSrSrSrg)Centroidi  r   rV   Nr2   rY   rZ   r[   r   r]   rV   r5   r.   r   r         Er5   r   c                       \ rS rSrSrSrSrg)ClosestPointi#  r   r   rV   Nr2   rY   rZ   r[   r   r    r]   rV   r5   r.   r   r   #      ENr5   r   c                       \ rS rSrSrSrSrg)
Differencei(  r   r   rV   Nr   rV   r5   r.   r   r   (  r   r5   r   c                   *    \ rS rSr\S 5       rS rSrg)DistanceResultMixini-  c                 ,    [        U R                  5      $ r1   )r   r9   r3   s    r.   r    DistanceResultMixin.output_field.  s    T^^,,r5   c                 n    U R                   R                  =(       a    U R                   R                  S:H  $ )Ni  )r9   	geographyr   r3   s    r.   source_is_geography'DistanceResultMixin.source_is_geography2  s&    ~~''GDNN,?,?4,GGr5   rV   N)r2   rY   rZ   r[   r   r   r   r]   rV   r5   r.   r   r   -  s    - -Hr5   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
$ )	Distancei6  r   Nc                 j   > X/nUb  U R                  US[        5      U l        [        TU ]  " U0 UD6  g )Nr   )rT   boolr   r   r   )r'   expr1expr2r   r)   r(   r-   s         r.   r   Distance.__init__:  s8    n ..xTJDM+//r5   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<   )rn   r!   r   r   r   r"   r   r   r   r   r9   r   r   r=   r>   r   r   r   r?   )	r'   r@   rA   rB   r|   r<   r   r   r-   s	           r.   as_postgresqlDistance.as_postgresql@  s.   		((+,,.	''94%''/8"",.2!u'9'9'>'>)T/((+
 T^^44Z@@ }} &>>??@RS((//$..11*=> &>>??@PQXu,
+3
7D
 	
r5   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   )r9   r   r   r   r   r   r?   r   s       r.   rr   Distance.as_sqlite_  sV    >>"":.. K *% ),D,?(@M*%w~hDmDDr5   r   r1   )r2   rY   rZ   r[   r    r   r   r   rr   r]   r^   r_   s   @r.   r   r   6  s#    NH0
>E Er5   r   c                       \ rS rSrSrSrg)Envelopeii  r   rV   Nr   rV   r5   r.   r   r   i  r   r5   r   c                       \ rS rSrSrSrg)ForcePolygonCWim  r   rV   Nr   rV   r5   r.   r   r   m  r   r5   r   c                   @   ^  \ rS rSrSrSrSU 4S jjrU 4S jrSrU =r	$ )FromWKBiq  r   rV   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   rT   r   r   r   r   r'   r   r   r)   r(   r-   s        r.   r   FromWKB.__init__u  J    tVS1
 &$1t$<E.!+//r5   c                    > U R                  5       nU R                  5       nUR                  US S 5        [        [        U]  " X40 UD6$ r   )rp   rn   ro   r   r   r?   r   s         r.   r}   FromWKB.as_oracle~  sJ    !88:		$$%7%;<We+HRMRRr5   r   )
r2   rY   rZ   r[   r   r    r   r}   r]   r^   r_   s   @r.   r   r   q  s    EN0S Sr5   r   c                       \ rS rSrSrg)FromWKTi  rV   Nrc   rV   r5   r.   r   r     rd   r5   r   c                   @   ^  \ rS rSr\" 5       rSU 4S jjrS rSrU =r	$ )GeoHashi  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__  r   r5   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   )rn   lenr!   r   r   r?   )r'   r@   rA   rB   r|   s        r.   as_mysqlGeoHash.as_mysql  sL    		u''(1,$$++E#J7||HBMBBr5   rV   r1   )
r2   rY   rZ   r[   r   r   r   r  r]   r^   r_   s   @r.   r  r    s    ;L0C Cr5   r  c                   2    \ rS rSr\" 5       rSrSrSrSr	Sr
g)GeometryDistancei  r   rX   z <-> r   rV   N)r2   rY   rZ   r[   r   r   r   r<   
arg_joinerr    r]   rV   r5   r.   r  r    s    <LEHJNr5   r  c                       \ rS rSrSrSrSrg)Intersectioni  r   r   rV   Nr   rV   r5   r.   r  r    r   r5   r  c                   &    \ rS rSrSr\" 5       rSrg)IsEmptyi  isemptyrV   N)r2   rY   rZ   r[   lookup_namer   r   r]   rV   r5   r.   r  r    s    K>Lr5   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@   rA   rB   sqlparamsr-   s         r.   r}   IsValid.as_oracle  s)    g'NN6<fDDr5   rV   )
r2   rY   rZ   r[   r  r   r   r}   r]   r^   r_   s   @r.   r  r    s    K>LE Er5   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 r1   )r   r   r   )r'   r   r   r)   r-   s       r.   r   Length.__init__  s     (%(r5   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)r9   r   r   supports_length_geodeticr
   r   r?   r   s       r.   r?   Length.as_sql  sM    NN##J//''@@#H  w~hDmDDr5   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r1   dim.0fs     r.   	<genexpr>'Length.as_postgresql.<locals>.<genexpr>  s     C%=eaee%=s   
##r   r<   )rn   r   r!   r   r   r   r9   r   r=   r>   minrG   length3dr   r  r?   )r'   r@   rA   rB   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
 	
r5   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<   )r9   r   r   r   r?   )r'   r@   rA   rB   r<   r-   s        r.   rr   Length.as_sqlite  sE    >>"":..+/=='>QHw~hWXWWWr5   r   )T)
r2   rY   rZ   r[   r   r?   r   rr   r]   r^   r_   s   @r.   r  r    s    )E
"X Xr5   r  c                   *    \ rS rSr\" 5       rSrSrSrg)LineLocatePointi  r   r   rV   Nr   rV   r5   r.   r3  r3    r   r5   r3  c                       \ rS rSrSrg)	MakeValidi  rV   Nrc   rV   r5   r.   r5  r5    rd   r5   r5  c                   &    \ rS rSr\" 5       rSrSrg)MemSizei  r   rV   Nr2   rY   rZ   r[   r   r   r   r]   rV   r5   r.   r7  r7        >LEr5   r7  c                   &    \ rS rSr\" 5       rSrSrg)NumGeometriesi  r   rV   Nr8  rV   r5   r.   r;  r;    r9  r5   r;  c                   &    \ rS rSr\" 5       rSrSrg)	NumPointsi  r   rV   Nr8  rV   r5   r.   r=  r=    r9  r5   r=  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r1   r$  r&  s     r.   r)  *Perimeter.as_postgresql.<locals>.<genexpr>  s     :!9A%%!9s   r   r<   )
r9   r   r   r
   r+  rG   r=   perimeter3dr   r?   )r'   r@   rA   rB   r<   r%  r-   s         r.   r   Perimeter.as_postgresql  s    >>"":..t7O7O7Q7Q#N  :!7!7!9::7!~~11Hw~hWXWWWr5   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.)r9   r   r
   r   r?   r   s       r.   rr   Perimeter.as_sqlite  s8    >>"":..#$QRRw~hDmDDr5   rV   )	r2   rY   rZ   r[   r   r   rr   r]   r^   r_   s   @r.   r?  r?    s    E	XE Er5   r?  c                       \ rS rSrSrSrg)PointOnSurfacei  r   rV   Nr   rV   r5   r.   rH  rH    r   r5   rH  c                       \ rS rSrSrSrg)Reversei  r   rV   Nr   rV   r5   r.   rJ  rJ    r   r5   rJ  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)rT   r{   r   r   r   )r'   r   rN  rO  rQ  r)   r(   r-   s          r.   r   Scale.__init__  si    q#}5q#}5

 8t11!S-HI+//r5   rV   )rP  r2   rY   rZ   r[   r   r]   r^   r_   s   @r.   rL  rL    s    0 0r5   rL  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   rX      c              3   R   >#    U  H  nTR                  US [        5      v   M     g7frW   rT   r{   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rW   rY  rZ  s     r.   r)  r\  ,  s#     R	$$$S"m<<	r]  r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)r  extendrT   r{   r&   r   r   )r'   r   rI   r)   nargsr(   r[  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rV   rS  r_   s   @r.   rU  rU     s    0 0r5   rU  c                       \ rS rSrSrSrSrg)SymDifferencei3  r   r   rV   Nr   rV   r5   r.   rc  rc  3  r   r5   rc  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i8  c                 |   > UU R                  US[        5      /nSU;  a  [        US9US'   [        TU ]  " U0 UD6  g r   r   r   s        r.   r   Transform.__init__9  r   r5   rV   rS  r_   s   @r.   r   r   8  s    0 0r5   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )	TranslateiC  c                    > U R                  5       n[        U R                  5      S:  a$  UR                  R                  [	        S5      5        [
        [        U]  " X40 UD6$ )NrW  r   )rn   r  r!   r   r   r   rh  rr   r   s        r.   rr   Translate.as_sqliteD  sP    		t&&'!+$$++E!H5Y0WWWr5   rV   )r2   rY   rZ   r[   rr   r]   r^   r_   s   @r.   rh  rh  C  s    X Xr5   rh  c                       \ rS rSrSrSrSrg)UnioniL  r   r   rV   Nr   rV   r5   r.   rl  rl  L  r   r5   rl  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   rq   r{   r   ra   rf   rk   rv   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  r3  r5  r7  r;  r=  r?  rH  rJ  rL  rU  rc  rh  rl  rV   r5   r.   <module>rw     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  & Sg S*	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 r5   