a
    s=ic                     @   s2   d Z ddlZddlZddlmZ G dd dZdS )zUnitDbl module.    N)_apic                	   @   s,  e Zd ZdZdddddddd	d
ZddddZdd Zdd Zdd Zdd Z	dd Z
dd ZeeejZeeejZeeejZeeejZeeejZeeejZdd ZeeejZeeejZdd Z ee ej!Z"ee ej!Z#dd  Z$d!d" Z%d#d$ Z&e'd*d&d'Z(d(d) Z)d%S )+UnitDblzClass UnitDbl in development.)gMbP?km)   r   )g8~߿?r   )r   rad)g:RFߑ?r   )r   sec)g      N@r   )i  r   )mr   Zmiler   degr   minhourZdistanceZangletime)r   r   r   c                 C   s0   t j| j|d}t||d  | _|d | _dS )aI  
        Create a new UnitDbl object.

        Units are internally converted to km, rad, and sec.  The only
        valid inputs for units are [m, km, mile, rad, deg, sec, min, hour].

        The field UnitDbl.value will contain the converted value.  Use
        the convert() method to get a specific type of units back.

        = ERROR CONDITIONS
        - If the input units are not in the allowed list, an error is thrown.

        = INPUT VARIABLES
        - value     The numeric value of the UnitDbl.
        - units     The string name of the units the value is in.
        unitsr   r   N)r   check_getitemallowedfloat_value_units)selfvaluer   data r   u/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/testing/jpl_units/UnitDbl.py__init__#   s    zUnitDbl.__init__c                 C   sR   | j |kr| jS tj| j|d}| j |d krDtd|  d| d| j|d  S )a  
        Convert the UnitDbl to a specific set of units.

        = ERROR CONDITIONS
        - If the input units are not in the allowed list, an error is thrown.

        = INPUT VARIABLES
        - units     The string name of the units to convert to.

        = RETURN VALUE
        - Returns the value of the UnitDbl in the requested units as a floating
          point number.
        r   r   z[Error trying to convert to different units.
    Invalid conversion requested.
    UnitDbl: z
    Units:   
r   )r   r   r   r   r   
ValueError)r   r   r   r   r   r   convert8   s    

zUnitDbl.convertc                 C   s   t t| j| jS )z*Return the absolute value of this UnitDbl.)r   absr   r   r   r   r   r   __abs__P   s    zUnitDbl.__abs__c                 C   s   t | j | jS )z*Return the negative value of this UnitDbl.r   r   r   r   r   r   r   __neg__T   s    zUnitDbl.__neg__c                 C   s
   t | jS )z$Return the truth value of a UnitDbl.)boolr   r   r   r   r   __bool__X   s    zUnitDbl.__bool__c                 C   s   |  |d || j|jS )zACheck that *self* and *rhs* share units; compare them using *op*.compare)checkSameUnitsr   r   oprhsr   r   r   _cmp\   s    zUnitDbl._cmpc                 C   s$   |  ||j t|| j|j| jS )zACheck that *self* and *rhs* share units; combine them using *op*.)r%   __name__r   r   r   r&   r   r   r   _binop_unit_unith   s    zUnitDbl._binop_unit_unitc                 C   s   t || j|| jS )z'Combine *self* and *scalar* using *op*.r    )r   r'   Zscalarr   r   r   _binop_unit_scalarp   s    zUnitDbl._binop_unit_scalarc                 C   s   d| j | jf S )Print the UnitDbl.z%g *%sr   r   r   r   r   r   __str__w   s    zUnitDbl.__str__c                 C   s   d| j | jf S )r-   zUnitDbl(%g, '%s')r.   r   r   r   r   __repr__{   s    zUnitDbl.__repr__c                 C   s   | j | j S )z Return the type of UnitDbl data.)_typesr   r   r   r   r   type   s    zUnitDbl.typeNc                 C   sJ   |du rt d| j}g }d}| ||  }||kr2qF|| |d7 }q|S )a?  
        Generate a range of UnitDbl objects.

        Similar to the Python range() method.  Returns the range [
        start, stop) at the requested step.  Each element will be a
        UnitDbl object.

        = INPUT VARIABLES
        - start     The starting value of the range.
        - stop      The stop value of the range.
        - step      Optional step to use.  If set to None, then a UnitDbl of
                      value 1 w/ the units of the start is used.

        = RETURN VALUE
        - Returns a list containing the requested UnitDbl values.
        Nr   r   )r   r   append)startstopstepelemsidr   r   r   range   s    

zUnitDbl.rangec                 C   s.   | j |j kr*td| d| j  d|j  dS )aI  
        Check to see if units are the same.

        = ERROR CONDITIONS
        - If the units of the rhs UnitDbl are not the same as our units,
          an error is thrown.

        = INPUT VARIABLES
        - rhs     The UnitDbl to check for the same units
        - func    The name of the function doing the check.
        zCannot z  units of different types.
LHS: z
RHS: N)r   r   )r   r(   funcr   r   r   r%      s    
zUnitDbl.checkSameUnits)N)*r*   
__module____qualname____doc__r   r1   r   r   r   r!   r#   r)   	functoolspartialmethodoperatoreq__eq__ne__ne__lt__lt__le__le__gt__gt__ge__ge__r+   add__add__sub__sub__r,   mul__mul____rmul__r/   r0   r2   staticmethodr:   r%   r   r   r   r   r   	   sL   !r   )r>   r?   rA   Z
matplotlibr   r   r   r   r   r   <module>   s   