U
    ,d                     @   s  d Z ddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
m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 ddlmZmZ ed	Zed
Zdd ZdZdZee Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd  Z)d!d" Z*d#d$ Z+d%d& Z,d'd( Z-d)d* Z.d+d, Z/d-d. Z0d/d0 Z1d1d2 Z2G d3d4 d4eZ3ej4Z5ej6Z7G d5d6 d6eZ8G d7d8 d8eZ9G d9d: d:e9Z:G d;d< d<eZ;G d=d> d>e;Z<G d?d@ d@eZ=G dAdB dBeZ>G dCdD dDeZ?e@dEkreA  dS )Fz0
Test np.datetime64 and np.timedelta64 support.
    N)jit	vectorizenjit)numpy_version)typesconfig)TypingError)TestCasetagskip_parfors_unsupported)npdatetime_helpersnumpy_supportztimedelta64[M]ztimedelta64[Y]c                 C   s   t | j}|jS N)r   Z
from_dtypedtypeunit)valty r   ?/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_npdatetime.py
value_unit   s    r   )YM)WDhmsmsusnspsfsasc                 C   s   | | S r   r   xyr   r   r   add_usecase%   s    r&   c                 C   s   | | S r   r   r#   r   r   r   sub_usecase(   s    r'   c                 C   s   | | S r   r   r#   r   r   r   mul_usecase+   s    r(   c                 C   s   | | S r   r   r#   r   r   r   div_usecase.   s    r)   c                 C   s   | | S r   r   r#   r   r   r   floordiv_usecase1   s    r*   c                 C   s   | |kS r   r   r#   r   r   r   
eq_usecase4   s    r+   c                 C   s   | |kS r   r   r#   r   r   r   
ne_usecase7   s    r,   c                 C   s   | |k S r   r   r#   r   r   r   
lt_usecase:   s    r-   c                 C   s   | |kS r   r   r#   r   r   r   
le_usecase=   s    r.   c                 C   s   | |kS r   r   r#   r   r   r   
gt_usecase@   s    r/   c                 C   s   | |kS r   r   r#   r   r   r   
ge_usecaseC   s    r0   c                 C   s   | 
 S r   r   r$   r   r   r   pos_usecaseF   s    r2   c                 C   s   |  S r   r   r1   r   r   r   neg_usecaseI   s    r3   c                 C   s   t | S r   )absr1   r   r   r   abs_usecaseL   s    r5   c                 C   s   t | S r   )hashr1   r   r   r   hash_usecaseO   s    r7   c                 C   s
   t | |S r   minr#   r   r   r   min_usecaseR   s    r:   c                 C   s
   t | |S r   maxr#   r   r   r   max_usecaseU   s    r=   c                    s    fdd}|S )Nc                    s   |   S r   r   r1   constr   r   add_constantY   s    z'make_add_constant.<locals>.add_constantr   )r?   r@   r   r>   r   make_add_constantX   s    rA   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestModuleHelpersz?
    Test the various helpers in numba.npdatetime_helpers.
    c                    s   t j tttD ]4\}} ||||f  ||||f qtD ]$} |d  d| qLtd D ]} || qz fdd}|t |t d S )N rC   c                    sH   t | D ]:\}}| d | D ]$} ||  || qqd S r   )	enumerate
assertTrueassertFalsegroupiabfselfr   r   check_units_groupn   s    zDTestModuleHelpers.test_can_cast_timedelta.<locals>.check_units_group)	r   Zcan_cast_timedelta_units	itertoolsproduct
date_units
time_unitsrG   	all_unitsrF   )rO   rK   rL   r   rP   r   rM   r   test_can_cast_timedeltac   s    z)TestModuleHelpers.test_can_cast_timedeltac                    s   t j td D ]} ||d qtD ]} d|d q*tttD ],\}} ||d   ||d  qN fdd}|t |t  ddd  d	d
d  d	dd  d	dd d S )NrD      rC   c                    sR   t | D ]D\}}| d | D ].} ||d||f  ||d  qqd S )NrW   )rE   ZassertGreaterassertIsrH   rM   r   r   rP      s    zFTestModuleHelpers.test_timedelta_conversion.<locals>.check_units_groupr   r      r   r      r   i`'  r   l     !3)	r   Zget_timedelta_conversion_factorrU   assertEqualrQ   rR   rT   rS   rX   )rO   r   rK   rL   rP   r   rM   r   test_timedelta_conversiony   s    z+TestModuleHelpers.test_timedelta_conversionc                    s  t j  fdd}tttD ]\}}||| q tttD ]\}} || q@tttD ]\}} || q`tttD ]\}} || qtD ]F} |||ddf  |d|ddf  d|d q ddd  ddd  ddd	  d
dd  dd
d  d
dd  dd
d  ddd  ddd  ddd  dd
d  ddd  dd
d  ddd  ddd d S )Nc              	      s$    t  | | W 5 Q R X d S r   )assertRaisesRuntimeError)dt_unittd_unitrM   r   r   check_error   s    zFTestModuleHelpers.test_datetime_timedelta_scaling.<locals>.check_errorrW   rC   )rC   rW   rW   r   r   )r   rY   rW   )r   rW   rY   r   r   )r      rW   )r   rW   rb   r   )r   :	 rW   )r   rW   rc   r"   )r"        NZorW   )r"   rW   rd   )r   :   )r   re   i
  )r   re     )r   re   i@  )r      Y` rf   )r   rh   rg   )r   Z!get_datetime_timedelta_conversionrQ   rR   rT   rS   rU   r[   )rO   ra   r_   r`   r   r   rM   r   test_datetime_timedelta_scaling   s:    z1TestModuleHelpers.test_datetime_timedelta_scalingc                 C   s   t j}tD ]:}| |||| | |d|| | ||d| q
| |ddd tttD ]\}}| |||d  qdtttD ]\}}| |||| qd S )NrC   )	r   Z combine_datetime_timedelta_unitsrU   r[   rQ   rR   rT   rS   rX   )rO   rN   r   r_   r`   r   r   r   %test_combine_datetime_timedelta_units   s    z7TestModuleHelpers.test_combine_datetime_timedelta_unitsc                 C   s   t j}tD ]}| ||| q
d}d}t||D ]\}}| ||| q4t||D ]\}}| ||| qZt||D ](\}}| ||| | ||| qd S )N)r   r   r   r   )	r   r   r   r   r   r   r    r!   r"   )r   	same_kindrU   rF   rQ   rR   rG   )rO   rN   uABrK   rL   r   r   r   test_same_kind   s    z TestModuleHelpers.test_same_kindN)	__name__
__module____qualname____doc__rV   r\   ri   rj   ro   r   r   r   r   rB   ^   s   'rB   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestMiscCompilingc                    s@    fdd}t dt dt d}|| d}|| d S )Nc                    s@   t | ddt}tddtddf}t| } || | d S )NTZnopythonrW   r      r   )r   r&   DTTDassertPreciseEqual)sigrN   argsexpectedrO   r   r   _check_explicit_signature   s    zPTestMiscCompiling.test_jit_explicit_signature.<locals>._check_explicit_signaturer   r   z5NPDatetime('us')(NPDatetime('ms'), NPTimedelta('us')))r   Z
NPDatetimeNPTimedeltarO   r~   rz   r   r}   r   test_jit_explicit_signature   s
    z-TestMiscCompiling.test_jit_explicit_signaturec                    s<    fdd}t dt dt j}|| d}|| d S )Nc                    s0   t | gddt} |tddtd d S )NTru   rv         )r   r(   ry   rx   )rz   rN   r}   r   r   r~      s    zVTestMiscCompiling.test_vectorize_explicit_signature.<locals>._check_explicit_signaturer   z)NPTimedelta('s')(NPTimedelta('s'), int64))r   r   int64r   r   r}   r   !test_vectorize_explicit_signature   s
    z3TestMiscCompiling.test_vectorize_explicit_signaturec                    s*    fdd}|t d |t dd d S )Nc                    s<   t | }tdd|}tdd}||} ||| d S NTru      r   rA   r   rx   ry   r?   pyfuncrN   r$   r|   r}   r   r   check   s
    
z7TestMiscCompiling.test_constant_datetime.<locals>.checkz
2001-01-01NaTr   rw   rO   r   r   r}   r   test_constant_datetime   s    z(TestMiscCompiling.test_constant_datetimec                    s:    fdd}|t dd |t dd |t dd d S )Nc                    s<   t | }tdd|}tdd}||} ||| d S r   r   r   r}   r   r   r     s
    
z8TestMiscCompiling.test_constant_timedelta.<locals>.checkr   r   r   )rx   r   r   r}   r   test_constant_timedelta  s    z)TestMiscCompiling.test_constant_timedeltaN)rp   rq   rr   r   r   r   r   r   r   r   r   rt      s   
rt   c                   @   s   e Zd ZeddZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestTimedeltaArithmeticTZforceobjc                 C   s   t f | j|S r   r   jitargsrO   r   r   r   r   r     s    zTestTimedeltaArithmetic.jitc              	      s   t  fdd}|tdtdtd |tddtddtdd |tddtddtdd |tdd	tdd
tdd
 |tdtdtd |tddtdd
tdd |tddtddtdd ttf  tddtdd
 W 5 Q R X d S )Nc                    s(     | ||   || | d S r   ry   rK   rL   r|   rM   r   r   r     s    z/TestTimedeltaArithmetic.test_add.<locals>.checkrW   rv   r   r   r   iBB r   r   	   r   r   r   )r   r&   rx   r]   	TypeErrorr   r   r   rM   r   test_add  s    
z TestTimedeltaArithmetic.test_addc              	      s   t  fdd}|tdtdtd |tddtddtdd |tddtddtdd |tdd	tdd
tdd
 |tdtdtd |tddtdd
tdd |tddtddtdd ttf  tddtdd
 W 5 Q R X d S )Nc                    s*     | ||   || |  d S r   r   r   rM   r   r   r   *  s    z/TestTimedeltaArithmetic.test_sub.<locals>.checkr   rv   rW   r   r   i- r   r      r   r   r   )r   r'   rx   r]   r   r   r   r   rM   r   test_sub(  s    
z TestTimedeltaArithmetic.test_subc                    s   t  fdd}|tdtdtd |tddtd |tdddtdd |tdddtdd |tdd	td
 |tdd	td |tdddtdd |tddtd
 |tdddtdd |tddtdtdd |tdddtdd d S )Nc                    s(     | ||   || | d S r   r   r   rM   r   r   r   =  s    z/TestTimedeltaArithmetic.test_mul.<locals>.checkr   rv   r   r    r   rb         ?
   ig      nanl               r   )r   r(   rx   npuint32floatr   r   rM   r   test_mul;  s    
z TestTimedeltaArithmetic.test_mulc                    sf   t  t fdd}|tddtdtdd |tddtd |tdddtdd |td	ddtd	d |tddd
td	d |td	dd
td	d |tddtd |tdddtdd |td	ddtd	d |tdddtd	d |td	ddtd	d |tddtdtd	d |td	dtdtd	d d S )Nc                    s(     | ||  | || d S r   r   r   divfloordivrO   r   r   r   T  s    z/TestTimedeltaArithmetic.test_div.<locals>.checkr    rv   r   rW   r   r   rb   g      ?   r   r   r   g      @g        r   )r   r)   r*   rx   r   r   r   r   r   r   r   test_divQ  s     

z TestTimedeltaArithmetic.test_divc              	      s    t  fdd}|tdtdd |tddtddd |tddtddd	 |tdtd
td |tdtd
td |td
td
td |tdtdtd |tdtdtd |tdtd
td ttf  tddtdd W 5 Q R X d S )Nc                    s     | || d S r   r   r   r   rO   r   r   r   k  s    z;TestTimedeltaArithmetic.test_homogeneous_div.<locals>.checkrb   r   g@r   r   gQFoZc?g:@r   z+infr   z-infr   ZnatrW   r   r   )r   r)   rx   r   r]   r   r   r   r   r   r   test_homogeneous_divi  s    
z,TestTimedeltaArithmetic.test_homogeneous_divc                    sP   t  t fdd}|tdtdd |tdtdd |tddtddd |tddtddd |tddtddd |tdd	tddd |tdd
tddd |tdtdd |tdd	tddd |tdtdd |tdd
tddd |tdd
tddd |tddtddd d S )Nc                    sz   |}| }t dkr.t| s&t| r.d}d} | ||  || | | || || | d S NrW   r   FTr   r   isnatry   rK   rL   r|   expected_valnot_expected_valeqnerO   r   r   r     s    z1TestTimedeltaArithmetic.test_eq_ne.<locals>.checkrW   rv   FTr   i  r   r   rY   r   Natm  r   in  r   r   )r   r+   r,   rx   r   r   r   r   
test_eq_ne}  s     

z"TestTimedeltaArithmetic.test_eq_nec              	      s   t t  fdd}|tdtdd |tdtdd |tdtdd |tddtddd |tddtddd |tddtddd |tddtd	dd |tddtd
dd |tdtdd |tddtddd |tdtdd ttf tddtdd W 5 Q R X ttf  tddtdd W 5 Q R X ttf tddtdd W 5 Q R X ttf  tddtdd W 5 Q R X d S )Nc                    sV   |}| }t dkr.t| s&t| r.d}d}| ||  | || d S Nr   Fr   r   geltrO   r   r   r     s    z1TestTimedeltaArithmetic.test_lt_ge.<locals>.checkrW   rv   TFr   r   =   <   r   r    r   r   r   r   )r   r-   r0   rx   r]   r   r   r   r   r   r   
test_lt_ge  s,    

   z"TestTimedeltaArithmetic.test_lt_gec              	      s   t t  fdd}|tdtdd |tdtdd |tdtdd |tddtddd |tddtddd |tddtddd |tddtd	dd |tddtd
dd |tddtddd |tdtdd |tddtddd |tdtdd ttf tddtdd W 5 Q R X ttf  tddtdd W 5 Q R X ttf tddtdd W 5 Q R X ttf  tddtdd W 5 Q R X d S )Nc                    sV   |}| }t dkr.t| s&t| r.d}d}| ||  | || d S r   r   r   gtlerO   r   r   r     s    z1TestTimedeltaArithmetic.test_le_gt.<locals>.checkrW   rv   TFr   r   r   r   ;   r   r   r   r   r   r   r   )r   r.   r/   rx   r]   r   r   r   r   r   r   
test_le_gt  s.    

   z"TestTimedeltaArithmetic.test_le_gtc                    sj    t  fdd}|td |td |tdd |tdd |td |tdd d S )Nc                    s     | | 
  d S r   r   rK   posrO   r   r   r     s    z/TestTimedeltaArithmetic.test_pos.<locals>.checkr   r   r   r   )r   r2   rx   r   r   r   r   test_pos  s    
z TestTimedeltaArithmetic.test_posc                    sj    t  fdd}|td |td |tdd |tdd |td |tdd d S )Nc                    s     | |   d S r   r   r   negrO   r   r   r     s    z/TestTimedeltaArithmetic.test_neg.<locals>.checkr   r   r   r   )r   r3   rx   r   r   r   r   test_neg  s    
z TestTimedeltaArithmetic.test_negc                    sj    t  fdd}|td |td |tdd |tdd |td |tdd d S )Nc                    s     | t|  d S r   )ry   r4   r   rM   r   r   r     s    z/TestTimedeltaArithmetic.test_abs.<locals>.checkr   r   r   r   )r   r5   rx   r   r   rM   r   test_abs	  s    
z TestTimedeltaArithmetic.test_absc                    s`    t  fdd}d}d}t|| tft| tft|  D ]\}}|||  qFd S )Nc                    s     | t|  d S r   )ry   r6   r   rM   r   r   r     s    z0TestTimedeltaArithmetic.test_hash.<locals>.check))r   )r   )r   r   )r   r   )   r   )rv   r   )rv   r   )rv   r   )r   r   )r   r   )'  r   )r   r   )r   r   )r   r   )r   ))2014)2016)2000)2014-02)2014-03)2014-04)2016-02)
2000-12-31)
2014-01-16)
2014-01-05)
2014-01-07)
2014-01-06)
2014-02-02)z
2014-02-27)z
2014-02-16)
2014-03-01)2000-01-01T01:02:03.002Z)2000-01-01T01:02:03Zr   )r   r7   ziprx   lenrw   )rO   r   ZTD_CASESZDT_CASESZcasetypr   rM   r   	test_hash  s    
z!TestTimedeltaArithmetic.test_hashc                    s      fdd}tdtdtdtdftddtddtddtddffD ]$}t||D ]\}}||| qjqZd S )Nc                    s     | || | d S r   r   rK   rL   rN   rO   usecaser   r   r   +  s    z4TestTimedeltaArithmetic._test_min_max.<locals>.checkr   rW   rv   r   r   )r   rx   rQ   rR   rO   r   r   ZcasesrK   rL   r   r   r   _test_min_max)  s    
"z%TestTimedeltaArithmetic._test_min_maxc                 C   s   |  t d S r   r   r:   r}   r   r   r   test_min5  s    z TestTimedeltaArithmetic.test_minc                 C   s   |  t d S r   r   r=   r}   r   r   r   test_max8  s    z TestTimedeltaArithmetic.test_maxN)rp   rq   rr   dictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s"   
$((r   c                   @   s   e Zd ZeddZdS )TestTimedeltaArithmeticNoPythonTru   Nrp   rq   rr   r   r   r   r   r   r   r   <  s   r   c                   @   sd   e Zd ZeddZdd Zejdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd ZdS )TestDatetimeArithmeticTr   c                 C   s   t f | j|S r   r   r   r   r   r   r   E  s    zTestDatetimeArithmetic.jitc              	   c   s.   t   t jddtd d V  W 5 Q R X d S )Nignorez-Implicitly casting between incompatible kinds)messagecategory)warningscatch_warningsfilterwarningsDeprecationWarningr}   r   r   r   silence_numpy_warningsH  s    
z-TestDatetimeArithmetic.silence_numpy_warningsc                    s   t  t fdd}|tdtddtd |tdtddtd |tdtd	d
tdd
 |tdtddtd |tdtddtd |tdtddtd |tdtddtd |tdtddtd |tdd
tdd
tdd
 |tdtddtd |tdtddtd |tdtdd
td |tdtddtd |tdtdd td! d"D ]}d#D ]}t|| }tddtdd
td$dtd%dtd&dtd'dtd$d
td%d
td&d
td'd
td$dtd%dtd&dtd'dfD ]\} |||| ||f  |||| ||f || || ||f q&qq|td(tdtd( |td(d)tddtd(d) |td(d)tdd td(d  |tdtd(d
td(d
 |td*td(d
td(d |td(d)td(d td(d   fD ]f}ttf |td+d*td+d W 5 Q R X ttf |td+d*td+d W 5 Q R X q>d,S )-zQ
        Test `datetime64 + timedelta64` and `datetime64 - timedelta64`.
        c              	      sr     `  | ||| |f  || || |f | | || |f | | | W 5 Q R X d S r   r   ry   r   addrO   subr   r   r   X  s
    
z<TestDatetimeArithmetic.test_add_sub_timedelta.<locals>.checkr   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z
2014-02-03r   r   r   r   z
2012-02-02z
2012-02-29z
2012-02-16r   r   z2000-01-01T03:02:03Zr   r   )600601604Z801Z1900Z1904Z2200Z2300Z23042400Z6001)rC   -01-12d   r   ir   r   r   
2014-01-01rW   N)	r   r&   r'   rw   rx   r[   r]   r   r   )rO   r   Zdt_strZ	dt_suffixdttdrN   r   r   r   test_add_sub_timedeltaR  s`    

	      * z-TestDatetimeArithmetic.test_add_sub_timedeltac                 C   sZ   ddddddddd	d
ddg}dddddddg}dd t ||D }|dd |D 7 }|S )Nr  r  r  Z1968Z1969Z1973r   Z2004Z2005Z2100r  Z2401rC   r  r  z-02-28z-12-31z-01-05T12:30:56Zz-01-05T12:30:56.008Zc                 S   s   g | ]\}}t || qS r   r   ).0rK   rL   r   r   r   
<listcomp>  s     z;TestDatetimeArithmetic.datetime_samples.<locals>.<listcomp>c                 S   s   g | ]}t |d qS )r   r   )r  r   r   r   r   r    s     )rQ   rR   )rO   Zdt_yearsZdt_suffixesdtsr   r   r   datetime_samples  s         
 z'TestDatetimeArithmetic.datetime_samplesc              	      s     td fdd	}|tdtdtdd |tdtd	td
d |tdtdtdd |tddtdtdd |tddtdtdd |tdtdtd   V   }t||D ]:\}}t	t
|t
|sqֈ |||| ||f qW 5 Q R X dS )z1
        Test `datetime64 - datetime64`.
        Nc              	      s`      N  | || | | |f  || ||  | |f  | | | W 5 Q R X d S r   r   r   rO   r  r   r   r     s    
z>TestDatetimeArithmetic.test_datetime_difference.<locals>.checkr   2017r   r   r   z2017-01ir   z
2014-02-28z
2015-03-01ir   r   r   z
2000-01-01)N)r   r'   rw   rx   r   r  rQ   rR   r   rk   r   ry   )rO   r   r  rK   rL   r   r  r   test_datetime_difference  s    

z/TestDatetimeArithmetic.test_datetime_differencec           	   	      s   t t t t t tfdd  fdd} tdtdd  tdtdd	  tdtd
d	  tdtd
dd	  tdtd
dd	  td
td
dd  tdtddd	  tddtddd	  tddtddd |tddtdd	  tdtdd	  }|D ]}|j	j
dd d d }t|}t||d  }|D ]j}|d| }tt|t|sʐq ||d	 |||td| d	 ||td| |d	 qqbd S )Nc              	      s&  |}| }t dkrt| s&t|rd}d}| || |f | || |f || | |f || | |f | || |f | || |f || | |f || | |f  4  | ||| ||f  || || ||f | ||| ||f || || ||f |r| || |f | || |f || | |f || | |f | || |f | || |f || | |f || | |f | |k| W 5 Q R X d S r   )r   r   r   rG   r   ry   rF   r   )r   r   r   r   r   r   rO   r   r   check_eq  s:    z9TestDatetimeArithmetic.test_comparisons.<locals>.check_eqc              	      s   |}| }t dkr.t| s&t|r.d}d}  t}|| ||| ||f || || ||f | ||| ||f || || ||f |r | |d | |k | W 5 Q R X d S r   )r   r   r   r   r   r-   ry   )rK   rL   r|   r   r   r   )r  r   r   r   rO   r   r   check_lt  s    

z9TestDatetimeArithmetic.test_comparisons.<locals>.check_ltr   r  Fz2014-01Tr
  r   z
2014-01-02r   z2014-01-01T00:01:00Zr   z2014-01-01T00:01Zr   z2014-01-01T00:01:01Zr   r   [rW   r   r   zM8[%s])r   r+   r,   r-   r.   r/   r0   rw   r  r   strsplitrU   indexZastyper   rk   r   r   timedelta64)	rO   r  r  rK   Za_unitrJ   Zunitsr   rL   r   )r  r   r   r   r   r   r   rO   r   test_comparisons  sN    





&
 
 

z'TestDatetimeArithmetic.test_comparisonsc                    s      fdd}tddtddtddtddftddtddtddtddffD ]$}t||D ]\}}||| qrqbd S )	Nc                    s     | || | d S r   r   r   r   r   r   r   !  s    z3TestDatetimeArithmetic._test_min_max.<locals>.checkr   r   rW   rv   r   r   )r   rw   rQ   rR   r   r   r   r   r     s    
""z$TestDatetimeArithmetic._test_min_maxc                 C   s   |  t d S r   r   r}   r   r   r   r   +  s    zTestDatetimeArithmetic.test_minc                 C   s   |  t d S r   r   r}   r   r   r   r   .  s    zTestDatetimeArithmetic.test_maxN)rp   rq   rr   r   r   r   
contextlibcontextmanagerr   r  r  r  r  r   r   r   r   r   r   r   r   A  s   

	A	hr   c                   @   s   e Zd ZeddZdS )TestDatetimeArithmeticNoPythonTru   Nr   r   r   r   r   r  1  s   r  c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestMetadataScalingFactorzf
    Tests than non-1 scaling factors are not supported in datetime64
    and timedelta64 dtypes.
    c                 K   s,   t f |t}| |tddtd d S )Nr   10YZ2010)r   r+   rF   rw   rO   r   r   r   r   r   test_datetime<  s    z'TestMetadataScalingFactor.test_datetimec              	   C   s$   |    | jdd W 5 Q R X d S NTru   )assertTypingErrorr#  r}   r   r   r   test_datetime_npm@  s    
z+TestMetadataScalingFactor.test_datetime_npmc                 K   s.   t f |t}| |tddtdd d S )Nrv   r!     r   )r   r+   rF   rx   r"  r   r   r   test_timedeltaD  s    z(TestMetadataScalingFactor.test_timedeltac              	   C   s$   |    | jdd W 5 Q R X d S r$  )r%  r(  r}   r   r   r   test_timedelta_npmH  s    
z,TestMetadataScalingFactor.test_timedelta_npmN)rp   rq   rr   rs   r#  r&  r(  r)  r   r   r   r   r   6  s
   r   c                   @   s   e Zd Zdd ZdS )TestDatetimeDeltaOpsc                 C   s   dd }|}t |}tdttdtftdttdtftdttdtftdttdtftdtdftdttdtjftdttdtjfg}|D ]&\}}| t|||||| qdS )zC
        Test the division of a timedelta by numeric types
        c                 S   s   | | S r   r   r   r   r   r   arr_divR  s    z.TestDatetimeDeltaOps.test_div.<locals>.arr_divr   rW   N)	r   r   ZonesTIMEDELTA_MTIMEDELTA_Yr   Zfloat64rF   array_equal)rO   r+  py_funccfunc
test_casesrK   rL   r   r   r   r   N  s    	zTestDatetimeDeltaOps.test_divN)rp   rq   rr   r   r   r   r   r   r*  M  s   r*  c                   @   s   e Zd Zdd Zdd Zedd Zdd Zed	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedd  Zed!d" Zed#d$ Zed%d& Zd'S )(TestDatetimeArrayOpsc              	      s"   fdd}t jt dt dt dt dgdd}t jt dt dt dt dgd	d}|}t|d
|}|t df|t df|t df|t dfg} t jkr|t d|ft d|ft d|ft d|fg |D ]&\}	}
| t ||	|
||	|
 qdS )zY
        Test the addition/subtraction of a datetime array with a timedelta type
        c                    s
    | |S r   r   r   	operationr   r   implj  s    z6TestDatetimeArrayOps._test_td_add_or_sub.<locals>.impl
2011-01-01
1971-02-02
2021-03-03
2004-12-07datetime64[ns]r   zdatetime64[D]parallel  i*N)	r   array
datetime64r   r  r  extendrF   r.  )rO   r4  r=  r5  Zarr_oneZarr_twor/  r0  r1  rK   rL   r   r3  r   _test_td_add_or_subf  sB    
z(TestDatetimeArrayOps._test_td_add_or_subc                 C   s   |  tjd d S NFrB  r   r  r}   r   r   r   test_add_td  s    z TestDatetimeArrayOps.test_add_tdc                 C   s   |  tjd d S NTrD  r}   r   r   r   test_add_td_parallel  s    z)TestDatetimeArrayOps.test_add_td_parallelc                 C   s   |  tjd d S rC  rB  r   subtractr}   r   r   r   test_sub_td  s    z TestDatetimeArrayOps.test_sub_tdc                 C   s   |  tjd d S rF  rH  r}   r   r   r   test_sub_td_parallel  s    z)TestDatetimeArrayOps.test_sub_td_parallelc              	      sl   t  fdd} j}td| d}| ttf|* |tjt	dgddt
dd	 W 5 Q R X d
S )z
        Tests that attempting to add/sub a datetime64 and timedelta64
        with types that cannot be cast raises a reasonable exception.
        c                    s
    | |S r   r   r   r3  r   r   r5    s    z<TestDatetimeArrayOps._test_add_sub_td_no_match.<locals>.implzufunc 'z<' is not supported between datetime64[ns] and timedelta64[M]r6  r:  r;  r>  r   N)r   rp   reescapeassertRaisesRegexr   r   r   r?  r@  r  )rO   r4  r5  fnamer|   r   r3  r   _test_add_sub_td_no_match  s    
z.TestDatetimeArrayOps._test_add_sub_td_no_matchc                 C   s   |  tj d S r   )rP  r   r  r}   r   r   r   test_add_td_no_match  s    z)TestDatetimeArrayOps.test_add_td_no_matchc                 C   s   |  tj d S r   )rP  r   rI  r}   r   r   r   test_sub_td_no_match  s    z)TestDatetimeArrayOps.test_sub_td_no_matchc                    s  |r" t jkrdd }q.dd }n fdd}|}t|d|}t tddtddtd	dtd
dgt tddtddtddtddtddgt tddtddtddtddtddgt tddtddtddtddtddtddgt tddtddtddtddtddtddgt tddtddgt tddtddtddgt tddtd	dtd
dtddgt tddtd	dtd
dtddgt tddtddtd	dtd
dtddgt tddtd	dtd
dtddtddgt tddgt tddtddtddgg}|D ]\}||}	||}
t |	st |
r| t |	 | t |
 n| |	|
 qXd S )Nc                 S   s   |   S r   r8   arrr   r   r   r5    s    z0TestDatetimeArrayOps._test_min_max.<locals>.implc                 S   s   |   S r   r;   rS  r   r   r   r5    s    c                    s    | S r   r   rS  r3  r   r   r5    s    r<  r   r   rW   rv   r   r6  r7  z
1900-01-01r8  r9  r   r   r   )	r   r9   r   r?  rw   rx   r   rF   r[   )rO   r4  r=  methodr5  r/  r0  r1  rT  Zpy_resZc_resr   r3  r   r     s    


Rz"TestDatetimeArrayOps._test_min_maxc                 C   s   |  tdd d S rC  )r   r9   r}   r   r   r   test_min_func  s    z"TestDatetimeArrayOps.test_min_funcc                 C   s   |  tjdd d S rC  r   r   r9   r}   r   r   r   test_np_min_func   s    z%TestDatetimeArrayOps.test_np_min_funcc                 C   s   |  tjdd d S NFTrW  r}   r   r   r   test_min_method#  s    z$TestDatetimeArrayOps.test_min_methodc                 C   s   |  tdd d S rC  )r   r<   r}   r   r   r   test_max_func&  s    z"TestDatetimeArrayOps.test_max_funcc                 C   s   |  tjdd d S rC  r   r   r<   r}   r   r   r   test_np_max_func)  s    z%TestDatetimeArrayOps.test_np_max_funcc                 C   s   |  tjdd d S rY  r\  r}   r   r   r   test_max_method,  s    z$TestDatetimeArrayOps.test_max_methodc                 C   s   |  tjdd d S NTFrW  r}   r   r   r   test_min_func_parallel/  s    z+TestDatetimeArrayOps.test_min_func_parallelc                 C   s   |  tjdd d S rF  rW  r}   r   r   r   test_min_method_parallel3  s    z-TestDatetimeArrayOps.test_min_method_parallelc                 C   s   |  tjdd d S r_  r\  r}   r   r   r   test_max_func_parallel7  s    z+TestDatetimeArrayOps.test_max_func_parallelc                 C   s   |  tjdd d S rF  r\  r}   r   r   r   test_max_method_parallel;  s    z-TestDatetimeArrayOps.test_max_method_parallelN)rp   rq   rr   rB  rE  r   rG  rJ  rK  rP  rQ  rR  r   rV  rX  rZ  r[  r]  r^  r`  ra  rb  rc  r   r   r   r   r2  d  s2   &

j


r2  __main__)Brs   r  rQ   rL  Zunittestr   Znumpyr   Znumbar   r   r   Znumba.np.numpy_supportr   Z
numba.corer   r   Znumba.core.errorsr   Znumba.tests.supportr	   r
   r   Znumba.npr   r   r   r,  r-  r   rS   rT   rU   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r2   r3   r5   r7   r:   r=   rA   rB   r  rx   r@  rw   rt   r   r   r   r  r   r*  r2  rp   mainr   r   r   r   <module>   sj   

v6  0 q ]
