U
    |eH                     @   s  d Z ddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ejd ZZeeejZej fd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dddZ'dddZ(dd Z)dd Z*eed d!d d"d d"d d d"d d"d gZ+eed d#d d"d d"d d d"d d"d gZ,eedd d$d%d&d'd(d)d*d+d,d-gZ-eedd d.d/d0d1d2d3d4d5d6d7gZ.eej/eej d8d9 Z0eej1ej d:d; Z2eej3ej d<d= Z4ee5ej d>d? Z6d@dA Z7eej8fe! eej9fe! dBdC Z:eej;fe! eej<fe! dDdE Z=dFdG Z>eej?ej ej@eejAej ej@eej?ej ejBeejAej ejBdHdI ZCeej?ej@ej eejAej@ej eej?ejBej eejAejBej dJdK ZDeejEej ej@eejFej ej@eejGej ej@eejHej ej@eejEej ejBeejFej ejBeejGej ejBeejHej ejBdLdM ZIeejEfe! eejFfe! dNdO ZJeejGfe! dPdQ ZKdRdS ZLdTdU ZMdVdW ZNeMdXe	jOZPeMdYe	jQZReNdZZSeNd[ZTeNd\ZUeNd]ZVejWePfejXeRfejYeSfejZeTfej[eUfej\eVffD ]\Z]Z^ee]fe! e^ qHd^d_ Z_d`da Z`dbdc Zaddde Zbdfdg ZcecdhZdecdiZeeej8ej/ej eej9ej/ej djdk Zfeej8ej ej/eej9ej ej/dldm Zgeej;ej/ej eej<ej/ej dndo Zheej;ej/ej/dpdq Zidrds ZjejdXZkejdYZlejdZZmejd[Znejd\Zoejd]ZpejWekfejXelfejYemfejZenfej[eofej\epffD ]$\ZqZ^eeqfej/gd  e^ qdtdu ZrerdvZserdwZtdxdy ZueudvZveudwZwdzd{ ZxexdvZyexdwZzd|d} Z{e{dvZ|e{dwZ}d~d Z~eejej/eejej dd Zeej/ej@eej ej@dd Zeej deej/ddd Zeejej/ej/ev eejej ej ev eejej/ej/es eejej ej es dS )z4
Implementation of operations on numpy timedelta64.
    N)Constant)typescgutils)create_constant_array)lower_builtinlower_constantimpl_ret_untracked
lower_cast)npdatetime_helpersnumpy_supportnpyfuncs)overload_method	IS_32BITS)LoweringError@      c                 C   s   |  |tt|S )z2
    Multiply *val* by the constant *factor*.
    )mulr   TIMEDELTA64buildervalfactor r   P/var/www/website-v5/atlas_env/lib/python3.8/site-packages/numba/np/npdatetime.pyscale_by_constant   s    r   c                 C   s   |  |tt|S )z0
    Divide *val* by the constant *factor*.
    )sdivr   r   r   r   r   r   unscale_by_constant"   s    r   c                 C   s   |  |tt|S )z(
    Add constant *const* to *val*.
    )addr   r   )r   r   constr   r   r   add_constant)   s    r    c                 C   s@   t |j|j}|dkr4d|j d|j }t|t|||S )zk
    Scale the timedelta64 *val* from *srcty* to *destty*
    (both numba.types.NPTimedelta instances)
    Nz cannot convert timedelta64 from  to )r
   get_timedelta_conversion_factorunitr   r   )contextr   r   srctyZdesttyr   msgr   r   r   scale_timedelta0   s     r'   c                 C   sd   t |j|j}|dk	r(t||||fS t |j|j}|dk	rP|t|||fS td||f dS )ze
    Scale either *left* or *right* to the other's unit, in order to have
    homogeneous units.
    Nzcannot normalize %r and %r)r
   r"   r#   r   RuntimeError)r$   r   leftrightZlefttyZrighttyr   r   r   r   normalize_timedeltas>   s      r+   retc                 C   s    t j| t|d}| t| |S )zM
    Allocate a NaT-initialized datetime64 (or timedelta64) result slot.
    name)r   alloca_oncer   storeNATr   r.   r,   r   r   r   alloc_timedelta_resultO   s    r3   c                 C   s   t j| tjd|d}|S )z8
    Allocate an uninitialized boolean result slot.
       r-   )r   r/   llvmliteirIntTyper2   r   r   r   alloc_boolean_resultX   s    r8   c                 C   s   |  d|tS )z?
    Return a predicate which is true if *val* is not NaT.
    !=)icmp_unsignedr1   )r   r   r   r   r   
is_not_nat`   s    r;   c                 C   sF   t |dkstt| |d }|dd D ]}| |t| |}q*|S )zH
    Return a predicate which is true if all of *vals* are not NaT.
    r4   r   N)lenAssertionErrorr;   and_)r   valspredr   r   r   r   are_not_natg   s
    rA               ;   Z   x               i  i0  iN  <   [   y               i  i1  iO  c                 C   s   t |tjS N)
DATETIME64astypenpint64)r$   r   typyvalr   r   r   datetime_constant   s    r[   c                 C   s   |d }t | ||j|S Nr   )r   return_typer$   r   sigargsresr   r   r   timedelta_pos_impl   s    rb   c                 C   s   | |d }t| ||j|S r\   )negr   r]   r^   r   r   r   timedelta_neg_impl   s    rd   c           	   
   C   s   |\}t |}|t||H\}}| |||| W 5 Q R X | ||| W 5 Q R X W 5 Q R X ||}t| ||j|S rT   )	r3   if_elser   is_scalar_negr0   rc   loadr   r]   )	r$   r   r_   r`   r   r,   then	otherwisera   r   r   r   timedelta_abs_impl   s     
rj   c                 C   s   |\}t |}ttd}||d||\}}| |ttd| W 5 Q R X |n ||d||N\}	}
|	 |ttd| W 5 Q R X |
 |ttd| W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X ||}t| ||j	|S )z
    np.sign(timedelta64)
    r   >r4   ==)
r3   r   r   re   icmp_signedr0   r:   rg   r   r]   )r$   r   r_   r`   r   r,   zerogt_zeroZle_zeroZeq_zerolt_zerora   r   r   r   timedelta_sign_impl   s     
:
rr   c           
   	   C   s   |\}}|j \}}t|}t|t|||g> t| ||||j}t| ||||j}||||| W 5 Q R X |	|}	t
| ||j|	S rT   )r`   r3   r   	if_likelyrA   r'   r]   r0   r   rg   r   
r$   r   r_   r`   vavbtatbr,   ra   r   r   r   timedelta_add_impl   s    

ry   c           
   	   C   s   |\}}|j \}}t|}t|t|||g> t| ||||j}t| ||||j}||||| W 5 Q R X |	|}	t
| ||j|	S rT   )r`   r3   r   rs   rA   r'   r]   r0   subrg   r   rt   r   r   r   timedelta_sub_impl   s    

r{   c           	   	   C   s   t |}t|t||b t|tjrP|||j}|	||}t
| ||}n|||}t| ||||}||| W 5 Q R X ||S rT   )r3   r   rs   r;   
isinstancer   Floatsitofptypefmul_cast_to_timedeltar   r'   r0   rg   )	r$   r   td_argtd_type
number_argnumber_typer]   r,   r   r   r   r   _timedelta_times_number   s    r   c                 C   s:   t | ||d |jd |d |jd |j}t| ||j|S )Nr   r4   r   r`   r]   r   r^   r   r   r   timedelta_times_number   s       r   c                 C   s:   t | ||d |jd |d |jd |j}t| ||j|S Nr4   r   r   r^   r   r   r   number_times_timedelta   s       r   c              	   C   s   |\}}|j d }t|}|t|||t||}t||j t|t	j
r||||j}	||	|}	t| ||	}	n|||}	t| ||	|j d |j}	||	| W 5 Q R X ||}
t| ||j|
S r   )r`   r3   r>   r;   not_r   is_scalar_zero_or_nanrs   r|   r   r}   r~   r   fdivr   r   r'   r]   r0   rg   r   )r$   r   r_   r`   r   r   r   r,   okr   ra   r   r   r   timedelta_over_number   s&    	
 
r   c              	   C   s   |\}}|j \}}t|||g}| |j}	tj||	dd}
|t|	td|
 t	||H t
| |||||\}}|||	}|||	}|||||
 W 5 Q R X ||
}t| ||j|S )Nr,   r-   nan)r`   rA   get_value_typer]   r   r/   r0   r   floatrs   r+   r~   r   rg   r   )r$   r   r_   r`   ru   rv   rw   rx   not_nanll_ret_typer,   ra   r   r   r   timedelta_over_timedelta  s    

r   c                 C   s  |\}}|j \}}| |j}t|||g}	tj||dd}
t|d}t|d}|||
 t||	@ t	| |||||\}}|
|d||}t|| |d||}|||d||}||\}}| ||r\}}|* |||}|||}|||
 W 5 Q R X |* |||}|||}|||
 W 5 Q R X W 5 Q R X W 5 Q R X | |||}|||
 W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X ||
}t| ||j|S )Nr,   r-   r   r4   rl   <)r`   r   r]   rA   r   r/   r   r0   rs   r+   r   rn   or_re   rz   r   r   rg   r   )r$   r   r_   r`   ru   rv   rw   rx   r   r   r,   ro   onedenom_okZvanegrc   rh   ri   ZnegthenZnegotherwisetopdivra   r   r   r   timedelta_floor_div_timedelta+  s<    


*4
r   c                 C   s^  |\}}|j \}}t|||g}| |j}	t|}
|t|
 t|	d}t	|| t
| |||||\}}||d||}t	|| |d||}|d||}|||}|||||d||}||J\}}| |||
 W 5 Q R X | |||||
 W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X ||
}t| ||j|S )Nr   rl   rk   )r`   rA   r   r]   r3   r0   r1   r   r   rs   r+   r   rn   sremr   r>   re   r   rg   r   )r$   r   r_   r`   ru   rv   rw   rx   r   r   r,   ro   r   ZvaposZvbposremcondrh   ri   ra   r   r   r   timedelta_mod_timedeltaN  s0    

<
r   c                    s    fdd}|S )Nc              
      s   |\}}|j \}}t|}|t|||g\}	}
|	X zt| |||||\}}W n  tk
rt   | | Y nX ||||| W 5 Q R X |
, dkr|tj	| n|tj
| W 5 Q R X W 5 Q R X ||}t| ||j|S Nr9   )r`   r8   re   rA   r+   r(   r0   r:   r   true_bit	false_bitrg   r   r]   r$   r   r_   r`   ru   rv   rw   rx   r,   rh   ri   norm_anorm_bra   default_valuell_opr   r   implt  s.    
      "
z/_create_timedelta_comparison_impl.<locals>.implr   )r   r   r   r   r   r   !_create_timedelta_comparison_impls  s    r   c                    s    fdd}|S )Nc              
      s   |\}}|j \}}t|}|t|||gd\}	}
|	2 t| |||||\}}|| ||| W 5 Q R X |
 |tj| W 5 Q R X W 5 Q R X |	|}t
| ||j|S rT   )r`   r8   re   rA   r+   r0   rn   r   r   rg   r   r]   r   r   r   r   r     s$    
      "
z-_create_timedelta_ordering_impl.<locals>.implr   r   r   r   r   r   _create_timedelta_ordering_impl  s    r   rl   r9   r   <=rk   >=c              	   C   st   |  |ttd}t| | |ttd}t| | |ttd}t| | |ttd}| || ||S )z_
    Return a predicate indicating whether *year_val* (offset by 1970) is a
    leap year.
    i     d     )	r   r   rU   r   is_nullr>   is_not_nullr   r   )r   year_valZactual_yearZmultiple_of_4Znot_multiple_of_100Zmultiple_of_400r   r   r   is_leap_year  s        
r   c              
   C   s0  t | t}t| |d}| t | |\}}|r t| |d}| |t| |d}t| |d}| 	|t| |d}t| |d}	| |t| |	d}| 
|| W 5 Q R X |f t| |d}
| |t| |
d}t| |
d	}| 	|t| |d}| |t| |d}| 
|| W 5 Q R X W 5 Q R X | |S )
zg
    Given a year *year_val* (offset to 1970), return the number of days
    since the 1970 epoch.
    im  r4      D   r   i,  r   i)r   r/   r   r   re   
is_neg_intr    r   r   rz   r0   rg   )r   r   r,   daysif_negif_posZ	from_1968Zp_daysZ	from_1900Z	from_1600Z	from_1972Zn_daysZ	from_2000r   r   r   year_to_days  s@    





 r   c                 C   sV  t j| }t j| }|dk s$|dkr,||fS |dkrD|}t| |}nt| dt}t| dt}	t| t}
t	| |d\}}| 
t| |v\}}|, | tj| |d|dd}| ||
 W 5 Q R X |, | tj| |	d|dd}| ||
 W 5 Q R X W 5 Q R X t| |}| || |
}|dkrJt	| |d\}}|d	fS |d
fS d S )Nr   r   leap_year_months_accnormal_year_months_acc   T)inbounds   WD)r
   DATETIME_UNITSr   r   global_constantr   r   r/   r   divmod_by_constantre   r   rg   gepr0   r   )r   dt_valsrc_unit	dest_unitZdest_unit_codeZsrc_unit_coder   Zdays_valZ
leap_arrayZnormal_arrayr   yearmonthrh   ri   addendweeks_r   r   r   reduce_datetime_for_unit  sH    

     

r   c                 C   sB   t | |||\}}t||}|dkr6td||f t| ||S )zC
    Convert datetime *dt_val* from *src_unit* to *dest_unit*.
    Nz'cannot convert datetime64 from %r to %r)r   r
   r"   r   r   )r   r   r   r   dt_unit	dt_factorr   r   r   convert_datetime_for_arith)  s       r   c                    s    fdd}|S )Nc           
   	      sv   t |}t|t|||gH t||||}t||}t|||}t| ||}	|	|	| W 5 Q R X |
|S rT   )r3   r   rs   rA   r   r
   r"   r   getattrr0   rg   )
r$   r   dt_argr   r   td_unitret_unitr,   	td_factorret_val
ll_op_namer   r   r   :  s      z'_datetime_timedelta_arith.<locals>.implr   )r   r   r   r   r   _datetime_timedelta_arith9  s    r   r   rz   c           	      C   s>   |\}}|j \}}t| |||j||j|jj}t| ||j|S rT   r`   _datetime_plus_timedeltar#   r]   r   	r$   r   r_   r`   r   r   dt_typer   ra   r   r   r   datetime_plus_timedeltaO  s    
  r   c           	      C   s>   |\}}|j \}}t| |||j||j|jj}t| ||j|S rT   r   )	r$   r   r_   r`   r   r   r   r   ra   r   r   r   timedelta_plus_datetime[  s    
  r   c           	      C   s>   |\}}|j \}}t| |||j||j|jj}t| ||j|S rT   )r`   _datetime_minus_timedeltar#   r]   r   r   r   r   r   datetime_minus_timedeltai  s    
  r   c              	   C   s   |\}}|j \}}|j}|j}	|jj}
t|}t|t|||g: t||||
}t|||	|
}|||}|	|| W 5 Q R X |
|}t| ||j|S rT   )r`   r#   r]   r3   r   rs   rA   r   rz   r0   rg   r   )r$   r   r_   r`   ru   rv   rw   rx   unit_aunit_br   r,   r   ra   r   r   r   datetime_minus_datetimew  s    

r   c                    s    fdd}|S )Nc              
      s   |\}}|j \}}|j}|j}	t||	}
t|}|t|||g\}}|< t||||
}t|||	|
}| ||}|	|| W 5 Q R X |(  dkrt
j}nt
j}|	|| W 5 Q R X W 5 Q R X ||}t| ||j|S r   )r`   r#   r
   get_best_unitr8   re   rA   r   rn   r0   r   r   r   rg   r   r]   )r$   r   r_   r`   ru   rv   rw   rx   r   r   r   r,   rh   ri   r   r   r   ra   r   r   r   r     s:    
       
z._create_datetime_comparison_impl.<locals>.implr   r   r   r   r    _create_datetime_comparison_impl  s    r   c                    s    fdd}|S )Nc           
         sr   |\}}t ||}t ||}|d||}||||}	 rF|| }}|||	|}	|||	|}	t| ||j|	S Nr   r;   rn   selectr   r]   
r$   r   r_   r`   in1in2in1_not_natin2_not_natZ
in1_ge_in2ra   NAT_DOMINATESr   r   datetime_max_impl  s    


z1_gen_datetime_max_impl.<locals>.datetime_max_implr   )r   r   r   r   r   _gen_datetime_max_impl  s    r   TFc                    s    fdd}|S )Nc           
         sr   |\}}t ||}t ||}|d||}||||}	 rF|| }}|||	|}	|||	|}	t| ||j|	S Nr   r   
r$   r   r_   r`   r   r   r   r   Z
in1_le_in2ra   r   r   r   datetime_min_impl  s    


z1_gen_datetime_min_impl.<locals>.datetime_min_implr   )r   r   r   r   r   _gen_datetime_min_impl  s    r   c                    s    fdd}|S )Nc           
         sr   |\}}t ||}t ||}|d||}||||}	 rF|| }}|||	|}	|||	|}	t| ||j|	S r   r   r   r   r   r   timedelta_max_impl  s    


z3_gen_timedelta_max_impl.<locals>.timedelta_max_implr   )r   r   r   r   r   _gen_timedelta_max_impl  s    r   c                    s    fdd}|S )Nc           
         sr   |\}}t ||}t ||}|d||}||||}	 rF|| }}|||	|}	|||	|}	t| ||j|	S r   r   r   r   r   r   timedelta_min_impl  s    


z3_gen_timedelta_min_impl.<locals>.timedelta_min_implr   )r   r   r   r   r   _gen_timedelta_min_impl  s    r   c              
   C   s|   | t}|d||}||J\}}| |t| W 5 Q R X | |||t| W 5 Q R X W 5 Q R X ||S )Nuno)allocar   fcmp_unorderedre   r0   r1   fptosirg   )r$   r   r   tempZ
val_is_nanrh   Zelsr   r   r   r     s    
 (r   c                 C   s   t | |||S rT   )r   np_datetime_isnat_impl)r$   r   r_   r`   r   r   r   _np_isnat_impl  s    r  c                 C   s.   |j dkr*d| d| d| d}t||S )Nr   zCannot cast r!   z as z is not 64 bits wide.)bitwidth
ValueError)r$   r   fromtytotyr   r&   r   r   r   _cast_npdatetime_int64!  s    
r  __hash__c                 C   s   t rdd }ndd }|S )Nc                 S   sf   t | } | dk rt | }n2t | d@ d? }t | d@ }t |d|  }|dkrbt d}|S )Nil            l    iCB rm   r   )rW   rX   int32)xyhilor   r   r   r   .  s    

z ol_hash_npdatetime.<locals>.implc                 S   s"   t | dkrt dS t | S )Nrm   r   )rW   rX   )r  r   r   r   r   :  s    
r   )r  r   r   r   r   ol_hash_npdatetime*  s    
r  )r,   )r,   )__doc__numpyrW   operatorllvmlite.irr5   r   
numba.corer   r   numba.core.cgutilsr   numba.core.imputilsr   r   r   r	   numba.npr
   r   r   numba.extendingr   numba.core.configr   numba.core.errorsr   r6   r7   rU   r   r1   NPTimedeltaZTIMEDELTA_BINOP_SIGr   r   r    r'   r+   r3   r8   r;   rA   Znormal_year_monthsZleap_year_monthsr   r   
NPDatetimer[   posrb   rc   rd   absrj   rr   r   iaddry   rz   isubr{   r   r   Integerimulr}   r   r   truedivitruedivfloordiv	ifloordivr   r   r   r   r   r   r   timedelta_eq_timedelta_implr   timedelta_ne_timedelta_impltimedelta_lt_timedelta_impltimedelta_le_timedelta_impltimedelta_gt_timedelta_impltimedelta_ge_timedelta_impleqneltlegtgeop_funcr   r   r   r   r   r   r   r   r   r   r   r   datetime_eq_datetime_impldatetime_ne_datetime_impldatetime_lt_datetime_impldatetime_le_datetime_impldatetime_gt_datetime_impldatetime_ge_datetime_implopr   datetime_maximum_impldatetime_fmax_implr   datetime_minimum_impldatetime_fmin_implr   timedelta_maximum_impltimedelta_fmax_implr   timedelta_minimum_impltimedelta_fmin_implr   isnatr  r  r  datetime_minimumdatetime_maximumr   r   r   r   <module>   sD  
	





"%  6-



