
    h1                         S r SSKJr  SSKJr  / SQr\\\4rSr	S r
\ " S S5      5       r " S	 S
\5      r " S S\5      r\r\rg)a  
Distance and Area objects to allow for sensible and convenient calculation
and conversions.

Authors: Robert Coup, Justin Bronn, Riccardo Di Virgilio

Inspired by GeoPy (https://github.com/geopy/geopy)
and Geoff Biggs' PhD work on dimensioned units for robotics.
    )Decimal)total_ordering)AAreaDDistancesq_c                 n    U R                   [        :X  a  U R                  $ U R                   R                  $ N)	__class__type__name__)objs    L/var/www/html/env/lib/python3.13/site-packages/django/contrib/gis/measure.pypretty_namer   /   s&    ==D03<<Lcmm6L6LL    c                       \ rS rSrSr0 r0 r0 rSS jrS r	S r
\" \	\
5      rS rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS r\S 5       rSr g)MeasureBase3   Nc                     U R                  U5      u  o0l        [        X R                  U5        U(       a  [	        U[
        5      (       a  Xl        g g g r   )default_units_default_unitsetattrSTANDARD_UNIT
isinstancestr)selfdefault_unitkwargsvalues       r   __init__MeasureBase.__init__:   sD    $($6$6v$>!!((%0J|S99!- :<r   c                 ,    [        X R                  5      $ r   )getattrr   r   s    r   _get_standardMeasureBase._get_standard@   s    t//00r   c                 0    [        X R                  U5        g r   )r   r   )r   r    s     r   _set_standardMeasureBase._set_standardC   s    ((%0r   c                 t    XR                   ;   a  U R                  U R                   U   -  $ [        SU-  5      e)NUnknown unit type: %s)UNITSstandardAttributeError)r   names     r   __getattr__MeasureBase.__getattr__H   s5    ::==4::d#333 !84!?@@r   c                 j    [        U 5      < SU R                  < S[        X R                  5      < S3$ )N(=))r   r   r$   r%   s    r   __repr__MeasureBase.__repr__N   s+    D,,-
 	
r   c                 N    [        X R                  5      < SU R                  < 3$ )N )r$   r   r%   s    r   __str__MeasureBase.__str__U   s    !$(:(:;T=O=OPPr   c                 t    [        XR                  5      (       a  U R                  UR                  :H  $ [        $ r   r   r   r.   NotImplementedr   others     r   __eq__MeasureBase.__eq__Z   s*    e^^,,==ENN22!!r   c                 ,    [        U R                  5      $ r   )hashr.   r%   s    r   __hash__MeasureBase.__hash__`       DMM""r   c                 t    [        XR                  5      (       a  U R                  UR                  :  $ [        $ r   r>   r@   s     r   __lt__MeasureBase.__lt__c   s*    e^^,,==5>>11!!r   c                     [        XR                  5      (       aA  U R                  " SSU R                  0U R                  U R                  UR                  -   0D6$ [        SS[        U 5      0-  5      e)Nr   &%(class)s must be added with %(class)sclass r   r   r   r   r.   	TypeErrorr   r@   s     r   __add__MeasureBase.__add__k   sr    e^^,,>> !//%%(FH 
 8G[QUEV;WW r   c                     [        XR                  5      (       a!  U =R                  UR                  -  sl        U $ [        SS[	        U 5      0-  5      e)NrM   rN   r   r   r.   rQ   r   r@   s     r   __iadd__MeasureBase.__iadd__v   sH    e^^,,MMU^^+MK8G[QUEV;WW r   c                     [        XR                  5      (       aA  U R                  " SSU R                  0U R                  U R                  UR                  -
  0D6$ [        SS[        U 5      0-  5      e)Nr   +%(class)s must be subtracted from %(class)srN   rO   rP   r@   s     r   __sub__MeasureBase.__sub__   st    e^^,,>> !//%%(FH 
 =K-./ r   c                     [        XR                  5      (       a!  U =R                  UR                  -  sl        U $ [        SS[	        U 5      0-  5      e)NrY   rN   rU   r@   s     r   __isub__MeasureBase.__isub__   sJ    e^^,,MMU^^+MK=K-./ r   c                     [        U[        5      (       a7  U R                  " SSU R                  0U R                  U R
                  U-  0D6$ [        SS[        U 5      0-  5      e)Nr   (%(class)s must be multiplied with numberrN   rO   r   NUMERIC_TYPESr   r   r   r.   rQ   r   r@   s     r   __mul__MeasureBase.__mul__   sn    e]++>> !//%%(=? 
 :K-./ r   c                     [        U[        5      (       a   U =R                  [        U5      -  sl        U $ [	        SS[        U 5      0-  5      e)Nr`   rN   r   rb   r.   floatrQ   r   r@   s     r   __imul__MeasureBase.__imul__   sH    e]++MMU5\)MK:K-./ r   c                 
    X-  $ r   rO   r@   s     r   __rmul__MeasureBase.__rmul__   s
    |r   c                 2   [        XR                  5      (       a  U R                  UR                  -  $ [        U[        5      (       a7  U R                  " SSU R                  0U R
                  U R                  U-  0D6$ [        SS[        U 5      0-  5      e)Nr   z2%(class)s must be divided with number or %(class)srN   rO   )r   r   r.   rb   r   r   rQ   r   r@   s     r   __truediv__MeasureBase.__truediv__   s    e^^,,==5>>11e]++>> !//%%(=? 
 DK-./ r   c                     [        U[        5      (       a   U =R                  [        U5      -  sl        U $ [	        SS[        U 5      0-  5      e)Nz%%(class)s must be divided with numberrN   rf   r@   s     r   __itruediv__MeasureBase.__itruediv__   sF    e]++MMU5\)MK77KPTDU:VV r   c                 ,    [        U R                  5      $ r   )boolr.   r%   s    r   __bool__MeasureBase.__bool__   rH   r   c                 B   SnU R                   nUR                  5        H  u  pE[        U[        5      (       d  [        U5      nX@R                  ;   a  X R                  U   U-  -  nUnML  X@R
                  ;   a'  U R
                  U   nX R                  U   U-  -  nUnM  UR                  5       nXpR                  ;   a  X R                  U   U-  -  nUnM  XpR                  ;   a'  U R                  U   nX R                  U   U-  -  nUnM  [        SU-  5      e   X#4$ )zd
Return the unit value and the default units specified
from the given keyword arguments dictionary.
g        r,   )	r   itemsr   rg   r-   ALIASlowerLALIASr/   )r   r   valr   unitr    urz   s           r   r   MeasureBase.default_units   s   
 ))!<<>KDeU++ezz!zz$'%//##JJt$zz!}u,, 

JJ&::e,u44C#(Lkk)E*A::a=500C#$L()@4)GHH) **   r   c                     UR                  5       nXR                  ;   a  U$ X R                  ;   a  U$ X R                  ;   a  U R                  U   $ [        SU 35      e)z
Retrieve the unit attribute name for the given unit string.
For example, if the given unit string is 'metre', return 'm'.
Raise an AttributeError if an attribute cannot be found.
zUnknown unit type: )rz   r-   r{   r/   )clsunit_strrz   s      r   unit_attnameMeasureBase.unit_attname   sZ      yy OiiLjj ::e$$ #6xj!ABBr   )r   r   )!r   
__module____qualname____firstlineno__r   ry   r-   r{   r!   r&   r)   propertyr.   r1   r7   r;   rB   rF   rJ   rR   rV   rZ   r]   rc   rh   rk   rn   rq   ru   r   classmethodr   __static_attributes__rO   r   r   r   r   3   s    MEEF.11 }5HA
Q
"#"	

#!< C Cr   r   c                      \ rS rSrSr0 SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_S%S&S'S(S)S*S+S,S-S.S/S0S1S2S3S4.Er0 S5S_S6S_S7S8_S9S:_S;S:_S<S_S=S_S>S?_S@S?_SASB_SCSB_SDSE_SFSG_SHS	_SIS_SJS_SKS_0 SLS_SMS_SNS_SOS_SPS_SQS_SRS_SSS_STS_SUS_SVS!_SWS#_SXSY_SZS[_S\S]_S^S__S`Sa_ESaS#SbSc.Er\R                  5        V VVs0 s H  u  pUR                  5       U_M     snnn r	Sd r
Sergfs  snnn f )gr      mchaing=,Ԛ4@chain_benoitgl4@chain_searsgs<G4@british_chain_benoitg|1"u4@british_chain_searsgᕪQ4@british_chain_sears_truncatedg4@cmg{Gz?
british_ftgGՁ?
british_ydglGvB?	clarke_ftg)hć?clarke_linkg#Zп?fathomgB?ftgׁ?furlonggL7A`%i@german_mg]A ?gold_coast_ftgäց?	indian_ydg/!B?g
F%u?g     @@g8~߿?g,ݿ?gܿ?g      ?gL7A`%@gMbP?g     @g~j@g=,Ԛ@g\NtB?g`jځ?gư>gB?)inchkmlinklink_benoit
link_searsr   mimmnmnm_ukrodsears_yd	survey_ftumyd
centimeterfootinchesr   	kilometerr   	kilometremetermetre
micrometerr   
micrometre
millimeterr   
millimetremiler   yardr   zBritish chain (Benoit 1895 B)zBritish chain (Sears 1922)z$British chain (Sears 1922 truncated)zBritish foot (Sears 1922)zBritish footzBritish yard (Sears 1922)zBritish yardzClarke's FootzClarke's linkzChain (Benoit)zChain (Sears)zFoot (International)zFurrow LongzGerman legal metrezGold Coast footzIndian yardzLink (Benoit)r   zLink (Sears)r   zNautical Miler   zNautical Mile (UK)r   zUS survey footr   r   )z	U.S. FootzYard (Indian)zYard (Sears)c                    [        XR                  5      (       aH  [        SS[        U R                  -   0[        U R
                  -   U R                  UR                  -  0D6$ [        U[        5      (       a7  U R                  " SSU R                  0U R
                  U R                  U-  0D6$ [        SS[        U R                  5      0-  5      e)Nr   z;%(distance)s must be multiplied with number or %(distance)sdistancerO   )
r   r   r   AREA_PREFIXr   r   r.   rb   rQ   r   r@   s     r   rc   Distance.__mul__G  s    e^^,, (4+=+==!3!33dmmenn6TV  }-->> !//%%(=? 
 MDNN ; r   rO   N)r   r   r   r   r   r-   ry   rx   rz   r{   rc   r   ).0kvs   000r   r   r      s   M!!	! 	z! 		!
 	}! 	(! 	d! 	n! 	n! 	\! 	~! 	&! 	f! 	7! 	L!  	*!!" 	^#!$ ! #A!EH&d&& 	&& 	T	&
 	T& 	& 	& 	d& 	d& 	d& 	d& 	& 	& 	()?& 	%&;&  	/0O!&" 	$\#&$ 	%&& 	$\'&( 	)&* 	+&, 	-&. 	./&0 	1&2 	3&4 	y5&6 	j7&8 	?9&: 	{;&< 	=&> 	?&@ 	A&B 	gC&D 	+E&F !$"K&EN (-{{}5}tqaggil}5F 6s   C<r   c            	          \ rS rSr\\R                  -   r\R                  R                  5        V VVVs0 s H  u  p[        < U< 3US-  _M     snnnn SS0-  r\R                  R                  5        V VVVs0 s H  u  pU[        < U< 3_M     snnnn SS0-  r	\	R                  5        V VVs0 s H  u  pUR                  5       U_M     snnn rS rSrgs  snnnn f s  snnnn f s  snnn f )	r   i[     hai'  hectarec                     [        U[        5      (       a7  U R                  " SSU R                  0U R                  U R
                  U-  0D6$ [        SS[        U 5      0-  5      e)Nr   z%%(class)s must be divided by a numberrN   rO   ra   r@   s     r   rn   Area.__truediv__g  sl    e]++>> !//%%(=? 
 77KPTDU:VV r   rO   N)r   r   r   r   r   r   r   r-   rx   ry   rz   r{   rn   r   )r   r   r   r   s   0000r   r   r   [  s    ("8"88M9A9M9M9OP9O{A&1,9OPeT E 7?nn6J6J6LM6LdaQ+q))6LM4Q E (-{{}5}tqaggil}5F	 Q N 6s   C
;C#
3C+r   N)__doc__decimalr   	functoolsr   __all__intrg   rb   r   r   r   r   r   r   r   rO   r   r   <module>r      su   :  $
(eW%M AC AC ACH`{ `F; 2 r   