Ë
    ¹ûàg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y)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                 ól   — | j                   t        k(  r| j                  S | j                   j                  S ©N)Ú	__class__ÚtypeÚ__name__)Úobjs    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/contrib/gis/measure.pyÚpretty_namer   /   s&   € ØŸ=™=¬DÒ0ˆ3�<‰<ÐL°c·m±m×6LÑ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y)ÚMeasureBaseNc                 óš   — | j                  |«      \  }| _        t        | | j                  |«       |rt	        |t
        «      r|| _        y y y r   )Údefault_unitsÚ_default_unitÚsetattrÚSTANDARD_UNITÚ
isinstanceÚstr)ÚselfÚdefault_unitÚkwargsÚvalues       r   Ú__init__zMeasureBase.__init__:   sG   € Ø$(×$6Ñ$6°vÓ$>Ñ!ˆˆtÔ!Ü��d×(Ñ(¨%Ô0ÙœJ |´SÔ9Ø!-ˆDÕð :ˆ<r   c                 ó.   — t        | | j                  «      S r   )Úgetattrr   ©r   s    r   Ú_get_standardzMeasureBase._get_standard@   s   € Ü�t˜T×/Ñ/Ó0Ð0r   c                 ó2   — t        | | j                  |«       y r   )r   r   )r   r   s     r   Ú_set_standardzMeasureBase._set_standardC   s   € Ü��d×(Ñ(¨%Õ0r   c                 ór   — || 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                 óf   — t        | «      ›d| j                  ›dt        | | j                  «      ›d�S )Nú(ú=ú))r   r   r"   r#   s    r   Ú__repr__zMeasureBase.__repr__N   s-   € ä˜ÕØ×ÓÜ�D˜$×,Ñ,Õ-ð
ð 	
r   c                 óL   — t        | | j                  «      ›d| j                  ›�S )Nú )r"   r   r#   s    r   Ú__str__zMeasureBase.__str__U   s    € Ü! $¨×(:Ñ(:Õ;¸T×=OÒ=OÐPÐPr   c                 ól   — 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¡NÑ2Ð2ä!Ð!r   c                 ó,   — t        | j                  «      S r   )Úhashr*   r#   s    r   Ú__hash__zMeasureBase.__hash__`   ó   € Ü�D—M‘MÓ"Ð"r   c                 ól   — 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                  «      rA | 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   ss   € Ü�e˜TŸ^™^Ô,Ø!�4—>‘>ñ Ø!×/Ñ/ðà×%Ñ%¨¯©¸¿¹Ñ(FÐHñð ô
 Ø8¸GÄ[ÐQUÓ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   sG   € Ü�e˜TŸ^™^Ô,Ø�MŠM˜UŸ^™^Ñ+�MØˆKäØ8¸GÄ[ÐQUÓEVÐ;WÑWóð r   c                 óâ   — t        || j                  «      rA | 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__   su   € Ü�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__‹   sI   € Ü�e˜TŸ^™^Ô,Ø�MŠM˜UŸ^™^Ñ+�MØˆKäØ=ØœK¨Ó-Ð.ñ/óð r   c                 óÂ   — t        |t        «      r7 | 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__•   sm   € Ü�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__¡   sE   € Ü�eœ]Ô+Ø�MŠMœU 5›\Ñ)�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        «      r7 | 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Ÿ^™^Ô,Ø—=‘= 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__¼   sC   € Ü�eœ]Ô+Ø�MŠMœU 5›\Ñ)�MØˆKäØ7¸7ÄKÐPTÓDUÐ:VÑVóð r   c                 ó,   — t        | j                  «      S r   )Úboolr*   r#   s    r   Ú__bool__zMeasureBase.__bool__Å   r?   r   c                 ó2  — d}| j                   }|j                  «       D ]ó  \  }}t        |t        «      st        |«      }|| j                  v r|| j                  |   |z  z  }|}ŒG|| j
                  v r'| j
                  |   }|| j                  |   |z  z  }|}Œ||j                  «       }|| 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È   s)  € ð
 ˆØ×)Ñ)ˆØ!Ÿ<™<›>ò 	I‰KˆD�%Ü˜e¤UÔ+Ü˜e›�Ø�t—z‘zÑ!Ø�t—z‘z $Ñ'¨%Ñ/Ñ/�Ø#‘Ø˜Ÿ™Ñ#Ø—J‘J˜tÑ$�Ø�t—z‘z !‘} uÑ,Ñ,�Ø ‘àŸ
™
›�Ø˜DŸJ™JÑ&Ø˜4Ÿ:™: eÑ,¨uÑ4Ñ4�CØ#(‘LØ˜dŸk™kÑ)ØŸ™ EÑ*�AØ˜4Ÿ:™: a™=¨5Ñ0Ñ0�CØ#$‘Lä(Ð)@À4Ñ)GÓHÐHð)	Ið* �LÐ Ð r   c                 ó¸   — |j                  «       }|| 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æ   s`   € ð —‘Ó ˆØ�s—y‘yÑ ØˆOØ�c—i‘iÑØˆLØ�c—j‘jÑ Ø—:‘:˜eÑ$Ð$ä Ð#6°x°jÐ!AÓ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ñ ˜ }Ó5€HòAò
òQò
"ò#ò"ò	òò
òò
òòòòò#ò!ð< ñ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ej                  «       D � ��ci c]  \  }}|j                  «       |“Œ c}}} Zdc„ Z	ydc c}}} w )er   Ú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                 ó’  — t        || j                  «      rHt        ddt        | j                  z   it        | j
                  z   | j                  |j                  z  i¤ŽS t        |t        «      r7 | 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Ñ3°d·m±mÀeÇnÁnÑ6TÐVñð ô ˜œ}Ô-Ø!�4—>‘>ñ Ø!×/Ñ/ðà×%Ñ%¨¯©¸Ñ(=Ð?ñð ô
 ØMà¤¨D¯N©NÓ ;ðñóð r   N)
r   ro   rp   r   r)   re   rd   rf   rg   rU   )Ú.0ÚkÚvs   000r   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 (-§{¡{£}×5Ð5™t˜q !ˆa�g‰g‹i˜‰lÔ5€Fóùô 6s   ÃC6r   c            	       óÈ  — e Zd Zeej
                  z   Zej                  j                  «       D � ���ci c]  \  }}t        ›|›�|dz  “Œ c}}}} ddiz  Zej                  j                  «       D � ���ci c]  \  }}|t        ›|›�“Œ c}}}} ddiz  Zej                  «       D � ��ci c]  \  }}|j                  «       |“Œ c}}} Z
d„ Zyc c}}}} w c c}}}} w c c}}} w )r   é   Úhai'  Úhectarec                 óÂ   — t        |t        «      r7 | 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  sk   € Ü�eœ]Ô+Ø!�4—>‘>ñ Ø!×/Ñ/ðà×%Ñ%¨¯©¸Ñ(=Ð?ñð ô
 Ø7¸7ÄKÐPTÓDUÐ:VÑVóð r   N)r   ro   rp   r£   r   r   r)   rd   re   rf   rg   r]   )r¤   r¥   r¦   r£   s   0000r   r   r   [  sÓ   „ Ø (×"8Ñ"8Ñ8€Mà9A¿¹×9MÑ9MÓ9O×PÑP±°°A•{¡AÐ&¨¨1©Ñ,ÕPØˆeðTñ €Eð 7?·n±n×6JÑ6JÓ6L×MÑM©d¨a°ˆQ�+¡qÐ)Ñ)ÕMØ�4ðQñ €Eð (-§{¡{£}×5Ð5™t˜q !ˆa�g‰g‹i˜‰lÔ5€Fó	ùõ Qùõ Nùô 6s   ³C
Á5C
Â)Cr   N)Ú__doc__Údecimalr   Ú	functoolsr   Ú__all__ÚintrX   rT   r£   r   r   r   r   r   r   rE   r   r   ú<module>r±      su   ðñ:õ Ý $â
(€à�e˜WÐ%€Ø€òMð ÷ACð ACó ðACôH`ˆ{ô `ôFˆ;ô ð2 €Ø�r   