a
    ·DfH                     @   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&dsddZ'dtddZ(dd Z)dd Z*eeg d Z+eeg d!Z,eeg d"Z-eeg d#Z.eej/eej d$d% Z0eej1ej d&d' Z2eej3ej d(d) Z4ee5ej d*d+ Z6d,d- Z7eej8ge!R  eej9ge!R  d.d/ Z:eej;ge!R  eej<ge!R  d0d1 Z=d2d3 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d4d5 ZCeej?ej@ej eejAej@ej eej?ejBej eejAejBej d6d7 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d8d9 ZIeejEge!R  eejFge!R  d:d; ZJeejGge!R  d<d= ZKd>d? ZLd@dA ZMdBdC ZNeMdDe	jOZPeMdEe	jQZReNdFZSeNdGZTeNdHZUeNdIZVejWePfejXeRfejYeSfejZeTfej[eUfej\eVffD ]\Z]Z^ee]ge!R  e^ qdJdK Z_dLdM Z`dNdO ZadPdQ ZbdRdS ZcecdTZdecdUZeeej8ej/ej eej9ej/ej dVdW Zfeej8ej ej/eej9ej ej/dXdY Zgeej;ej/ej eej<ej/ej dZd[ Zheej;ej/ej/d\d] Zid^d_ ZjejdDZkejdEZlejdFZmejdGZnejdHZoejdIZpejWekfejXelfejYemfejZenfej[eofej\epffD ]&\ZqZ^eeqgej/gd R  e^ qhd`da ZrerdbZserdcZtddde ZueudbZveudcZwdfdg ZxexdbZyexdcZzdhdi Z{e{dbZ|e{dcZ}djdk Z~eejej/eejej dldm Zeej/ej@eej ej@dndo Zeej dpeej/dpdqdr 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 )uz4
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   `/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/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u 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   ZsrctyZdesttyr   msgr   r   r   scale_timedelta0   s    r&   c                 C   sd   t |j|j}|dur(t||||fS t |j|j}|du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    r2   c                 C   s   t j| tjd|d}|S )z8
    Allocate an uninitialized boolean result slot.
       r,   )r   r.   llvmliteirIntTyper1   r   r   r   alloc_boolean_resultX   s    r7   c                 C   s   |  d|tS )z?
    Return a predicate which is true if *val* is not NaT.
    !=)icmp_unsignedr0   )r   r   r   r   r   
is_not_nat`   s    r:   c                 C   sF   t |dksJ t| |d }|dd D ]}| |t| |}q*|S )zH
    Return a predicate which is true if all of *vals* are not NaT.
    r3   r   N)lenr:   and_)r   valspredr   r   r   r   are_not_natg   s
    r?   )      r@      r@   rB   r@   r@   rB   r@   rB   r@   )r@      r@   rB   r@   rB   r@   r@   rB   r@   rB   r@   )r   r@   ;   Z   x               i  i0  iN  )r   r@   <   [   y               i  i1  iO  c                 C   s   t |tjS N)
DATETIME64Zastypenpint64)r$   r   tyZpyvalr   r   r   datetime_constant   s    rW   c                 C   s   |d }t | ||j|S Nr   )r   return_typer$   r   sigargsresr   r   r   timedelta_pos_impl   s    r^   c                 C   s   | |d }t| ||j|S rX   )negr   rY   rZ   r   r   r   timedelta_neg_impl   s    r`   c           	   	   C   s   |\}t |}|t||z\}}|" |||| W d    n1 sR0    Y  | ||| W d    n1 s0    Y  W d    n1 s0    Y  ||}t| ||j|S rR   )	r2   if_elser   Zis_scalar_negr/   r_   loadr   rY   )	r$   r   r[   r\   r   r+   then	otherwiser]   r   r   r   timedelta_abs_impl   s    0H
re   c                 C   sp  |\}t |}ttd}||d||\}}|" |ttd| W d   n1 s`0    Y  | ||d||\}	}
|	" |ttd| W d   n1 s0    Y  |
" |ttd| W d   n1 s0    Y  W d   n1 s0    Y  W d   n1 s,0    Y  W d   n1 sL0    Y  ||}t| ||j	|S )z
    np.sign(timedelta64)
    r   >r3   N==)
r2   r   r   ra   icmp_signedr/   r9   rb   r   rY   )r$   r   r[   r\   r   r+   zeroZgt_zeroZle_zeroZeq_zeroZlt_zeror]   r   r   r   timedelta_sign_impl   s     
00
rk   c           
      C   s   |\}}|j \}}t|}t|t|||gH t| ||||j}t| ||||j}||||| W d    n1 s~0    Y  |	|}	t
| ||j|	S rR   )r\   r2   r   	if_likelyr?   r&   rY   r/   r   rb   r   
r$   r   r[   r\   vavbtatbr+   r]   r   r   r   timedelta_add_impl   s    
2
rr   c           
      C   s   |\}}|j \}}t|}t|t|||gH t| ||||j}t| ||||j}||||| W d    n1 s~0    Y  |	|}	t
| ||j|	S rR   )r\   r2   r   rl   r?   r&   rY   r/   subrb   r   rm   r   r   r   timedelta_sub_impl   s    
2
rt   c           	      C   s   t |}t|t||l t|tjrP|||j}|	||}t
| ||}n|||}t| ||||}||| W d    n1 s0    Y  ||S rR   )r2   r   rl   r:   
isinstancer   FloatsitofptypeZfmul_cast_to_timedeltar   r&   r/   rb   )	r$   r   td_argtd_type
number_argnumber_typerY   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   r3   r~   r\   rY   r   rZ   r   r   r   timedelta_times_number   s
    r   c                 C   s:   t | ||d |jd |d |jd |j}t| ||j|S Nr3   r   r   rZ   r   r   r   number_times_timedelta   s
    r   c              	   C   s   |\}}|j d }t|}|t|||t||}t||t t|t	j
r||||j}	||	|}	t| ||	}	n|||}	t| ||	|j d |j}	||	| W d    n1 s0    Y  ||}
t| ||j|
S r   )r\   r2   r<   r:   not_r   Zis_scalar_zero_or_nanrl   ru   r   rv   rw   rx   fdivry   r   r&   rY   r/   rb   r   )r$   r   r[   r\   rz   r|   r}   r+   okr   r]   r   r   r   timedelta_over_number   s$    	
*
r   c                 C   s   |\}}|j \}}t|||g}| |j}	tj||	dd}
|t|	td|
 t	||R t
| |||||\}}|||	}|||	}|||||
 W d    n1 s0    Y  ||
}t| ||j|S )Nr+   r,   nan)r\   r?   get_value_typerY   r   r.   r/   r   floatrl   r*   rw   r   rb   r   )r$   r   r[   r\   rn   ro   rp   rq   not_nanll_ret_typer+   r]   r   r   r   timedelta_over_timedelta  s    
2
r   c                 C   s~  |\}}|j \}}| |j}t|||g}	tj||dd}
t|d}t|d}|||
 t||	 t	| |||||\}}|
|d||}t|| |d||}|||d||}||<\}}| ||\}}|4 |||}|||}|||
 W d    n1 s20    Y  |4 |||}|||}|||
 W d    n1 s|0    Y  W d    n1 s0    Y  W d    n1 s0    Y  |( |||}|||
 W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s:0    Y  W d    n1 sZ0    Y  ||
}t| ||j|S )Nr+   r,   r   r3   rg   <)r\   r   rY   r?   r   r.   r   r/   rl   r*   r   ri   or_ra   rs   r   r   rb   r   )r$   r   r[   r\   rn   ro   rp   rq   r   r   r+   rj   Zonedenom_okZvanegr_   rc   rd   ZnegthenZnegotherwisetopdivr]   r   r   r   timedelta_floor_div_timedelta+  s<    


,l
r   c                 C   s  |\}}|j \}}t|||g}| |j}	t|}
|t|
 t|	d}t	||J t
| |||||\}}||d||}t	|| |d||}|d||}|||}|||||d||}||\}}| |||
 W d    n1 s0    Y  |$ |||||
 W d    n1 sJ0    Y  W d    n1 sj0    Y  W d    n1 s0    Y  W d    n1 s0    Y  ||
}t| ||j|S )Nr   rg   rf   )r\   r?   r   rY   r2   r/   r0   r   r   rl   r*   r   ri   sremr   r<   ra   r   rb   r   )r$   r   r[   r\   rn   ro   rp   rq   r   r   r+   rj   r   ZvaposZvbposremZcondrc   rd   r]   r   r   r   timedelta_mod_timedeltaN  s0    

,
r   c                    s    fdd}|S )Nc              
      s,  |\}}|j \}}t|}|t|||g\}	}
|	` zt| |||||\}}W n tyr   | | Y n0 ||||| W d    n1 s0    Y  |
6 dkr|tj	| n|tj
| W d    n1 s0    Y  W d    n1 s0    Y  ||}t| ||j|S Nr8   )r\   r7   ra   r?   r*   r'   r/   r9   r   true_bit	false_bitrb   r   rY   r$   r   r[   r\   rn   ro   rp   rq   r+   rc   rd   norm_anorm_br]   default_valuell_opr   r   implt  s$    
4L
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\}	}
|	< t| |||||\}}|| ||| W d    n1 sz0    Y  |
 |tj| W d    n1 s0    Y  W d    n1 s0    Y  |	|}t
| ||j|S rR   )r\   r7   ra   r?   r*   r/   ri   r   r   rb   r   rY   r   r   r   r   r     s    
4J
z-_create_timedelta_ordering_impl.<locals>.implr   r   r   r   r   r   _create_timedelta_ordering_impl  s    r   rg   r8   r   <=rf   >=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   rS   r   Zis_nullr<   Z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   sr  t | t}t| |d}| t | |*\}}|| t| |d}| |t| |d}t| |d}| 	|t| |d}t| |d}	| |t| |	d}| 
|| W d   n1 s0    Y  |p t| |d	}
| |t| |
d}t| |
d
}| 	|t| |d}| |t| |d}| 
|| W d   n1 s>0    Y  W d   n1 s^0    Y  | |S )zg
    Given a year *year_val* (offset to 1970), return the number of days
    since the 1970 epoch.
    im  r3      D   r   i,  r   Ni)r   r.   r   r   ra   Z
is_neg_intr    r   r   rs   r/   rb   )r   r   r+   daysZif_negZif_posZ	from_1968Zp_daysZ	from_1900Z	from_1600Z	from_1972Zn_daysZ	from_2000r   r   r   year_to_days  s@    


*


Lr   c                 C   s  t j| }t j| }|dk s$|dkr,||fS |dkrF|}t| |}n"t| dt}t| dt}	t| t}
t	| |d\}}| 
t| |\}}|6 | tj| |d|dd}| ||
 W d    n1 s0    Y  |6 | tj| |	d|dd}| ||
 W d    n1 s"0    Y  W d    n1 sB0    Y  t| |}| || |
}|dkrt	| |d\}}|d	fS |d
fS d S )Nr   r   leap_year_months_accnormal_year_months_acc   T)Zinbounds   WD)r
   ZDATETIME_UNITSr   r   Zglobal_constantr   r   r.   r   Zdivmod_by_constantra   r   rb   Zgepr/   r   )r   dt_valsrc_unit	dest_unitZdest_unit_codeZsrc_unit_coder   Zdays_valZ
leap_arrayZnormal_arrayr   yearmonthrc   rd   addendweeks_r   r   r   reduce_datetime_for_unit  s@    

*L

r   c                 C   sB   t | |||\}}t||}|du 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_unitZ	dt_factorr   r   r   convert_datetime_for_arith)  s    r   c                    s    fdd}|S )Nc           
         s   t |}t|t|||gR t||||}t||}t|||}t| ||}	|	|	| W d    n1 sv0    Y  |
|S rR   )r2   r   rl   r?   r   r
   r"   r   getattrr/   rb   )
r$   r   dt_argr   rz   Ztd_unitret_unitr+   Z	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   rs   c           	      C   s>   |\}}|j \}}t| |||j||j|jj}t| ||j|S rR   r\   _datetime_plus_timedeltar#   rY   r   	r$   r   r[   r\   r   rz   dt_typer{   r]   r   r   r   datetime_plus_timedeltaO  s    
r   c           	      C   s>   |\}}|j \}}t| |||j||j|jj}t| ||j|S rR   r   )	r$   r   r[   r\   rz   r   r{   r   r]   r   r   r   timedelta_plus_datetime[  s    
r   c           	      C   s>   |\}}|j \}}t| |||j||j|jj}t| ||j|S rR   )r\   _datetime_minus_timedeltar#   rY   r   r   r   r   r   datetime_minus_timedeltai  s    
r   c                 C   s   |\}}|j \}}|j}|j}	|jj}
t|}t|t|||gD t||||
}t|||	|
}|||}|	|| W d    n1 s0    Y  |
|}t| ||j|S rR   )r\   r#   rY   r2   r   rl   r?   r   rs   r/   rb   r   )r$   r   r[   r\   rn   ro   rp   rq   unit_aunit_br   r+   r   r]   r   r   r   datetime_minus_datetimew  s    
*
r   c                    s    fdd}|S )Nc              	      s&  |\}}|j \}}|j}|j}	t||	}
t|}|t|||g\}}|F t||||
}t|||	|
}| ||}|	|| W d    n1 s0    Y  |2  dkrt
j}nt
j}|	|| W d    n1 s0    Y  W d    n1 s0    Y  ||}t| ||j|S r   )r\   r#   r
   Zget_best_unitr7   ra   r?   r   ri   r/   r   r   r   rb   r   rY   )r$   r   r[   r\   rn   ro   rp   rq   r   r   r   r+   rc   rd   r   r   r   r]   r   r   r   r     s.    
*J
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:   ri   selectr   rY   
r$   r   r[   r\   in1in2in1_not_natin2_not_natZ
in1_ge_in2r]   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_in2r]   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||}|||\}}| |t| W d    n1 sN0    Y  |$ |||t| W d    n1 s0    Y  W d    n1 s0    Y  ||S )NZuno)Zallocar   Zfcmp_unorderedra   r/   r0   Zfptosirb   )r$   r   r   tempZ
val_is_nanrc   Zelsr   r   r   ry     s    
*Pry   c                 C   s   t | |||S rR   )r   Z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.)Zbitwidth
ValueError)r$   r   ZfromtyZ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 rh   r   )rT   rU   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 )Nrh   r   )rT   rU   )r   r   r   r   r   :  s    
r   )r   r   r   r   r   ol_hash_npdatetime*  s    
r   )r+   )r+   )__doc__numpyrT   operatorZllvmlite.irr4   r   Z
numba.corer   r   Znumba.core.cgutilsr   Znumba.core.imputilsr   r   r   r	   Znumba.npr
   r   r   Znumba.extendingr   Znumba.core.configr   Znumba.core.errorsr   r5   r6   rS   r   r0   ZNPTimedeltaZTIMEDELTA_BINOP_SIGr   r   r    r&   r*   r2   r7   r:   r?   Znormal_year_monthsZleap_year_monthsr   r   Z
NPDatetimerW   posr^   r_   r`   absre   rk   r   iaddrr   rs   isubrt   r~   r   ZIntegerimulrv   r   r   truedivitruedivfloordiv	ifloordivr   r   r   r   r   r   r   Ztimedelta_eq_timedelta_implr   Ztimedelta_ne_timedelta_implZtimedelta_lt_timedelta_implZtimedelta_le_timedelta_implZtimedelta_gt_timedelta_implZtimedelta_ge_timedelta_impleqneltlegtgeZop_funcr   r   r   r   r   r   r   r   r   r   r   r   Zdatetime_eq_datetime_implZdatetime_ne_datetime_implZdatetime_lt_datetime_implZdatetime_le_datetime_implZdatetime_gt_datetime_implZdatetime_ge_datetime_implopr   Zdatetime_maximum_implZdatetime_fmax_implr   Zdatetime_minimum_implZdatetime_fmin_implr   Ztimedelta_maximum_implZtimedelta_fmax_implr   Ztimedelta_minimum_implZtimedelta_fmin_implry   Zisnatr   r   r   Zdatetime_minimumZdatetime_maximumr   r   r   r   <module>   s@  
	





"%6-

 

