
    eki]Q                        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  S SKJr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      r0 " S+ S,\%\#5      r1 " S- S.5      r2 " S/ S0\2\%\"5      r3 " S1 S2\#5      r4 " S3 S4\#5      r5 " S5 S6\"5      r6 " S7 S8\65      r7 " S9 S:\"5      r8 " S; S<\"5      r9 " S= S>\%\#5      r:\Rv                   " S? S@\!\5      5       r<\Rv                   " SA SB\!\5      5       r=\Rv                   " SC SD\%\!\5      5       r> " SE SF\2\%\"5      r? " SG SH\"5      r@ " SI SJ\#5      rA " SK SL\"5      rB " SM SN\"5      rC " SO SP\"5      rD " SQ SR\2\%\"5      rE " SS ST\%\#5      rF " SU SV\"5      rG " SW SX\#5      rH " SY SZ\$\#5      rI " S[ S\\$\#5      rJ " S] S^\%\#5      rK " S_ S`\#5      r " Sa Sb\I5      rL " Sc Sd\%\#5      rMge)f    )Decimal)BaseSpatialFieldGeometryField)	AreaFieldDistanceField)GEOSGeometry)Point)
FieldError)NotSupportedError)	BinaryFieldBooleanField	CharField
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          k/var/www/events.demo-site.click/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)r0   __name__r*   s    r1   r(   GeoFuncMixin.name;   s    ~~&&&    c                 N    U R                   U R                  S      R                  $ Nr   )r$   r#   fieldr6   s    r1   	geo_fieldGeoFuncMixin.geo_field?   s$    &&t':':1'=>DDDr8   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_contextr0   s        r1   rB   GeoFuncMixin.as_sqlC   sC    == X%5!~~;;DIIFHw~hWXWWWr8   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(   typer5   r<   r   r$   r    r   )r*   argskwargsressource_fieldsr-   r;   	base_sridr.   	expr_sridr0   s             r1   rI   GeoFuncMixin.resolve_expressionH   s   g($9&9""J --/&&C!&Ee]33 		aU,,	  ' MM&&	&&qr*C))#.D))..I%.7/$$/%&*/6.4/6&&s+ + 
r8   c                 ~    [        US5      (       d+  U(       a$  [        X5      (       d  [        SU< SU< S35      eU$ )NrI   zThe z) parameter has the wrong type: should be rH   )hasattrr%   r'   )r*   r&   
param_namecheck_typess       r1   _handle_paramGeoFuncMixin._handle_paramf   s;    u233:e#A#A!;0  r8    r4    N)r5   
__module____qualname____firstlineno__r?   r#   r"   propertyr(   r   r<   rB   rI   rW   __static_attributes____classcell__r0   s   @r1   r   r      sQ    HN: ' ' E EX
< r8   r   c                       \ rS rSrSrg)GeoFuncp   rY   Nr5   r\   r]   r^   r`   rY   r8   r1   rd   rd   p       r8   rd   c                   $    \ rS rSr\S 5       rSrg)GeomOutputGeoFunct   c                 <    [        U R                  R                  S9$ )Nr   )r   r<   r   r6   s    r1   r    GeomOutputGeoFunc.output_fieldu   s    $.."5"566r8   rY   N)r5   r\   r]   r^   r   r    r`   rY   r8   r1   ri   ri   t   s    7 7r8   ri   c                       \ rS rSrSrS rSrg)SQLiteDecimalToFloatMixinz   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_expressionsrT   r%   r&   r   r   floatrB   )r*   rC   rD   rE   rq   r.   s         r1   	as_sqlite#SQLiteDecimalToFloatMixin.as_sqlite   s    yy{## !779 :D tW--*TZZ2Q2Q %

+, :		
 {{8A=AAs   AB"rY   N)r5   r\   r]   r^   __doc__ru   r`   rY   r8   r1   rn   rn   z   s    
Br8   rn   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   rW   r,   getr|   NUMERIC_TYPESrq   rr   rs   rB   )r*   rC   rD   rE   r|   clones         r1   	as_oracleOracleToleranceMixin.as_oracle   sy    

{DNN;
	 		$$%Pt'B'B'D%Pi%PQ||HBMBBr8   rY   N)r5   r\   r]   r^   r|   r   r`   rY   r8   r1   ry   ry      s    I
Cr8   ry   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      $ r4   )r   r<   r6   s    r1   r    Area.output_field   s    ((r8   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_geodeticr<   geodeticr   r!   rB   r*   rC   rD   rE   r0   s       r1   rB   Area.as_sql   sS    ""99dnn>U>U?
 ?
 $D  w~hDmDDr8   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)r<   r   rB   )r*   rC   rD   rE   s       r1   ru   Area.as_sqlite   s?    >>"":..(UM*%(,M*%{{8A=AAr8   rY   )r5   r\   r]   r^   arityr   r    rB   ru   r`   ra   rb   s   @r1   r   r      s,    E) )EB Br8   r   c                   *    \ rS rSr\" 5       rSrSrSrg)Azimuth      r   r   rY   N	r5   r\   r]   r^   r   r    r   r#   r`   rY   r8   r1   r   r          <LENr8   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   appendrW   intr!   r"   )	r*   
expressionbboxcrsr   r,   r+   optionsr0   s	           r1   r"   AsGeoJSON.__init__   sl    !l t11)[#NO4GGG7#+//r8   c                    > U R                  5       nU R                  5       nUR                  US S 5        [        [        U]  " X40 UD6$ Nr   )rs   rq   rr   r!   r   rB   r*   rC   rD   rE   r$   r   r0   s         r1   r   AsGeoJSON.as_oracle   sJ    !88:		$$%7%;<Y-hTmTTr8   rY   )FF   )
r5   r\   r]   r^   r   r    r"   r   r`   ra   rb   s   @r1   r   r      s    ;L0U Ur8   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+   r0   s         r1   r"   AsGML.__init__   s@    + t11)[#NO+//r8   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?   )rs   rq   rr   r&   r!   r   rB   )r*   rC   rD   rE   r$   r   r   r0   s          r1   r   AsGML.as_oracle   sw    !88:$Q'		$$&8&;%<= }}! )* 	j!
 UE)(P-PPr8   rY   )r   r   )r5   r\   r]   r^   r#   r   r    r"   r   r`   ra   rb   s   @r1   r   r      s     N;L0
Q 
Qr8   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+   r0   s        r1   r"   AsKML.__init__   ?    !l t11)[#NO+//r8   rY   )r   	r5   r\   r]   r^   r   r    r"   r`   ra   rb   s   @r1   r   r      s    ;L0 0r8   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 )NrI   r   )rT   r   rW   r!   r"   )r*   r   relativer   r,   r+   r0   s         r1   r"   AsSVG.__init__   sS    *>??HS] 	 y+s;

 	+//r8   rY   )Fr   r   rb   s   @r1   r   r      s    ;L	0 	0r8   r   c                   &    \ rS rSr\" 5       rSrSrg)AsWKBi  r   rY   N)r5   r\   r]   r^   r   r    r   r`   rY   r8   r1   r   r     s    =LEr8   r   c                   &    \ rS rSr\" 5       rSrSrg)AsWKTi	  r   rY   N)r5   r\   r]   r^   r   r    r   r`   rY   r8   r1   r   r   	  s    ;LEr8   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 r4   )r!   r"   )r*   r   num_segr,   r0   s       r1   r"   BoundingCircle.__init__  s    66r8   c                    > U R                  5       nUR                  U R                  5       S   /5        [        [        U]  " X40 UD6$ r:   )rq   rr   rs   r!   r   r   r*   rC   rD   rE   r   r0   s        r1   r   BoundingCircle.as_oracle  L    		$$d&A&A&CA&F%GH^U5
$1
 	
r8   c                    > U R                  5       nUR                  U R                  5       S   /5        [        [        U]  " X40 UD6$ r:   )rq   rr   rs   r!   r   ru   r   s        r1   ru   BoundingCircle.as_sqlite  r   r8   rY   )0   )	r5   r\   r]   r^   r"   r   ru   r`   ra   rb   s   @r1   r   r     s    7

 
r8   r   c                       \ rS rSrSrSrg)Centroidi!  r   rY   Nr5   r\   r]   r^   r   r`   rY   r8   r1   r   r   !      Er8   r   c                       \ rS rSrSrSrSrg)ClosestPointi%  r   r   rY   Nr5   r\   r]   r^   r   r#   r`   rY   r8   r1   r   r   %      ENr8   r   c                       \ rS rSrSrSrSrg)
Differencei*  r   r   rY   Nr   rY   r8   r1   r   r   *  r   r8   r   c                   *    \ rS rSr\S 5       rS rSrg)DistanceResultMixini/  c                 ,    [        U R                  5      $ r4   )r   r<   r6   s    r1   r     DistanceResultMixin.output_field0  s    T^^,,r8   c                 n    U R                   R                  =(       a    U R                   R                  S:H  $ )Ni  )r<   	geographyr   r6   s    r1   source_is_geography'DistanceResultMixin.source_is_geography4  s&    ~~''GDNN,?,?4,GGr8   rY   N)r5   r\   r]   r^   r   r    r   r`   rY   r8   r1   r   r   /  s    - -Hr8   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
$ )	Distancei8  r   Nc                 j   > X/nUb  U R                  US[        5      U l        [        TU ]  " U0 UD6  g )Nr   )rW   boolr   r!   r"   )r*   expr1expr2r   r,   r+   r0   s         r1   r"   Distance.__init__<  s8    n ..xTJDM+//r8   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?   )rq   r$   r   r    r   r%   r   r   r   r   r<   r   r   r@   rA   r   r!   r   rB   )	r*   rC   rD   rE   r   r?   r   r   r0   s	           r1   as_postgresqlDistance.as_postgresqlB  s.   		((+,,.	''94%''/8"",.2!u'9'9'>'>)T/((+
 T^^44Z@@ }} &>>??@RS((//$..11*=> &>>??@PQXu,
+3
7D
 	
r8   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   )r<   r   r   r   r   r!   rB   r   s       r1   ru   Distance.as_sqlitea  sV    >>"":.. K *% ),D,?(@M*%w~hDmDDr8   r   r4   )r5   r\   r]   r^   r#   r   r"   r   ru   r`   ra   rb   s   @r1   r   r   8  s#    NH0
>E Er8   r   c                       \ rS rSrSrSrg)Envelopeik  r   rY   Nr   rY   r8   r1   r   r   k  r   r8   r   c                       \ rS rSrSrSrg)ForcePolygonCWio  r   rY   Nr   rY   r8   r1   r   r   o  r   r8   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	$ )FromWKBis  r   rY   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   rW   r   r   r!   r"   r*   r   r   r,   r+   r0   s        r1   r"   FromWKB.__init__w  J    tVS1
 &$1t$<E.!+//r8   c                    > U R                  5       nU R                  5       nUR                  US S 5        [        [        U]  " X40 UD6$ r   )rs   rq   rr   r!   r   rB   r   s         r1   r   FromWKB.as_oracle  sJ    !88:		$$%7%;<We+HRMRRr8   r   )
r5   r\   r]   r^   r   r#   r"   r   r`   ra   rb   s   @r1   r   r   s  s    EN0S Sr8   r   c                       \ rS rSrSrg)FromWKTi  rY   Nrf   rY   r8   r1   r  r    rg   r8   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        r1   r"   GeoHash.__init__  r   r8   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   )rq   lenr$   r   r   rB   )r*   rC   rD   rE   r   s        r1   as_mysqlGeoHash.as_mysql  sL    		u''(1,$$++E#J7||HBMBBr8   rY   r4   )
r5   r\   r]   r^   r   r    r"   r  r`   ra   rb   s   @r1   r  r    s    ;L0C Cr8   r  c                   2    \ rS rSr\" 5       rSrSrSrSr	Sr
g)GeometryDistancei  r   r[   z <-> r   rY   N)r5   r\   r]   r^   r   r    r   r?   
arg_joinerr#   r`   rY   r8   r1   r  r    s    <LEHJNr8   r  c                       \ rS rSrSrSrSrg)Intersectioni  r   r   rY   Nr   rY   r8   r1   r  r    r   r8   r  c                   ,    \ rS rSr\" 5       rSrS rSrg)GeometryTypei  	geom_typec                 N    UR                  U R                  5      u  pESU S3nXe4$ )Nz&(SELECT DECODE(SDO_GEOMETRY.GET_GTYPE(z),1, 'POINT',2, 'LINESTRING',3, 'POLYGON',4, 'COLLECTION',5, 'MULTIPOINT',6, 'MULTILINESTRING',7, 'MULTIPOLYGON',8, 'SOLID','UNKNOWN')))compilelhs)r*   rC   rD   rE   r  paramssqls          r1   r   GeometryType.as_oracle  s;    &&txx0&&)U 	+
 	 {r8   rY   N)	r5   r\   r]   r^   r   r    lookup_namer   r`   rY   r8   r1   r  r    s    ;LKr8   r  c                   &    \ rS rSrSr\" 5       rSrg)IsEmptyi  isemptyrY   N)r5   r\   r]   r^   r  r   r    r`   rY   r8   r1   r  r    s    K>Lr8   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*   rC   rD   rE   r  r  r0   s         r1   r   IsValid.as_oracle  s)    g'NN6<fDDr8   rY   )
r5   r\   r]   r^   r  r   r    r   r`   ra   rb   s   @r1   r   r     s    K>LE Er8   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 r4   )r   r!   r"   )r*   r   r   r,   r0   s       r1   r"   Length.__init__  s     (%(r8   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)r<   r   r   supports_length_geodeticr   r!   rB   r   s       r1   rB   Length.as_sql  sM    NN##J//''@@#H  w~hDmDDr8   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r4   dim.0fs     r1   	<genexpr>'Length.as_postgresql.<locals>.<genexpr>  s     C%=eaee%=s   
##r   r?   )rq   r   r$   r   r   r   r<   r   r@   rA   minrJ   length3dr!   r%  rB   )r*   rC   rD   rE   r   r?   r/  r0   s          r1   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
 	
r8   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?   )r<   r   r   r!   rB   )r*   rC   rD   rE   r?   r0   s        r1   ru   Length.as_sqlite  sE    >>"":..+/=='>QHw~hWXWWWr8   r   )T)
r5   r\   r]   r^   r"   rB   r   ru   r`   ra   rb   s   @r1   r%  r%    s    )E
$X Xr8   r%  c                   *    \ rS rSr\" 5       rSrSrSrg)LineLocatePointi  r   r   rY   Nr   rY   r8   r1   r=  r=    r   r8   r=  c                       \ rS rSrSrg)	MakeValidi  rY   Nrf   rY   r8   r1   r?  r?    rg   r8   r?  c                   &    \ rS rSr\" 5       rSrSrg)MemSizei  r   rY   Nr5   r\   r]   r^   r   r    r   r`   rY   r8   r1   rA  rA        >LEr8   rA  c                   &    \ rS rSr\" 5       rSrSrg)NumGeometriesi  r   rY   NrB  rY   r8   r1   rE  rE    rC  r8   rE  c                   &    \ rS rSr\" 5       rSrSrg)	NumPointsi  r   rY   NrB  rY   r8   r1   rG  rG    rC  r8   rG  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r4   r.  r0  s     r1   r3  *Perimeter.as_postgresql.<locals>.<genexpr>  s     :!9A%%!9s   r   r?   )
r<   r   r   r   r5  rJ   r@   perimeter3dr!   rB   )r*   rC   rD   rE   r?   r/  r0   s         r1   r   Perimeter.as_postgresql  s    >>"":..t7O7O7Q7Q#N  :!7!7!9::7!~~11Hw~hWXWWWr8   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.)r<   r   r   r!   rB   r   s       r1   ru   Perimeter.as_sqlite   s8    >>"":..#$QRRw~hDmDDr8   rY   )	r5   r\   r]   r^   r   r   ru   r`   ra   rb   s   @r1   rI  rI    s    E	XE Er8   rI  c                       \ rS rSrSrSrg)PointOnSurfacei&  r   rY   Nr   rY   r8   r1   rR  rR  &  r   r8   rR  c                       \ rS rSrSrSrg)Reversei*  r   rY   Nr   rY   r8   r1   rT  rT  *  r   r8   rT  c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )Rotatei.  c                    > UU R                  US[        5      /nUbK  [        U[        5      (       d  [	        S5      eUR                  [        UR                  [        5       S95        [        TU ](  " U0 UD6  g )Nanglezorigin argument must be a Pointr   )rW   r~   r%   r	   r'   r   r   wktr   r!   r"   )r*   r   rX  originr,   r+   r0   s         r1   r"   Rotate.__init__/  sm    ug}=
 fe,, ABBuVZZmoNO+//r8   rY   r4   r5   r\   r]   r^   r"   r`   ra   rb   s   @r1   rV  rV  .  s    	0 	0r8   rV  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)rW   r~   r   r!   r"   )r*   r   r`  ra  rc  r,   r+   r0   s          r1   r"   Scale.__init__<  si    q#}5q#}5

 8t11!S-HI+//r8   rY   )rb  r\  rb   s   @r1   r^  r^  ;  s    0 0r8   r^  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )
SnapToGridiG  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   r[      c              3   R   >#    U  H  nTR                  US [        5      v   M     g7frZ   rW   r~   r1  argr*   s     r1   r3  &SnapToGrid.__init__.<locals>.<genexpr>R  s#     Q$$$S"m<<   $'r   c              3   R   >#    U  H  nTR                  US [        5      v   M     g7frZ   rj  rk  s     r1   r3  rm  S  s#     R	$$$S"m<<	rn  r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)r
  extendrW   r~   r)   r!   r"   )r*   r   rL   r,   nargsr+   rl  r0   s   `      r1   r"   SnapToGrid.__init__H  s    D	!lF?GKLt##C];tL aZ QQRQRQq	R K
 QRR+// Ms   !BrY   r\  rb   s   @r1   rf  rf  G  s    0 0r8   rf  c                       \ rS rSrSrSrSrg)SymDifferenceiZ  r   r   rY   Nr   rY   r8   r1   rt  rt  Z  r   r8   rt  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 r   r   r   s        r1   r"   Transform.__init__`  r   r8   rY   r\  rb   s   @r1   r   r   _  s    0 0r8   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )	Translateij  c                    > U R                  5       n[        U R                  5      S:  a$  UR                  R                  [	        S5      5        [
        [        U]  " X40 UD6$ )Nrh  r   )rq   r
  r$   r   r   r!   ry  ru   r   s        r1   ru   Translate.as_sqlitek  sP    		t&&'!+$$++E!H5Y0WWWr8   rY   )r5   r\   r]   r^   ru   r`   ra   rb   s   @r1   ry  ry  j  s    X Xr8   ry  c                       \ rS rSrSrSrSrg)Unionis  r   r   rY   Nr   rY   r8   r1   r}  r}  s  r   r8   r}  N)Ndecimalr   #django.contrib.gis.db.models.fieldsr   r    django.contrib.gis.db.models.sqlr   r   django.contrib.gis.geosr   django.contrib.gis.geos.pointr	   django.core.exceptionsr
   	django.dbr   django.db.modelsr   r   r   r   r   r   r   r   r   django.db.models.functionsr   django.utils.functionalr   r   rt   r~   r   rd   ri   rn   ry   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?  rA  rE  rG  rI  rR  rT  rV  r^  rf  rt  ry  r}  rY   r8   r1   <module>r     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Pg 	! 	g 
G 
 
E#%97 E()+< g 
0 
0	0%'8 	00*,= 0&(*; 
0! 0X X "3 r8   