B
    Afxa                 @   s  d Z ddlZddlZddlmZ ddlmZ ddlmZ d5ddZ	dd	 Z
G d
d deZyZddlZddlmZ ddlmZ dZejZeeeejfZd6ddZdd Ze ZejZW nX ek
r   dZG dd dZG dd dZdZdZeefZdZdZd7ddZY nX yddlmZ dZW n ek
r@   dZdZY nX y,ddl m!Z" ddl m#Z$ e"j%Z&e'e$dZ(W n ek
r   dZ(Y nX erddlm)Z) ddlm*Z* nddlm)Z) ddlm*Z* e(se	d  Z&Z$g Z+ydd!l,m-Z- e+.e- W n ek
r   Y nX ydd"l/m0Z0 e+.e0 W n ek
r:   Y nX y&dd#l1m2Z2m3Z3m4Z4 e+e2e3e4g7 Z+W n ek
rx   Y nX y$dd$l5m6Z7 dd%l8m9Z9m:Z:m;Z; W n$ ek
r   d&\Z9Z:Z;dZ7Y nX e<d'd(d)Z=e<d'd*d+Z>d,d- Z?e<d.d/d0Z@e<d.d1d2ZAe<d.d3d4ZBdS )8z
    pint.compat
    ~~~~~~~~~~~

    Compatibility layer.

    :copyright: 2013 by Pint Authors, see AUTHORS for more details.
    :license: BSD, see LICENSE for more details.
    N)Decimal)BytesIO)Numberc                s    p  fdd}|S )Nc                 s   t d f d S )NzFThis feature requires %s. Please install it by running:
pip install %s)	Exception)argskwargs)display_namepackage *lib/python3.7/site-packages/pint/compat.py_inner   s    z"missing_dependency.<locals>._innerr
   )r	   r   r   r
   )r   r	   r   missing_dependency   s    r   c             c   s6   x0t  t| djD ]}|jt jkr|V  qW d S )Nzutf-8)tokenizer   encodereadlinetypeENCODING)Zinput_stringZtokinfor
   r
   r   	tokenizer   s    r   c               @   s   e Zd ZdS )BehaviorChangeWarningN)__name__
__module____qualname__r
   r
   r
   r   r   $   s   r   )
datetime64)ndarrayTFc             C   s|   t | ttfs| d kr&td| n4t | trB| dkrBtdnt | ttfrZt	
| S |sn|rxtt| sxt	
| S | S )Nz%Invalid magnitude for Quantity: {0!r} z-Quantity magnitude cannot be an empty string.)
isinstancedictbool	TypeErrorformatstr
ValueErrorlisttuplenpZasarrayis_duck_array_typer   )valueforce_ndarrayforce_ndarray_liker
   r
   r   _to_magnitude1   s    


r)   c              C   s:   y G dd d} t |  g dS  tk
r4   dS X d S )Nc               @   s   e Zd Zdd ZdS )z0_test_array_function_protocol.<locals>.FakeArrayc             _   s   d S )Nr
   )selfr   r   r
   r
   r   __array_function__C   s    zC_test_array_function_protocol.<locals>.FakeArray.__array_function__N)r   r   r   r+   r
   r
   r
   r   	FakeArrayB   s   r,   TF)r$   Zconcatenater!   )r,   r
   r
   r   _test_array_function_protocol>   s    r-   c               @   s   e Zd ZdS )r   N)r   r   r   r
   r
   r
   r   r   S   s   r   c               @   s   e Zd ZdS )np_datetime64N)r   r   r   r
   r
   r
   r   r.   V   s   r.   0c             C   sn   |s|rt dnXt| ttfs(| d kr8td| n2t| trT| dkrTt dnt| ttfrjtd| S )NzBCannot force to ndarray or ndarray-like when NumPy is not present.z%Invalid magnitude for Quantity: {0!r}r   z-Quantity magnitude cannot be an empty string.zNlists and tuples are valid magnitudes for Quantity only when NumPy is present.)	r!   r   r   r   r   r   r    r"   r#   )r&   r'   r(   r
   r
   r   r)   _   s    
)ufloat)Locale)unitsZformat_unit)exp)logZBabel)	PintArray)Series)	DataArrayDatasetVariable)array)computepersist	visualize)NNN)returnc             C   s   | t kS )zCheck if the type object is a upcast type using preset list.

    Parameters
    ----------
    other : object

    Returns
    -------
    bool
    )upcast_types)otherr
   r
   r   is_upcast_type   s    rA   c             C   sD   t | tpBt| d oBt| d oBtoBt| doBt| doBt| dS )zCheck if the type object represents a (non-Quantity) duck array type.

    Parameters
    ----------
    cls : class

    Returns
    -------
    bool
    Z
_magnitudeZ_unitsr+   ndimdtype)
issubclassr   hasattrHAS_NUMPY_ARRAY_FUNCTION)clsr
   r
   r   r%      s    


r%   c             C   s   t t| S )N)r%   r   )objr
   r
   r   is_duck_array   s    rI   )	check_allc             C   s$   | |k}|r t t|r | S |S )aG  Comparison of scalars and arrays.

    Parameters
    ----------
    lhs : object
        left-hand side
    rhs : object
        right-hand side
    check_all : bool
        if True, reduce sequence to single bool;
        return True if all the elements are equal.

    Returns
    -------
    bool or array_like of bool
    )r%   r   all)ZlhsZrhsrJ   outr
   r
   r   eq   s    rM   c             C   s   t t| rZ| jjdkr$t| }n&| jjdkr<t| }nt| jd}|rV|	 S |S t
| trnt| S y
t| S  tk
r   dS X dS )aC  Test for NaN or NaT

    Parameters
    ----------
    obj : object
        scalar or vector
    check_all : bool
        if True, reduce sequence to single bool;
        return True if any of the elements are NaN.

    Returns
    -------
    bool or array_like of bool.
    Always return False for non-numeric types.
    ifZMmFN)r%   r   rC   kindr$   isnanZisnatZfullshapeanyr   r.   mathr   )rH   rJ   rL   r
   r
   r   rP      s    


rP   c             C   s2   t | ddt| d }|r.tt|r.| S |S )a[  Test if obj is zero, NaN, or NaT

    Parameters
    ----------
    obj : object
        scalar or vector
    check_all : bool
        if True, reduce sequence to single bool;
        return True if all the elements are zero, NaN, or NaT.

    Returns
    -------
    bool or array_like of bool.
    Always return False for non-numeric types.
    r   F)rM   rP   r%   r   rK   )rH   rJ   rL   r
   r
   r   zero_or_nan  s    rT   )N)FF)FF)C__doc__rS   r   decimalr   ior   Znumbersr   r   r   UserWarningr   Znumpyr$   r   r.   r   Z	HAS_NUMPY__version__Z	NUMPY_VERZnumberZNUMERIC_TYPESr)   r-   rF   Z_NoValueZNP_NO_VALUEImportErrorZuncertaintiesr0   ZHAS_UNCERTAINTIESZbabelr1   ZLocr2   Zbabel_unitsparseZbabel_parserE   Z	HAS_BABELr3   r4   r?   Zpint_pandasr5   appendZpandasr6   Zxarrayr7   r8   r9   Zdaskr:   Z
dask_arrayZ	dask.baser;   r<   r=   r   rA   r%   rI   rM   rP   rT   r
   r
   r
   r   <module>	   s   






!