o
    1&i                     @   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 Z2d3d4 Z3G d5d6 d6eZ4ej5Z6ej7Z8G d7d8 d8eZ9G d9d: d:e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?G dEdF dFeZ@G dGdH dHeZAG dIdJ dJeZBeCdKkreD  dS dS )Lz0
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   FC:\wamp64\www\opt\env\Lib\site-packages\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%      r&   c                 C   s   | | S r   r   r#   r   r   r   sub_usecase(   r'   r(   c                 C   s   | | S r   r   r#   r   r   r   mul_usecase+   r'   r)   c                 C      | | S r   r   r#   r   r   r   div_usecase.   r'   r+   c                 C   s   | | S r   r   r#   r   r   r   floordiv_usecase1   r'   r,   c                 C   s   | |kS r   r   r#   r   r   r   
eq_usecase4   r'   r-   c                 C   s   | |kS r   r   r#   r   r   r   
ne_usecase7   r'   r.   c                 C   s   | |k S r   r   r#   r   r   r   
lt_usecase:   r'   r/   c                 C   s   | |kS r   r   r#   r   r   r   
le_usecase=   r'   r0   c                 C   s   | |kS r   r   r#   r   r   r   
gt_usecase@   r'   r1   c                 C   s   | |kS r   r   r#   r   r   r   
ge_usecaseC   r'   r2   c                 C   s   | 
 S r   r   r$   r   r   r   pos_usecaseF      r4   c                 C   s   |  S r   r   r3   r   r   r   neg_usecaseI   r5   r6   c                 C      t | S r   )absr3   r   r   r   abs_usecaseL   r'   r9   c                 C   r7   r   )hashr3   r   r   r   hash_usecaseO   r'   r;   c                 C   
   t | |S r   minr#   r   r   r   min_usecaseR      
r?   c                 C   r<   r   maxr#   r   r   r   max_usecaseU   r@   rC   c                 C   r7   r   )intr3   r   r   r   int_cast_usecaseX   r'   rE   c                    s    fdd}|S )Nc                    s   |   S r   r   r3   constr   r   add_constant\   r'   z'make_add_constant.<locals>.add_constantr   )rG   rH   r   rF   r   make_add_constant[   s   rI   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 ]\}} ||||f  ||||f q	tD ]} |d  d| q&td D ]
} || q= fdd}|t |t d S )N rK   c                    sH   t | D ]\}}| d | D ]} ||  || qqd S r   )	enumerate
assertTrueassertFalsegroupiabfselfr   r   check_units_groupq   s   zDTestModuleHelpers.test_can_cast_timedelta.<locals>.check_units_group)	r   Zcan_cast_timedelta_units	itertoolsproduct
date_units
time_unitsrO   	all_unitsrN   )rW   rS   rT   r   rX   r   rU   r   test_can_cast_timedeltaf   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  q' fdd}|t |t  ddd  d	d
d  d	dd  d	dd d S )NrL      rK   c                    sR   t | D ]"\}}| d | D ]} ||d||f  ||d  qqd S Nr_   )rM   ZassertGreaterassertIsrP   rU   r   r   rX      s   zFTestModuleHelpers.test_timedelta_conversion.<locals>.check_units_groupr   r      r   r      r   i`'  r   l     !3)	r   Zget_timedelta_conversion_factorr]   assertEqualrY   rZ   r\   r[   ra   )rW   r   rS   rT   rX   r   rU   r   test_timedelta_conversion|   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 ]	\}} || q0tttD ]	\}} || q@tD ]#} |||ddf  |d|ddf  d|d qL 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 d    d S 1 sw   Y  d S r   )assertRaisesRuntimeError)dt_unittd_unitrU   r   r   check_error   s   "zFTestModuleHelpers.test_datetime_timedelta_scaling.<locals>.check_errorr_   rK   )rK   r_   r_   r   r   )r   rb   r_   )r   r_   rb   r   r   )r      r_   )r   r_   rk   r   )r   :	 r_   )r   r_   rl   r"   )r"        NZor_   )r"   r_   rm   )r   :   )r   rn   i
  )r   rn     )r   rn   i@  )r      Y` ro   )r   rq   rp   )r   Z!get_datetime_timedelta_conversionrY   rZ   r\   r[   r]   rd   )rW   rj   rh   ri   r   r   rU   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  q2tttD ]\}}| |||| qFd S )NrK   )	r   Z combine_datetime_timedelta_unitsr]   rd   rY   rZ   r\   r[   ra   )rW   rV   r   rh   ri   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 ]\}}| ||| qt||D ]\}}| ||| q-t||D ]\}}| ||| | ||| q@d S )N)r   r   r   r   )	r   r   r   r   r   r   r    r!   r"   )r   	same_kindr]   rN   rY   rZ   rO   )rW   rV   uABrS   rT   r   r   r   test_same_kind   s   z TestModuleHelpers.test_same_kindN)	__name__
__module____qualname____doc__r^   re   rr   rs   rx   r   r   r   r   rJ   a   s    'rJ   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nopythonr_   r      r   )r   r&   DTTDassertPreciseEqual)sigrV   argsexpectedrW   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rW   r   r   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 )NTr~   r         )r   r)   r   r   )r   rV   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                    <   t | }tdd|}tdd}||} ||| d S NTr~      r   rI   r   r   r   rG   pyfuncrV   r$   r   r   r   r   check   
   
z7TestMiscCompiling.test_constant_datetime.<locals>.checkz
2001-01-01NaTr   r   rW   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                    r   r   r   r   r   r   r   r     r   z8TestMiscCompiling.test_constant_timedelta.<locals>.checkr   r   r   )r   r   r   r   r   test_constant_timedelta  s   z)TestMiscCompiling.test_constant_timedeltaN)ry   rz   r{   r   r   r   r   r   r   r   r   r}      s
    
r}   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forceobjc                 C      t di | j|S Nr   r   jitargsrW   r   r   r   r   r        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 d    d S 1 sw   Y  d S )Nc                    (     | ||   || | d S r   r   rS   rT   r   rU   r   r   r        z/TestTimedeltaArithmetic.test_add.<locals>.checkr_   r   r   r   r   iBB r   r   	   r   r   r   )r   r&   r   rf   	TypeErrorr   r   r   rU   r   test_add     
"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 d    d S 1 sw   Y  d S )Nc                    s*     | ||   || |  d S r   r   r   rU   r   r   r   -  s   z/TestTimedeltaArithmetic.test_sub.<locals>.checkr   r   r_   r   r   i- r   r      r   r   r   )r   r(   r   rf   r   r   r   r   rU   r   test_sub+  r   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                    r   r   r   r   rU   r   r   r   @  r   z/TestTimedeltaArithmetic.test_mul.<locals>.checkr   r   r   r    r   rk         ?
   ig      nanl               r   )r   r)   r   npuint32floatr   r   rU   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floordivrW   r   r   r   W  r   z/TestTimedeltaArithmetic.test_div.<locals>.checkr    r   r   r_   r   r   rk   g      ?   r   r   r   g      @g        r   )r   r+   r,   r   r   r   r   r   r   r   r   test_divT  s    

 z TestTimedeltaArithmetic.test_divc                    s6   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 d    d S 1 sw   Y  d S )Nc                    s     | || d S r   r   r   r   rW   r   r   r   n     z;TestTimedeltaArithmetic.test_homogeneous_div.<locals>.checkrk   r   g@r   r   gQFoZc?g:@r   z+infr   z-infr   Znatr_   r   r   )r   r+   r   r   rf   r   r   r   r   r   r   test_homogeneous_divl  s   
"z,TestTimedeltaArithmetic.test_homogeneous_divc                    s   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k r|tdd
tddd |tdd
tddd |tddtddd d S ttf  tdd
tdd W d    n1 sw   Y  ttf tdd
tdd W d    d S 1 sw   Y  d S )Nc                    sr   |}| }t | st | rd}d} | ||  || | | || || | d S NFTr   isnatr   rS   rT   r   expected_valnot_expected_valeqnerW   r   r   r     s   z1TestTimedeltaArithmetic.test_eq_ne.<locals>.checkr_   r   FTr   i  r   r   rb   r   Nat)r_      m  r   in  r   r   )r   r-   r.   r   r   rf   r   r   r   r   r   r   
test_eq_ne  s.   

"z"TestTimedeltaArithmetic.test_eq_nec                    s0   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 d    n1 sw   Y  ttf  tddtdd W d    n1 sw   Y  ttf tddtdd W d    n1 sw   Y  ttf  tddtdd W d    d S 1 sw   Y  d S )Nc                    N   |}| }t | st | rd}d}| ||  | || d S NFr   r   geltrW   r   r   r     s   z1TestTimedeltaArithmetic.test_lt_ge.<locals>.checkr_   r   TFr   r   =   <   r   r    r   r   r   r   )r   r/   r2   r   rf   r   r   r   r   r   r   
test_lt_ge  s4   

$z"TestTimedeltaArithmetic.test_lt_gec                    sH   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 d    n1 sw   Y  ttf  tddtdd W d    n1 sw   Y  ttf tddtdd W d    n1 sw   Y  ttf  tddtdd W d    d S 1 sw   Y  d S )Nc                    r   r   r   r   gtlerW   r   r   r     s   z1TestTimedeltaArithmetic.test_le_gt.<locals>.checkr_   r   TFr   r   r   r   ;   r   r   r   r   r   r   r   )r   r0   r1   r   rf   r   r   r   r   r   r   
test_le_gt  s6   

$z"TestTimedeltaArithmetic.test_le_gtc                    j    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   rS   posrW   r   r   r     r   z/TestTimedeltaArithmetic.test_pos.<locals>.checkr   r   r   r   )r   r4   r   r   r   r   r   test_pos     
z TestTimedeltaArithmetic.test_posc                    r   )Nc                    s     | |   d S r   r   r   negrW   r   r   r     r   z/TestTimedeltaArithmetic.test_neg.<locals>.checkr   r   r   r   )r   r6   r   r   r   r   r   test_neg  r   z TestTimedeltaArithmetic.test_negc                    r   )Nc                         | t|  d S r   )r   r8   r   rU   r   r   r        z/TestTimedeltaArithmetic.test_abs.<locals>.checkr   r   r   r   )r   r9   r   r   r   rU   r   test_abs  r   z TestTimedeltaArithmetic.test_absc                    s    t  fdd}d}d}t|| tft| tft|  D ]
\}}|||  q#tdkrXt} td W d    n1 sHw   Y  	dt
|j d S d S )Nc                    sp   t dkr,| jjdkrd S jddr  | | t d S  | t|  d S  | t|  d S )Nr   r   timedelta64r   F)	r   r   namer   getr   astyperD   r:   r   rU   r   r   r     s   z0TestTimedeltaArithmetic.test_hash.<locals>.check))r   )r   )r   r   )r   r   )   r   )r   r   )r   r   )r   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)
2014-02-27)
2014-02-16)
2014-03-01)2000-01-01T01:02:03.002Z)2000-01-01T01:02:03Zr   r   r   zCan't hash generic timedelta64)r   r;   zipr   lenr   r   rf   
ValueErrorassertInstr	exception)rW   r   ZTD_CASESZDT_CASEScasetypZraisesr   rU   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 ]	\}}||| q5q-d S )Nc                         | || | d S r   r   rS   rT   rV   rW   usecaser   r   r   H     z4TestTimedeltaArithmetic._test_min_max.<locals>.checkr   r_   r   r   r   )r   r   rY   rZ   rW   r  r   casesrS   rT   r   r  r   _test_min_maxF  s   
"z%TestTimedeltaArithmetic._test_min_maxc                 C      |  t d S r   r  r?   r   r   r   r   test_minR     z TestTimedeltaArithmetic.test_minc                 C   r  r   r  rC   r   r   r   r   test_maxU  r  z TestTimedeltaArithmetic.test_maxN)ry   rz   r{   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d ZdS )TestTimedeltaArithmeticNoPythonTr~   c                    s    t  fdd}dD ]\}}|t||d qdD ]}|t|d qjtdd  td	 W d    d S 1 sDw   Y  d S )
Nc                    r   r   )r   rD   r   rU   r   r   r   _  r   z<TestTimedeltaArithmeticNoPython.test_int_cast.<locals>.check))r   r   )r   r   )i0u  r   )i r   )r_   r   ztimedelta64[ns])r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  datetime64[ns]z;Only datetime64[ns] can be converted, but got datetime64[y])msgr   )r   rE   r   r   r   rf   r   )rW   r   deltar   timer   rU   r   test_int_cast]  s   
"z-TestTimedeltaArithmeticNoPython.test_int_castN)ry   rz   r{   r  r   r#  r   r   r   r   r  Y  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   r   r   r   r   r   r   r   r   w  r   zTestDatetimeArithmetic.jitc                 c   sF    t   t jddtd d V  W d    d S 1 sw   Y  d S )Nignorez-Implicitly casting between incompatible kinds)messagecategory)warningscatch_warningsfilterwarningsDeprecationWarningr   r   r   r   silence_numpy_warningsz  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 ]v}d#D ]q}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qq|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 ]I}ttf |td+d*td+d W d,   n	1 sw   Y  ttf |td+d*td+d W d,   n	1 sw   Y  qd,S )-zQ
        Test `datetime64 + timedelta64` and `datetime64 - timedelta64`.
        c                    s     6  | ||| |f  || || |f | | || |f | | | W d    d S 1 s=w   Y  d S r   r,  r   r   addrW   subr   r   r     s   
"z<TestDatetimeArithmetic.test_add_sub_timedelta.<locals>.checkr   r   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)rK   -01-12d   r   ir   r   r   
2014-01-01r_   N)	r   r&   r(   r   r   rd   rf   r   r   )rW   r   Zdt_strZ	dt_suffixdttdrV   r   r.  r   test_add_sub_timedelta  s`   

	"z-TestDatetimeArithmetic.test_add_sub_timedeltac                 C   s<   g d}g d}dd t ||D }|dd |D 7 }|S )N)r1  r2  r3  Z1968Z1969Z1973r   Z2004Z2005Z2100r4  Z2401)rK   r5  r6  z-02-28z-12-31z-01-05T12:30:56Zz-01-05T12:30:56.008Zc                 S   s   g | ]
\}}t || qS r   r   ).0rS   rT   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    )rY   rZ   )rW   Zdt_yearsZdt_suffixesdtsr   r   r   datetime_samples  s
   z'TestDatetimeArithmetic.datetime_samplesc                    s6    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   1   }t||D ]\}}t	t
|t
|szqk |||| ||f qkW d   dS 1 sw   Y  dS )z1
        Test `datetime64 - datetime64`.
        Nc                    sv      -  | || | | |f  || ||  | |f  | | | W d    d S 1 s4w   Y  d S r   r-  r   rW   r0  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-01r   )r   r(   r   r   r,  r?  rY   rZ   r   rt   r   r   )rW   r   r>  rS   rT   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 ]Q}|j	j
dd d d }t|}t||d  }|D ]2}|d| }tt|t|sqψ ||d	 |||td| d	 ||td| |d	 qqd S )Nc                    s2  |}| }t | st |rkd}d}| || |f | || |f || | |f || | |f | || |f | || |f || | |f || | |f    | ||| ||f  || || ||f | ||| ||f || || ||f |r| || |f | || |f || | |f || | |f | || |f | || |f || | |f || | |f | |k| W d    d S 1 sw   Y  d S r   )r   r   rO   r,  r   rN   r   )r   r   r   r   r   r   rW   r   r   check_eq  s:   
$z9TestDatetimeArithmetic.test_comparisons.<locals>.check_eqc                    s   |}| }t | st |rd}d} R t}|| ||| ||f || || ||f | ||| ||f || || ||f |rY | |d | |k | W d    d S 1 slw   Y  d S r   )r   r   r,  r   r/   r   )rS   rT   r   r   r   r   )rC  r   r   r   rW   r   r   check_lt  s   

"z9TestDatetimeArithmetic.test_comparisons.<locals>.check_ltr   rA  Fz2014-01Tr8  r   z
2014-01-02r   z2014-01-01T00:01:00Zr   z2014-01-01T00:01Zr   z2014-01-01T00:01:01Zr   r   [r_   r   r   zM8[%s])r   r-   r.   r/   r0   r1   r2   r   r?  r   r
  splitr]   indexr   r   rt   r   r   r   )	rW   rD  r>  rS   Za_unitrR   Zunitsr   rT   r   )rC  r   r   r   r   r   r   rW   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 ]	\}}||| q9q1d S )	Nc                    r  r   r   r  r  r   r   r   Q  r  z3TestDatetimeArithmetic._test_min_max.<locals>.checkr   r   r_   r   r   r   )r   r   rY   rZ   r  r   r  r   r  O  s   
""z$TestDatetimeArithmetic._test_min_maxc                 C   r  r   r  r   r   r   r   r  [  r  zTestDatetimeArithmetic.test_minc                 C   r  r   r  r   r   r   r   r  ^  r  zTestDatetimeArithmetic.test_maxN)ry   rz   r{   r  r   r   
contextlibcontextmanagerr,  r;  r?  rB  rH  r  r  r  r   r   r   r   r$  s  s    

	A	fr$  c                   @   s   e Zd ZeddZdS )TestDatetimeArithmeticNoPythonTr~   N)ry   rz   r{   r  r   r   r   r   r   rK  a  s    rK  c                   @   s4   e Zd ZdZdddZdd ZdddZd	d
 ZdS )TestMetadataScalingFactorzf
    Tests than non-1 scaling factors are not supported in datetime64
    and timedelta64 dtypes.
    Nc                 C   s@   |d u rddi}t di |t}| |tddtd d S )Nr   Tr   10Y2010r   )r   r-   rN   r   rW   r   r   r   r   r   test_datetimel  s   z'TestMetadataScalingFactor.test_datetimec                 C   >   |    | jddid W d    d S 1 sw   Y  d S Nr   T)r   )assertTypingErrorrP  r   r   r   r   test_datetime_npmr     
"z+TestMetadataScalingFactor.test_datetime_npmc                 C   sB   |d u rddi}t di |t}| |tddtdd d S )Nr   Tr   rM     r   r   )r   r-   rN   r   rO  r   r   r   test_timedeltav  s    z(TestMetadataScalingFactor.test_timedeltac                 C   rQ  rR  )rS  rW  r   r   r   r   test_timedelta_npm|  rU  z,TestMetadataScalingFactor.test_timedelta_npmr   )ry   rz   r{   r|   rP  rT  rW  rX  r   r   r   r   rL  f  s    

rL  c                   @      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|||||| qYdS )zC
        Test the division of a timedelta by numeric types
        c                 S   r*   r   r   r  r   r   r   arr_div  r'   z.TestDatetimeDeltaOps.test_div.<locals>.arr_divr   r_   N)	r   r   ZonesTIMEDELTA_MTIMEDELTA_Yr   Zfloat64rN   array_equal)rW   r[  py_funccfunc
test_casesrS   rT   r   r   r   r     s   	 zTestDatetimeDeltaOps.test_divN)ry   rz   r{   r   r   r   r   r   rZ        rZ  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dd  Zed!d" Zed#d$ Zed%d& Zed'd( Z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u ry|t d|ft d|ft d|ft d|fg |D ]\}	}
| t ||	|
||	|
 q{dS )zY
        Test the addition/subtraction of a datetime array with a timedelta type
        c                    
    | |S r   r   r  	operationr   r   impl  r@   z6TestDatetimeArrayOps._test_td_add_or_sub.<locals>.impl
2011-01-01
1971-02-02
2021-03-03
2004-12-07r  r   zdatetime64[D]parallel  i*N)	r   array
datetime64r   r   r/  extendrN   r^  )rW   rf  rn  rg  Zarr_oneZarr_twor_  r`  ra  rS   rT   r   re  r   _test_td_add_or_sub  sD   
 z(TestDatetimeArrayOps._test_td_add_or_subc                 C      |  tjd d S r   rs  r   r/  r   r   r   r   test_add_td     z TestDatetimeArrayOps.test_add_tdc                 C   rt  NTru  r   r   r   r   test_add_td_parallel     z)TestDatetimeArrayOps.test_add_td_parallelc                 C   rt  r   rs  r   subtractr   r   r   r   test_sub_td  rw  z TestDatetimeArrayOps.test_sub_tdc                 C   rt  rx  r{  r   r   r   r   test_sub_td_parallel  rz  z)TestDatetimeArrayOps.test_sub_td_parallelc                    s   t  fdd} j}td| d}| ttf| |tjt	dgddt
dd	 W d
   d
S 1 s:w   Y  d
S )z
        Tests that attempting to add/sub a datetime64 and timedelta64
        with types that cannot be cast raises a reasonable exception.
        c                    rd  r   r   r  re  r   r   rg       
z<TestDatetimeArrayOps._test_add_sub_td_no_match.<locals>.implzufunc 'z<' is not supported between datetime64[ns] and timedelta64[M]rh  r  rl  ro  r   N)r   ry   reescapeassertRaisesRegexr   r   r   rp  rq  r   )rW   rf  rg  fnamer   r   re  r   _test_add_sub_td_no_match  s   
"z.TestDatetimeArrayOps._test_add_sub_td_no_matchc                 C      |  tj d S r   )r  r   r/  r   r   r   r   test_add_td_no_match     z)TestDatetimeArrayOps.test_add_td_no_matchc                 C   r  r   )r  r   r|  r   r   r   r   test_sub_td_no_match  r  z)TestDatetimeArrayOps.test_sub_td_no_matchc                 C   s  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}|S )Nr   r   r_   r   r   rh  ri  z
1900-01-01rj  rk  r   r   r   )r   rp  r   r   )rW   ra  r   r   r   _get_testcases  s   Qz#TestDatetimeArrayOps._get_testcasesc                    s   |r t ju rdd }ndd }n fdd}|}t|d|}|  }|D ]+}||}	||}
t |	s:t |
rK| t |	 | t |
 q&| |	|
 q&d S )Nc                 S      |   S r   r=   arrr   r   r   rg  >  r'   z0TestDatetimeArrayOps._test_min_max.<locals>.implc                 S   r  r   rA   r  r   r   r   rg  A  r'   c                    s    | S r   r   r  re  r   r   rg  D  r'   rm  )r   r>   r   r  r   rN   rd   )rW   rf  rn  methodrg  r_  r`  ra  r  Zpy_resZc_resr   re  r   r  ;  s    


z"TestDatetimeArrayOps._test_min_maxc                 C      |  tdd d S r   )r  r>   r   r   r   r   test_min_funcT  rw  z"TestDatetimeArrayOps.test_min_funcc                 C      |  tjdd d S r   r  r   r>   r   r   r   r   test_np_min_funcW  r   z%TestDatetimeArrayOps.test_np_min_funcc                 C      |  tjdd d S r   r  r   r   r   r   test_min_methodZ  r   z$TestDatetimeArrayOps.test_min_methodc                 C   r  r   )r  rB   r   r   r   r   test_max_func]  rw  z"TestDatetimeArrayOps.test_max_funcc                 C   r  r   r  r   rB   r   r   r   r   test_np_max_func`  r   z%TestDatetimeArrayOps.test_np_max_funcc                 C   r  r   r  r   r   r   r   test_max_methodc  r   z$TestDatetimeArrayOps.test_max_methodc                 C   r  NTFr  r   r   r   r   test_min_func_parallelf     z+TestDatetimeArrayOps.test_min_func_parallelc                 C   r  rx  r  r   r   r   r   test_min_method_parallelj  r  z-TestDatetimeArrayOps.test_min_method_parallelc                 C   r  r  r  r   r   r   r   test_max_func_paralleln  r  z+TestDatetimeArrayOps.test_max_func_parallelc                 C   r  rx  r  r   r   r   r   test_max_method_parallelr  r  z-TestDatetimeArrayOps.test_max_method_parallelc                    s   ddl m}m}m} |||g}dd |D } fdd}  }t||D ]>\}}	|D ]7}
t|
}
tdt	d|
j
d D ]$}tjd|
j
|}|
| }|dkrZ|\}|||	|
| |||	|
| q=q+q%d S )	Nr_   )searchsortedsearchsorted_leftsearchsorted_rightc                 S   s   g | ]}t |qS r   )r   )r<  fnr   r   r   r=  {  s    zCTestDatetimeArrayOps.test_searchsorted_datetime.<locals>.<listcomp>c                    s$   | ||}|||}  || d S r   r   )r   r`  rS   vr   gotr   r   r   r   }  s   

z>TestDatetimeArrayOps.test_searchsorted_datetime.<locals>.checkr   r   )Ztest_np_functionsr  r  r  r  r  r   sortranger>   sizerandomrandint)rW   r  r  r  Zpyfunc_listZ
cfunc_listr   r  r   r`  r  nidxvsr  r   r   r   test_searchsorted_datetimev  s$   

z/TestDatetimeArrayOps.test_searchsorted_datetimeN)ry   rz   r{   rs  rv  r   ry  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rc    s8    &

T



rc  c                   @   rY  )TestDatetimeTypeOpsc                    s   t dd }t dd }t dd }tdd}td	d}|| } fd
d}|||g}|||g}	t||	D ]	\}
}||
| q8d S )Nc                 S   s
   t | tS r   )
isinstancecomplexr   r   r   r   
is_complex  r  z@TestDatetimeTypeOps.test_isinstance_datetime.<locals>.is_complexc                 S      t | tjS r   )r  r   rq  r   r   r   r   is_datetime     zATestDatetimeTypeOps.test_isinstance_datetime.<locals>.is_datetimec                 S   r  r   )r  r   r   r   r   r   r   is_timedelta  r  zBTestDatetimeTypeOps.test_isinstance_datetime.<locals>.is_timedeltar_   r   r   c                    sb     | j dt|j d | |}| |} || W d    d S 1 s*w   Y  d S )N())ZsubTestry   typer_  rd   )Zjit_funcr$   r  expectr   r   r   r     s
    
"z;TestDatetimeTypeOps.test_isinstance_datetime.<locals>.check)r   r   rq  rY   rZ   )rW   r  r  r  Zdt_aZdt_bZtd_cr   fnsr   r  argr   r   r   test_isinstance_datetime  s*   


z,TestDatetimeTypeOps.test_isinstance_datetimeN)ry   rz   r{   r  r   r   r   r   r    rb  r  c                   @   rY  )TestDatetimeIssuesc                 C   s|   t dd }tjddd}| t}|| W d    n1 s!w   Y  |jjd }d}| || d}| || d S )	Nc                 S   s   | d S r`   r   r3   r   r   r   rV     s   z1TestDatetimeIssues.test_10y_issue_9585.<locals>.frN  zdatetime64[10Y]rl  r   z
argument 0z(Unsupported array dtype: datetime64[10Y])r   r   rp  rf   r   r  r   r	  )rW   rV   r  er&  Zargument_indexZunsupported_typer   r   r   test_10y_issue_9585  s   

z&TestDatetimeIssues.test_10y_issue_9585N)ry   rz   r{   r  r   r   r   r   r    rb  r  __main__)Er|   rI  rY   r  Zunittestr(  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   r[   r\   r]   r&   r(   r)   r+   r,   r-   r.   r/   r0   r1   r2   r4   r6   r9   r;   r?   rC   rE   rI   rJ   r   r   rq  r   r}   r   r  r$  rK  rL  rZ  rc  r  r  ry   mainr   r   r   r   <module>   st    

v6  J o y$
