
    Dvg1                         d Z ddlmZ ddlmZ g dZeeefZdZ	d Z
e G d d                      Z G d	 d
e          Z G d de          ZeZeZdS )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                 H    | j         t          k    r| j        n| j         j        S N)	__class__type__name__)objs    W/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/gis/measure.pypretty_namer   /   s    =D003<<cm6LL    c                       e Zd ZdZi Zi Zi ZddZd Zd Z	 e
ee	          Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed             ZdS )MeasureBaseNc                     |                      |          \  }| _        t          | | j        |           |rt	          |t
                    r|| _        d S d S d S r   )default_units_default_unitsetattrSTANDARD_UNIT
isinstancestr)selfdefault_unitkwargsvalues       r   __init__zMeasureBase.__init__:   sm    $($6$6v$>$>!t!d(%000 	.J|S99 	.!-D	. 	. 	. 	.r   c                 ,    t          | | j                  S r   )getattrr   r   s    r   _get_standardzMeasureBase._get_standard@   s    tT/000r   c                 2    t          | | j        |           d S r   )r   r   )r   r   s     r   _set_standardzMeasureBase._set_standardC   s    d(%00000r   c                 b    || j         v r| j        | j         |         z  S t          d|z            )NUnknown unit type: %s)UNITSstandardAttributeError)r   names     r   __getattr__zMeasureBase.__getattr__H   s7    4:=4:d#333 !84!?@@@r   c                 b    t          |           d| j        dt          | | j                  dS )N(=))r   r   r"   r#   s    r   __repr__zMeasureBase.__repr__N   s?    D$,----
 	
r   c                 @    t          | | j                  d| j        S )N )r"   r   r#   s    r   __str__zMeasureBase.__str__U   s&    !$(:;;;;T=O=OPPr   c                 Z    t          || j                  r| j        |j        k    S t          S r   r   r   r*   NotImplementedr   others     r   __eq__zMeasureBase.__eq__Z   s+    eT^,, 	"=EN22!!r   c                 *    t          | j                  S r   )hashr*   r#   s    r   __hash__zMeasureBase.__hash__`       DM"""r   c                 Z    t          || j                  r| j        |j        k     S t          S r   r7   r9   s     r   __lt__zMeasureBase.__lt__c   s+    eT^,, 	"=5>11!!r   c                     t          || j                  r( | j        dd| j        i| j        | j        |j        z   iS t          ddt          |           iz            )Nr   &%(class)s must be added with %(class)sclass r   r   r   r   r*   	TypeErrorr   r9   s     r   __add__zMeasureBase.__add__k   s    eT^,, 	!4>  !/%(FH  
 8G[QUEVEV;WW  r   c                     t          || j                  r| xj        |j        z  c_        | S t          ddt	          |           iz            )NrC   rD   r   r   r*   rG   r   r9   s     r   __iadd__zMeasureBase.__iadd__v   sU    eT^,, 	MMU^+MMK8G[QUEVEV;WW  r   c                     t          || j                  r( | j        dd| j        i| j        | j        |j        z
  iS t          ddt          |           iz            )Nr   +%(class)s must be subtracted from %(class)srD   rE   rF   r9   s     r   __sub__zMeasureBase.__sub__   s    eT^,, 		!4>  !/%(FH  
 =K--./  r   c                     t          || j                  r| xj        |j        z  c_        | S t          ddt	          |           iz            )NrM   rD   rJ   r9   s     r   __isub__zMeasureBase.__isub__   sW    eT^,, 	MMU^+MMK=K--./  r   c                     t          |t                    r# | j        dd| j        i| j        | j        |z  iS t          ddt          |           iz            )Nr   (%(class)s must be multiplied with numberrD   rE   r   NUMERIC_TYPESr   r   r   r*   rG   r   r9   s     r   __mul__zMeasureBase.__mul__   s}    e]++ 		!4>  !/%(=?  
 :K--./  r   c                     t          |t                    r| xj        t          |          z  c_        | S t	          ddt          |           iz            )NrR   rD   r   rT   r*   floatrG   r   r9   s     r   __imul__zMeasureBase.__imul__   sY    e]++ 	MMU5\\)MMK:K--./  r   c                     | |z  S r   rE   r9   s     r   __rmul__zMeasureBase.__rmul__   s    e|r   c                     t          || j                  r| j        |j        z  S t          |t                    r# | j        dd| j        i| j        | j        |z  iS t          ddt          |           iz            )Nr   z2%(class)s must be divided with number or %(class)srD   rE   )r   r   r*   rT   r   r   rG   r   r9   s     r   __truediv__zMeasureBase.__truediv__   s    eT^,, 	2=5>11e]++ 		!4>  !/%(=?  
 DK--./  r   c                     t          |t                    r| xj        t          |          z  c_        | S t	          ddt          |           iz            )Nz%%(class)s must be divided with numberrD   rW   r9   s     r   __itruediv__zMeasureBase.__itruediv__   sW    e]++ 	MMU5\\)MMK77KPTDUDU:VV  r   c                 *    t          | j                  S r   )boolr*   r#   s    r   __bool__zMeasureBase.__bool__   r?   r   c                    d}| j         }|                                D ]\  }}t          |t                    st          |          }|| j        v r|| j        |         |z  z  }|}H|| j        v r#| j        |         }|| j        |         |z  z  }|}t|                                }|| j        v r|| j        |         |z  z  }|}|| j        v r#| j        |         }|| j        |         |z  z  }|}t          d|z            ||fS )z|
        Return the unit value and the default units specified
        from the given keyword arguments dictionary.
        g        r(   )	r   itemsr   rX   r)   ALIASlowerLALIASr+   )r   r   valr   unitr   urf   s           r   r   zMeasureBase.default_units   s5   
 )!<<>> 	I 	IKD%eU++ %etz!!tz$'%//###Jt$tz!}u,, 

DJ&&4:e,u44C#(LLdk))E*A4:a=500C#$LL()@4)GHHHL  r   c                     |                                 }|| j        v r|S || j        v r|S || j        v r| j        |         S t          d|           )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: )rf   r)   rg   r+   )clsunit_strrf   s      r   unit_attnamezMeasureBase.unit_attname   sh       sy  OciLcj  :e$$ !Ax!A!ABBBr   r   )r   
__module____qualname__r   re   r)   rg   r    r$   r&   propertyr*   r-   r2   r5   r;   r>   rA   rH   rK   rN   rP   rU   rY   r[   r]   r_   rb   r   classmethodrn   rE   r   r   r   r   3   s       MEEF. . . .1 1 11 1 1 x}55HA A A
 
 
Q Q Q
" " "# # #" " "	 	 	  
 
 
  
 
 
        # # #! ! !< C C [C C Cr   r   c                      e Zd ZdZi dddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3Zi d4dd5dd6d7d8d9d:d9d;dd<dd=d>d?d>d@dAdBdAdCdDdEdFdGddHd
dIddJdi dKddLddMddNddOddPddQddRddSddTddUd dVd"dWdXdYdZd[d\d]d^d_d`d`d"dadbZdc e                                D             Zdd ZdeS )fr   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_searsrt   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                 >    i | ]\  }}|                                 |S rE   rf   .0kvs      r   
<dictcomp>zDistance.<dictcomp>E  &    555tq!aggii555r   c                 V   t          || j                  r7t          ddt          | j        z   it          | j        z   | j        |j        z  iS t          |t                    r# | j        dd| j        i| j        | j        |z  iS t          ddt          | j                  iz            )Nr   z;%(distance)s must be multiplied with number or %(distance)sdistancerE   )
r   r   r   AREA_PREFIXr   r   r*   rT   rG   r   r9   s     r   rU   zDistance.__mul__G  s    eT^,, 	  (4+==!33dmen6TV   }-- 	!4>  !/%(=?  
 MDN ; ;  r   N)	r   ro   rp   r   r)   re   rd   rg   rU   rE   r   r   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 65u{{}}555F    r   r   c                      e Zd Zeej        z   Zd ej                                        D             ddiz  Zd ej                                        D             ddiz  Zd e                                D             Z	d Z
dS )	r   c                 2    i | ]\  }}t           ||d z  S )   r   r   s      r   r   zArea.<dictcomp>^  s+    PPPA{{AA&1PPPr   hai'  c                 ,    i | ]\  }}|t           |S rE   r   r   s      r   r   zArea.<dictcomp>a  s'    MMMdaQ++qq)MMMr   hectarec                 >    i | ]\  }}|                                 |S rE   r   r   s      r   r   zArea.<dictcomp>e  r   r   c                     t          |t                    r# | j        dd| j        i| j        | j        |z  iS t          ddt          |           iz            )Nr   z%%(class)s must be divided by a numberrD   rE   rS   r9   s     r   r]   zArea.__truediv__g  s{    e]++ 	!4>  !/%(=?  
 77KPTDUDU:VV  r   N)r   ro   rp   r   r   r   r)   rd   re   rg   r]   rE   r   r   r   r   [  s        ("88MPP9M9M9O9OPPPeT E NMhn6J6J6L6LMMM4Q E 65u{{}}555F	 	 	 	 	r   r   N)__doc__decimalr   	functoolsr   __all__intrX   rT   r   r   r   r   r   r   r   rE   r   r   <module>r      s  :        $ $ $ $ $ $
(
(
(eW%M M M AC AC AC AC AC AC AC ACH` ` ` ` `{ ` ` `F    ;   2 r   