o
    h                     @   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   miler   degr   minhourdistance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   x/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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r"t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*   scalarr   r   r   _binop_unit_scalarp      zUnitDbl._binop_unit_scalarc                 C   s   | j dd| j S )Print the UnitDbl.gz *r   r   r!   r   r   r   __str__w   r1   zUnitDbl.__str__c                 C   s   d| j dd| j dS )r2   zUnitDbl(r3   z, 'z')r4   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   sL   |du r
t d| j}g }d}	 | ||  }||kr	 |S || |d7 }q)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   r7   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__r0   mul__mul____rmul__r5   r6   r8   staticmethodr@   r(   r   r   r   r   r   	   sN    !r   )rD   rE   rG   
matplotlibr   r   r   r   r   r   <module>   s
    