§
    ¤”jÚ0  ã                   ó¨   — 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    úi/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/contrib/gis/measure.pyÚpretty_namer   /   s   € Øœ=­DÒ0Ð0ˆ3Œ<ˆ<°c´mÔ6LÐ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Ò$6°vÑ$>Ô$>Ñ!ˆˆ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   € Ý�t˜TÔ/Ñ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å Ð!8¸4Ñ!?Ñ@Ô@Ð@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+   € Ý�e˜Tœ^Ñ,Ô,ð 	"Ø”= E¤NÒ2Ð2å!Ð!r   c                 ó*   — t          | j        ¦  «        S r   )Úhashr*   r#   s    r   Ú__hash__zMeasureBase.__hash__`   ó   € Ý�D”MÑ"Ô"Ð"r   c                 óZ   — t          || j        ¦  «        r| j        |j        k     S t          S r   r7   r9   s     r   Ú__lt__zMeasureBase.__lt__c   s+   € Ý�e˜Tœ^Ñ,Ô,ð 	"Ø”= 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   € Ý�e˜Tœ^Ñ,Ô,ð 	Ø!�4”>ð ð Ø!Ô/ðàÔ%¨¬¸¼Ñ(FÐHðð ð õ
 Ø8¸GÅ[ÐQUÑEVÔEVÐ;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   € Ý�e˜Tœ^Ñ,Ô,ð 	ØˆMŒM˜Uœ^Ñ+ˆMŒMØˆKåØ8¸GÅ[ÐQUÑEVÔEVÐ;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�   € Ý�e˜Tœ^Ñ,Ô,ð 		Ø!�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   € Ý�e˜Tœ^Ñ,Ô,ð 	ØˆMŒM˜Uœ^Ñ+ˆMŒMØˆ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�]Ñ+Ô+ð 	ØˆMŒM�U 5™\œ\Ñ)ˆMŒMØˆ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    € Ý�e˜Tœ^Ñ,Ô,ð 	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�]Ñ+Ô+ð 	ØˆMŒM�U 5™\œ\Ñ)ˆMŒMØˆKåØ7¸7ÅKÐPTÑDUÔDUÐ: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‰KˆD�%Ý˜e¥UÑ+Ô+ð %Ý˜e™œ�Ø�t”zÐ!Ð!Ø�t”z $Ô'¨%Ñ/Ñ/�Ø#��Ø˜œÐ#Ð#Ø”J˜tÔ$�Ø�t”z !”} uÑ,Ñ,�Ø ��àŸ
š
™œ�Ø˜DœJÐ&Ð&Ø˜4œ: eÔ,¨uÑ4Ñ4�CØ#(�L�LØ˜dœkÐ)Ð)Øœ EÔ*�AØ˜4œ: aœ=¨5Ñ0Ñ0�CØ#$�L�Lå(Ð)@À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   € ð —’Ñ Ô ˆØ�s”yÐ Ð ØˆOØ�c”iÐÐØˆLØ�c”jÐ Ð Ø”:˜eÔ$Ð$å Ð!A°xÐ!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Ô5€Hð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_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_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Ð5™t˜q !ˆa�gŠg‰iŒi˜Ð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Ü   € Ý�e˜Tœ^Ñ,Ô,ð 	Ýð ð Ý(¨4Ô+=Ñ=ðå Ô!3Ñ3°d´mÀeÄnÑ6TÐVðð ð õ ˜�}Ñ-Ô-ð 	Ø!�4”>ð ð Ø!Ô/ðàÔ%¨¬¸Ñ(=Ð?ðð ð õ
 ØMà¥¨D¬NÑ ;Ô ;ðññô ð 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!ð !ð !€EðH&Ø�dð&à�ð&ð 	�&ð&ð 	�Tð	&ð
 	�Tð&ð 	�ð&ð 	�ð&ð 	�dð&ð 	�dð&ð 	�dð&ð 	�dð&ð 	�ð&ð 	�ð&ð 	(Ð)?ð&ð 	%Ð&;ð&ð  	/Ð0Oð!&ð" 	$ \ð#&ð &ð$ 	˜ð%&ð& 	$ \ð'&ð( 	˜ð)&ð* 	˜ð+&ð, 	˜ð-&ð. 	˜.ð/&ð0 	˜ð1&ð2 	 ð3&ð4 	�yð5&ð6 	˜jð7&ð8 	˜?ð9&ð: 	�{ð;&ð< 	˜ð=&ð> 	˜ð?&ð@ 	˜ðA&ðB 	˜gðC&ðD 	˜+ðE&ð &ðF !Ø$Ø"ðK&ð &ð &€EðN 6Ð5 u§{¢{¡}¤}Ð5Ñ5Ô5€Fðð ð ð ð r   r   c                   óð   — e Zd Zeej        z   Zd„ ej                             ¦   «         D ¦   «         Zd„ ej                             ¦   «         D ¦   «         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•{�{ A AÐ&¨¨1©ÐPÐPÐPr   c                 ó,   — i | ]\  }}|t           ›|›�“ŒS rE   r¯   r£   s      r   r§   zArea.<dictcomp>_  s'   € ÐMÐMÐM©d¨a°ˆQ�+˜+ q qÐ)ÐMÐMÐMr   c                 ó>   — i | ]\  }}|                      ¦   «         |“ŒS rE   r¢   r£   s      r   r§   zArea.<dictcomp>`  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__b  s{   € Ý�e�]Ñ+Ô+ð 	Ø!�4”>ð ð Ø!Ô/ðàÔ%¨¬¸Ñ(=Ð?ðð ð õ
 Ø7¸7ÅKÐPTÑDUÔDUÐ:VÑVñô ð r   N)r   ro   rp   r«   r   r   r)   rd   re   rg   r]   rE   r   r   r   r   [  s�   € € € € € Ø (Ô"8Ñ8€MàPÐP¸¼×9MÒ9MÑ9OÔ9OÐPÑPÔP€EØMÐM°h´n×6JÒ6JÑ6LÔ6LÐMÑMÔM€EØ5Ð5 u§{¢{¡}¤}Ð5Ñ5Ô5€Fð	ð 	ð 	ð 	ð 	r   r   N)Ú__doc__Údecimalr   Ú	functoolsr   Ú__all__ÚintrX   rT   r«   r   r   r   r   r   r   rE   r   r   ú<module>r¸      s  ðð:ð ð Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $à
(Ð
(Ð
(€à�e˜WÐ%€Ø€ðMð Mð Mð ðACð ACð ACð ACð ACñ ACô ACñ „ðACðH`ð `ð `ð `ð `ˆ{ñ `ô `ð `ðFð ð ð ð ˆ;ñ ô ð ð( €Ø€€€r   