B
      ›\­  ã               @   s˜   d Z ddlZdddddddd	d
ddddddœZe d¡ ej¡Zdd„ Zdd„ Z	ddddddddddd d!œZ
d"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ ZdS ),z
Helper functions for np.timedelta64 and np.datetime64.
For now, multiples-of-units (for example timedeltas expressed in tens
of seconds) are not supported.
é    Né   é   é   é   é   é   é   é	   é
   é   é   é   é   )ÚYÚMÚWÚDÚhÚmÚsZmsÚusÚnsZpsZfsÚasÚ Znatc             C   s   t |  dk t | dk kS )zB
    Whether the *src* and *dest* units are of the same kind.
    r   )ÚDATETIME_UNITS)ÚsrcÚdest© r   ú/lib/python3.7/site-packages/numba/npdatetime.pyÚ	same_kind(   s    r   c             C   sX   t |  } t | }| |krdS | dkr(dS | |kr4dS |dkr@dS | dkrT|dkrTdS dS )NTr   Fr   )r   )r   r   r   r   r   Úcan_cast_timedelta_units/   s    r    )r   r   )r   r   )r   é   )r   é<   )r   r"   )r   iè  )r	   iè  )r
   iè  )r   iè  )r   iè  )r   iè  )r   r   r   r   r   r   r   r	   r
   r   r   c             C   sd   | dkrdS | }d}x:||k rNyt | \}}W n tk
rB   dS X ||9 }qW ||kr\|S dS dS )zÍ
    Return an integer multiplier allowing to convert from *big_unit_code*
    to *small_unit_code*.
    None is returned if the conversion is not possible through a
    simple integer multiplication.
    r   r   N)Ú_factorsÚKeyError)Zbig_unit_codeZsmall_unit_codeÚcÚfactorZmultr   r   r   Ú_get_conversion_multiplierU   s    	
r'   c             C   s   t t|  t| ƒS )zl
    Return an integer multiplier allowing to convert from timedeltas
    of *src_unit* to *dest_unit*.
    )r'   r   )Zsrc_unitZ	dest_unitr   r   r   Úget_timedelta_conversion_factoro   s    r(   c             C   s  t |  }t | }|dks |dkr*| ddfS |dk rJ|dkrJtd| |f ƒ‚d\}}|dkr†|dkrpd}d	}d}q¸|dkr¸d}d
}d}n2|dkr¸|dkr¤d}d}d}n|dkr¸d}d}d}||krìt||ƒ}|dk	sÞt||fƒ‚||| |fS t||ƒ}|dk	st||fƒ‚| ||| fS dS )a  
    Compute a possible conversion for combining *datetime_unit* and
    *timedelta_unit* (presumably for adding or subtracting).
    Return (result unit, integer datetime multiplier, integer timedelta multiplier).
    RuntimeError is raised if the combination is impossible.
    r   r   r   z1cannot combine datetime64(%r) and timedelta64(%r))r   r   r   r   i±: i  ið
  iÀ  i@ƒ  N)r   ÚRuntimeErrorr'   ÚAssertionError)Údatetime_unitÚtimedelta_unitÚdt_unit_codeÚtd_unit_codeZ	dt_factorZ	td_factorr&   r   r   r   Ú!get_datetime_timedelta_conversionx   sB    


r/   c             C   sP   t |  }t | }|dkr|S |dkr(| S |dk r<|dkr<dS ||krH| S |S dS )zµ
    Return the unit result of combining *datetime_unit* with *timedelta_unit*
    (e.g. by adding or subtracting).  None is returned if combining
    those units is forbidden.
    r   r   N)r   )r+   r,   r-   r.   r   r   r   Ú combine_datetime_timedelta_units¬   s    r0   c             C   s8   t |  }t | }|dkr|S |dkr(| S ||kr4|S | S )z9
    Get the best (i.e. finer-grained) of two units.
    r   )r   )Zunit_aZunit_bÚaÚbr   r   r   Úget_best_unitÀ   s    r3   )Ú__doc__ZnumpyZnpr   Ztimedelta64ZastypeZint64ZNATr   r    r#   r'   r(   r/   r0   r3   r   r   r   r   Ú<module>   sD   	4