3
g&/                 @   s|   d Z ddlmZ ddlmZ ddddg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DistanceZsq_c             C   s   | j tkr| jS | j jS )N)	__class__type__name__)obj r   X/var/www/tester-filtro-web/env/lib/python3.6/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   s6   | j |\}| _t| | j| |r2t|tr2|| _d S )N)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 )N)getattrr   )r   r   r   r   _get_standard@   s    zMeasureBase._get_standardc             C   s   t | | j| d S )N)r   r   )r   r   r   r   r   _set_standardC   s    zMeasureBase._set_standardc             C   s*   || j kr| j| j |  S td| d S )Nz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__Q   s    zMeasureBase.__str__c             C   s    t || jr| j|jkS tS d S )N)r   r   r   NotImplemented)r   otherr   r   r   __eq__V   s    zMeasureBase.__eq__c             C   s
   t | jS )N)hashr   )r   r   r   r   __hash__\   s    zMeasureBase.__hash__c             C   s    t || jr| j|jk S tS d S )N)r   r   r   r%   )r   r&   r   r   r   __lt___   s    zMeasureBase.__lt__c             C   sH   t || jr0| jf d| ji| j| j|j iS tddt| i d S )Nr   z&%(class)s must be added with %(class)sclass)r   r   r   r   r   	TypeErrorr   )r   r&   r   r   r   __add__g   s
    zMeasureBase.__add__c             C   s8   t || jr |  j|j7  _| S tddt| i d S )Nz&%(class)s must be added with %(class)sr+   )r   r   r   r,   r   )r   r&   r   r   r   __iadd__p   s    zMeasureBase.__iadd__c             C   sH   t || jr0| jf d| ji| j| j|j iS tddt| i d S )Nr   z+%(class)s must be subtracted from %(class)sr+   )r   r   r   r   r   r,   r   )r   r&   r   r   r   __sub__w   s
    zMeasureBase.__sub__c             C   s8   t || jr |  j|j8  _| S tddt| i d S )Nz+%(class)s must be subtracted from %(class)sr+   )r   r   r   r,   r   )r   r&   r   r   r   __isub__   s    zMeasureBase.__isub__c             C   sD   t |tr,| jf d| ji| j| j| iS tddt| i d S )Nr   z(%(class)s must be multiplied with numberr+   )r   NUMERIC_TYPESr   r   r   r   r,   r   )r   r&   r   r   r   __mul__   s
    
zMeasureBase.__mul__c             C   s8   t |tr |  jt|9  _| S tddt| i d S )Nz(%(class)s must be multiplied with numberr+   )r   r1   r   floatr,   r   )r   r&   r   r   r   __imul__   s    
zMeasureBase.__imul__c             C   s   | | S )Nr   )r   r&   r   r   r   __rmul__   s    zMeasureBase.__rmul__c             C   s\   t || jr| j|j S t |trD| jf d| ji| j| j| iS tddt| i d S )Nr   z2%(class)s must be divided with number or %(class)sr+   )r   r   r   r1   r   r   r,   r   )r   r&   r   r   r   __truediv__   s    
zMeasureBase.__truediv__c             C   s8   t |tr |  jt|  _| S tddt| i d S )Nz%%(class)s must be divided with numberr+   )r   r1   r   r3   r,   r   )r   r&   r   r   r   __itruediv__   s    
zMeasureBase.__itruediv__c             C   s
   t | jS )N)boolr   )r   r   r   r   __bool__   s    zMeasureBase.__bool__c             C   s   d}| j }x|j D ]\}}t|ts.t|}|| jkrP|| j| | 7 }|}q|| jkr|| j| }|| j| | 7 }|}q|j }|| jkr|| j| | 7 }|}q|| jkr| j| }|| j| | 7 }|}qtd| qW ||fS )z|
        Return the unit value and the default units specified
        from the given keyword arguments dictionary.
        g        zUnknown unit type: %s)	r   itemsr   r3   r   ALIASlowerLALIASr    )r   r   valr   unitr   ur<   r   r   r   r      s,    






zMeasureBase.default_unitsc             C   sH   |j  }|| jkr|S || jkr$|S || jkr8| j| S td| dS )z
        Retrieve the unit attribute name for the given unit string.
        For example, if the given unit string is 'metre', return 'm'.
        Raise an exception if an attribute cannot be found.
        z2Could not find a unit keyword associated with "%s"N)r<   r   r=   	Exception)clsZunit_strr<   r   r   r   unit_attname   s    



zMeasureBase.unit_attname)N)r
   
__module____qualname__r   r;   r   r=   r   r   r   propertyr   r"   r#   r$   r'   r)   r*   r-   r.   r/   r0   r2   r4   r5   r6   r7   r9   r   classmethodrC   r   r   r   r   r   3   s4   

			r   c            &   @   s   e Zd ZdZ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" Zd#d$d%d&d&ddd'd'd(d(d)d*d+d,d-d.d.d/d/d0d1d2d3d$d4d5d6d7d8d9d:d;d<d<d7d=d>%Zd?d@ ej D ZdAdB ZdCS )Dr   mg=,Ԛ4@gl4@gs<G4@g|1"u4@gᕪQ4@g4@g{Gz?gGՁ?glGvB?g)hć?g#Zп?gB?gׁ?gL7A`%i@g]A ?gäց?g/!B?g
F%u?g     @@g8~߿?g,ݿ?gܿ?g      ?gL7A`%@gMbP?g     @g~j@g=,Ԛ@g\NtB?g`jځ?gư>gB?) chainchain_benoitchain_searsbritish_chain_benoitbritish_chain_searsbritish_chain_sears_truncatedcm
british_ft
british_yd	clarke_ftclarke_linkZfathomftfurlonggerman_mgold_coast_ft	indian_ydinchkmlinklink_benoit
link_searsrH   mimmnmnm_ukZrodsears_yd	survey_ftumydrO   rT   rY   rZ   rd   r_   r^   re   rL   rM   rN   rP   rQ   rR   rS   rJ   rK   rU   rV   rW   rX   r\   r]   r`   ra   rc   rb   )%Z
centimeterZfootZinchesZ	kilometerZ	kilometreZmeterZmetreZ
micrometerZ
micrometreZ
millimeterZ
millimetreZmileZyardz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)zLink (Sears)zNautical MilezNautical Mile (UK)zUS survey footz	U.S. FootzYard (Indian)zYard (Sears)c             C   s   i | ]\}}||j  qS r   )r<   ).0kvr   r   r   
<dictcomp>,  s    zDistance.<dictcomp>c             C   s|   t || jr6tf dt| j it| j | j|j iS t |trb| jf d| ji| j| j| iS tddt	| ji d S )Nr   z;%(distance)s must be multiplied with number or %(distance)sZdistance)
r   r   r   AREA_PREFIXr   r   r   r1   r,   r   )r   r&   r   r   r   r2   .  s    

zDistance.__mul__N)	r
   rD   rE   r   r   r;   r:   r=   r2   r   r   r   r   r      s   c               @   sX   e Zd Zeej Zdd ejj D Zdd ejj D Zdd ej D Z	dd Z
dS )r   c             C   s"   i | ]\}}|d  dt |f qS )   z%s%s)rj   )rf   rg   rh   r   r   r   ri   B  s    zArea.<dictcomp>c             C   s   i | ]\}}d t |f |qS )z%s%s)rj   )rf   rg   rh   r   r   r   ri   C  s    c             C   s   i | ]\}}||j  qS r   )r<   )rf   rg   rh   r   r   r   ri   D  s    c             C   sD   t |tr,| jf d| ji| j| j| iS tddt| i d S )Nr   z%%(class)s must be divided by a numberr+   )r   r1   r   r   r   r   r,   r   )r   r&   r   r   r   r6   F  s
    
zArea.__truediv__N)r
   rD   rE   rj   r   r   r   r:   r;   r=   r6   r   r   r   r   r   ?  s
   
N)__doc__decimalr   	functoolsr   __all__intr3   r1   rj   r   r   r   r   r   r   r   r   r   r   <module>%   s   
 -`