o
    þÞh1  ã                   @   sx   d Z ddlmZ ddlmZ g d¢ZeeefZdZ	dd„ Z
eG dd	„ d	ƒƒZG d
d„ deƒZG d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                 C   s   | j tkr| jS | j jS ©N)Ú	__class__ÚtypeÚ__name__)Úobj© r   úZ/var/www/html/premium_crap/venv/lib/python3.10/site-packages/django/contrib/gis/measure.pyÚpretty_name/   s   r   c                   @   sÔ   e Zd ZdZi Zi Zi Zd,dd„Zdd„ Zdd„ Z	e
ee	ƒZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zed*d+„ ƒZdS )-ÚMeasureBaseNc                 K   s>   |   |¡\}| _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Úvaluer   r   r   Ú__init__:   s
   
ÿzMeasureBase.__init__c                 C   s   t | | jƒS r	   )Úgetattrr   ©r   r   r   r   Ú_get_standard@   s   zMeasureBase._get_standardc                 C   s   t | | j|ƒ d S r	   )r   r   )r   r   r   r   r   Ú_set_standardC   s   zMeasureBase._set_standardc                 C   s&   || j v r| j| j |  S td| ƒ‚)NúUnknown unit type: %s)ÚUNITSÚstandardÚAttributeError)r   Únamer   r   r   Ú__getattr__H   s   
zMeasureBase.__getattr__c                 C   s   dt | ƒ| jt| | jƒf S )Nz	%s(%s=%s))r   r   r   r   r   r   r   Ú__repr__N   s
   
ýzMeasureBase.__repr__c                 C   s   dt | | jƒ| jf S )Nz%s %s)r   r   r   r   r   r   Ú__str__U   s   zMeasureBase.__str__c                 C   s   t || jƒr| j|jkS tS r	   ©r   r
   r#   ÚNotImplemented©r   Úotherr   r   r   Ú__eq__Z   ó   zMeasureBase.__eq__c                 C   ó
   t | jƒS r	   )Úhashr#   r   r   r   r   Ú__hash__`   ó   
zMeasureBase.__hash__c                 C   s   t || jƒr| j|jk S tS r	   r)   r+   r   r   r   Ú__lt__c   r.   zMeasureBase.__lt__c                 C   sD   t || jƒr| jdd| ji| j| j|j i¤ŽS tddt| ƒi ƒ‚)Nr   ú&%(class)s must be added with %(class)sÚclassr   ©r   r
   r   r   r#   Ú	TypeErrorr   r+   r   r   r   Ú__add__k   s   ÿþÿzMeasureBase.__add__c                 C   s4   t || jƒr|  j|j7  _| S tddt| ƒi ƒ‚)Nr4   r5   ©r   r
   r#   r7   r   r+   r   r   r   Ú__iadd__v   s   ÿzMeasureBase.__iadd__c                 C   sD   t || jƒr| jdd| ji| j| j|j i¤ŽS tddt| ƒi ƒ‚)Nr   ú+%(class)s must be subtracted from %(class)sr5   r   r6   r+   r   r   r   Ú__sub__   s   ÿþ
ÿÿzMeasureBase.__sub__c                 C   s4   t || jƒr|  j|j8  _| S tddt| ƒi ƒ‚)Nr;   r5   r9   r+   r   r   r   Ú__isub__‹   s   
ÿÿzMeasureBase.__isub__c                 C   s@   t |tƒr| jdd| ji| j| j| i¤ŽS tddt| ƒi ƒ‚)Nr   ú(%(class)s must be multiplied with numberr5   r   ©r   ÚNUMERIC_TYPESr
   r   r   r#   r7   r   r+   r   r   r   Ú__mul__•   s   
ÿþ
ÿÿzMeasureBase.__mul__c                 C   s4   t |tƒr|  jt|ƒ9  _| S tddt| ƒi ƒ‚)Nr>   r5   ©r   r@   r#   Úfloatr7   r   r+   r   r   r   Ú__imul__¡   s   

ÿÿzMeasureBase.__imul__c                 C   s   | | S r	   r   r+   r   r   r   Ú__rmul__«   s   zMeasureBase.__rmul__c                 C   sX   t || jƒr| j|j S t |tƒr"| jdd| ji| j| j| i¤ŽS tddt| ƒi ƒ‚)Nr   z2%(class)s must be divided with number or %(class)sr5   r   )r   r
   r#   r@   r   r   r7   r   r+   r   r   r   Ú__truediv__®   s   
ÿþ
ÿÿzMeasureBase.__truediv__c                 C   s4   t |tƒr|  jt|ƒ  _| S tddt| ƒi ƒ‚)Nz%%(class)s must be divided with numberr5   rB   r+   r   r   r   Ú__itruediv__¼   s   
ÿzMeasureBase.__itruediv__c                 C   r/   r	   )Úboolr#   r   r   r   r   Ú__bool__Å   r2   zMeasureBase.__bool__c                 C   sä   d}| j }| ¡ D ]d\}}t|tƒst|ƒ}|| jv r'|| j| | 7 }|}q	|| jv r=| j| }|| j| | 7 }|}q	| ¡ }|| jv rR|| j| | 7 }|}q	|| jv rh| j| }|| j| | 7 }|}q	td| ƒ‚||fS )z|
        Return the unit value and the default units specified
        from the given keyword arguments dictionary.
        g        r!   )	r   Úitemsr   rC   r"   ÚALIASÚlowerÚLALIASr$   )r   r   Úvalr   Úunitr   ÚurL   r   r   r   r   È   s,   






zMeasureBase.default_unitsc                 C   sF   |  ¡ }|| 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: )rL   r"   rM   r$   )ÚclsÚunit_strrL   r   r   r   Úunit_attnameæ   s   



zMeasureBase.unit_attnamer	   )r   Ú
__module__Ú__qualname__r   rK   r"   rM   r   r   r    Úpropertyr#   r&   r'   r(   r-   r1   r3   r8   r:   r<   r=   rA   rD   rE   rF   rG   rI   r   ÚclassmethodrS   r   r   r   r   r   3   s8    

	

	r   c                   @   s˜  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dcdd„ e ¡ D ƒZdedf„ ZdgS )hr   ÚmÚchaing=,Ôšæ4@Úchain_benoitgðÂÖlå4@Úchain_searsgsÕ<Gä4@Úbritish_chain_benoitg|1"uå4@Úbritish_chain_searsgá•ªQä4@Úbritish_chain_sears_truncatedg�œ¡¸ã4@Úcmg{®Gáz„?Ú
british_ftgG†¤Õ�Ó?Ú
british_ydglGÉvÀBí?Ú	clarke_ftg)h³cÌ�Ó?Úclarke_linkg#¥ZÐ¿É?ÚfathomgûËîÉÃBý?Úftgý‡ôÛ×�Ó?ÚfurlonggL7‰A`%i@Úgerman_mgŽ]ÈA ð?Úgold_coast_ftgªÔÃ¤Ö�Ó?Ú	indian_ydg/Ê!µÀBí?g¦
F%uš?g     @�@g 8€~ß¿É?g¸,ôûÝ¿É?g³¯áŽÜ¿É?g      ð?gL7‰A`%™@gü©ñÒMbP?g     ðœ@gÛù~j¼ôœ@g=,Ôšæ@g\ÜNtÀBí?gÏ`‚jÚ�Ó?g�íµ ÷Æ°>gûËîÉÃBí?)ÚinchÚkmÚlinkÚlink_benoitÚ
link_searsrX   ÚmiÚmmÚnmÚnm_ukÚrodÚsears_ydÚ	survey_ftÚumÚydÚ
centimeterÚfootÚinchesrj   Ú	kilometerrk   Ú	kilometreÚmeterÚmetreÚ
micrometerrv   Ú
micrometreÚ
millimeterrp   Ú
millimetreÚmilero   Úyardrw   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)rm   zLink (Sears)rn   zNautical Milerq   zNautical Mile (UK)rr   zUS survey footru   rt   )z	U.S. FootzYard (Indian)zYard (Sears)c                 C   ó   i | ]	\}}|  ¡ |“qS r   ©rL   ©Ú.0ÚkÚvr   r   r   Ú
<dictcomp>E  ó    zDistance.<dictcomp>c                 C   sx   t || jƒrtddt| j it| j | j|j i¤ŽS t |tƒr1| jdd| ji| j| j| i¤ŽS tddt	| jƒi ƒ‚)Nr   z;%(distance)s must be multiplied with number or %(distance)sÚdistancer   )
r   r
   r   ÚAREA_PREFIXr   r   r#   r@   r7   r   r+   r   r   r   rA   G  s$   ÿþ
ÿþ
ÿÿÿzDistance.__mul__N)	r   rT   rU   r   r"   rK   rJ   rM   rA   r   r   r   r   r   ø   s    ÿþýüûúùø	÷
öõôóòñðïà$ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Û'r   c                   @   sh   e Zd Zeej Zdd„ ej ¡ D ƒddiB Zdd„ ej ¡ D ƒddiB Zdd„ e ¡ D ƒZ	dd	„ Z
d
S )r   c                 C   s"   i | ]\}}d t |f |d “qS )ú%s%sé   ©rŽ   r‡   r   r   r   r‹   ^  s   " zArea.<dictcomp>Úhai'  c                 C   s   i | ]\}}|d t |f “qS )r�   r‘   r‡   r   r   r   r‹   a  s    Úhectarec                 C   r…   r   r†   r‡   r   r   r   r‹   e  rŒ   c                 C   s@   t |tƒr| jdd| ji| j| j| i¤ŽS tddt| ƒi ƒ‚)Nr   z%%(class)s must be divided by a numberr5   r   r?   r+   r   r   r   rF   g  s   
ÿþÿzArea.__truediv__N)r   rT   rU   rŽ   r   r   r"   rJ   rK   rM   rF   r   r   r   r   r   [  s    
ÿÿr   N)Ú__doc__Údecimalr   Ú	functoolsr   Ú__all__ÚintrC   r@   rŽ   r   r   r   r   r   r   r   r   r   r   Ú<module>   s   	
 Ec