B
      ›\Ë{  ã               @   s¦  d Z ddlmZ ddl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mZmZmZmZ ddlmZ ddlmZ ddlmZm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,G d+d,„ d,eƒZ-ej.Z/ej0Z1G d-d.„ d.eƒZ2G d/d0„ d0eƒZ3G d1d2„ d2e3ƒZ4G d3d4„ d4eƒZ5G d5d6„ d6e5ƒZ6G d7d8„ d8eƒZ7e8d9kr¢e
 9¡  dS ):z0
Test np.datetime64 and np.timedelta64 support.
é    )Úprint_functionN)ÚconfigÚjitÚ
npdatetimeÚtypesÚ	vectorizeÚnumpy_support)Úversion)ÚTypingErroré   )ÚTestCaseÚtagc             C   s   t  | j¡}|jS )N)r   Z
from_dtypeÚdtypeÚunit)ÚvalZty© r   ú:lib/python3.7/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 )Nr   )ÚxÚyr   r   r   Úadd_usecase!   s    r#   c             C   s   | | S )Nr   )r!   r"   r   r   r   Úsub_usecase$   s    r$   c             C   s   | | S )Nr   )r!   r"   r   r   r   Úmul_usecase'   s    r%   c             C   s   | | S )Nr   )r!   r"   r   r   r   Údiv_usecase*   s    r&   c             C   s   | | S )Nr   )r!   r"   r   r   r   Úfloordiv_usecase-   s    r'   c             C   s   | |kS )Nr   )r!   r"   r   r   r   Ú
eq_usecase0   s    r(   c             C   s   | |kS )Nr   )r!   r"   r   r   r   Ú
ne_usecase3   s    r)   c             C   s   | |k S )Nr   )r!   r"   r   r   r   Ú
lt_usecase6   s    r*   c             C   s   | |kS )Nr   )r!   r"   r   r   r   Ú
le_usecase9   s    r+   c             C   s   | |kS )Nr   )r!   r"   r   r   r   Ú
gt_usecase<   s    r,   c             C   s   | |kS )Nr   )r!   r"   r   r   r   Ú
ge_usecase?   s    r-   c             C   s   | 
 S )Nr   )r!   r   r   r   Úpos_usecaseB   s    r.   c             C   s   |  S )Nr   )r!   r   r   r   Úneg_usecaseE   s    r/   c             C   s   t | ƒS )N)Úabs)r!   r   r   r   Úabs_usecaseH   s    r1   c                s   ‡ fdd„}|S )Nc                s   | ˆ  S )Nr   )r!   )Úconstr   r   Úadd_constantM   s    z'make_add_constant.<locals>.add_constantr   )r2   r3   r   )r2   r   Úmake_add_constantL   s    r4   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 )ÚTestModuleHelpersz7
    Test the various helpers in numba.npdatetime.
    c                s¾   t j‰ xDt tt¡D ]4\}}ˆ ˆ ||ƒ||f¡ ˆ ˆ ||ƒ||f¡ qW x,tD ]$}ˆ ˆ |dƒ¡ ˆ ˆ d|ƒ¡ qRW x td D ]}ˆ ˆ ||ƒ¡ q„W ‡ ‡fdd„}|tƒ |tƒ d S )NÚ )r6   c                sP   xJt | ƒD ]>\}}x4| d |… D ]$}ˆ ˆ ||ƒ¡ ˆ ˆ ||ƒ¡ q W q
W d S )N)Ú	enumerateÚ
assertTrueÚassertFalse)ÚgroupÚiÚaÚb)ÚfÚselfr   r   Úcheck_units_groupb   s    zDTestModuleHelpers.test_can_cast_timedelta.<locals>.check_units_group)	r   Zcan_cast_timedelta_unitsÚ	itertoolsÚproductÚ
date_unitsÚ
time_unitsr9   Ú	all_unitsr8   )r?   r<   r=   r   r@   r   )r>   r?   r   Útest_can_cast_timedeltaW   s    
z)TestModuleHelpers.test_can_cast_timedeltac                sò   t j‰ x"td D ]}ˆ ˆ ||ƒd¡ qW xtD ]}ˆ ˆ d|ƒd¡ q0W x<t tt¡D ],\}}ˆ ˆ ||ƒd ¡ ˆ ˆ ||ƒd ¡ qXW ‡ ‡fdd„}|tƒ |tƒ ˆ ˆ ddƒd¡ ˆ ˆ d	d
ƒd¡ ˆ ˆ d	dƒd¡ ˆ ˆ d	dƒd¡ d S )N)r6   r   r6   c                sZ   xTt | ƒD ]H\}}x>| d |… D ].}ˆ ˆ ||ƒd||f¡ ˆ ˆ ||ƒd ¡ q W q
W d S )Nr   )r7   ZassertGreaterÚassertIs)r:   r;   r<   r=   )r>   r?   r   r   r@   w   s    zFTestModuleHelpers.test_timedelta_conversion.<locals>.check_units_groupr   r   é   r   r   é¨   r   i`'  r   l     Ç!3)	r   Zget_timedelta_conversion_factorrE   ÚassertEqualrA   rB   rD   rC   rG   )r?   r   r<   r=   r@   r   )r>   r?   r   Útest_timedelta_conversionm   s    
z+TestModuleHelpers.test_timedelta_conversionc                s  t j‰ ‡ ‡fdd„}x"t tt¡D ]\}}|||ƒ q"W x"t tt¡D ]\}}ˆ ||ƒ qFW x"t tt¡D ]\}}ˆ ||ƒ qjW x"t tt¡D ]\}}ˆ ||ƒ qŽW xNtD ]F}ˆ ˆ ||ƒ|ddf¡ ˆ ˆ |dƒ|ddf¡ ˆ ˆ d|ƒd¡ qªW ˆ ˆ 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 Q R X d S )N)ÚassertRaisesÚRuntimeError)Údt_unitÚtd_unit)r>   r?   r   r   Úcheck_errorˆ   s    zFTestModuleHelpers.test_datetime_timedelta_scaling.<locals>.check_errorr   r6   )r6   r   r   r   r   )r   rH   r   )r   r   rH   r   r   )r   é   r   )r   r   rQ   r   )r   i€:	 r   )r   r   i€:	 r    )r    l     ÈNÎZor   )r    r   l     ÈNÎZo)r   i±: i  )r   i±: ið
  )r   i±: iÀ  )r   i±: i@ƒ  )r   l   €YÀ` i  )r   l   €YÀ` iÀ  )r   Z!get_datetime_timedelta_conversionrA   rB   rD   rC   rE   rJ   )r?   rP   rN   rO   r   r   )r>   r?   r   Útest_datetime_timedelta_scaling†   s:    
z1TestModuleHelpers.test_datetime_timedelta_scalingc             C   s¸   t j}xBtD ]:}|  |||ƒ|¡ |  |d|ƒ|¡ |  ||dƒ|¡ qW |  |ddƒd¡ x*t tt¡D ]\}}|  |||ƒd ¡ qjW x*t tt¡D ]\}}|  |||ƒ|¡ q–W d S )Nr6   )	r   Z combine_datetime_timedelta_unitsrE   rJ   rA   rB   rD   rC   rG   )r?   r>   r   rN   rO   r   r   r   Ú%test_combine_datetime_timedelta_units­   s    
z7TestModuleHelpers.test_combine_datetime_timedelta_unitsc             C   s¾   t j}xtD ]}|  |||ƒ¡ qW d}d}x(t ||¡D ]\}}|  |||ƒ¡ q:W x(t ||¡D ]\}}|  |||ƒ¡ qdW x8t ||¡D ](\}}|  |||ƒ¡ |  |||ƒ¡ qŽW d S )N)r   r   r   r   )	r   r   r   r   r   r   r   r   r    )r   Ú	same_kindrE   r8   rA   rB   r9   )r?   r>   ÚuÚAÚBr<   r=   r   r   r   Útest_same_kind¹   s    
z TestModuleHelpers.test_same_kindN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rF   rK   rR   rS   rX   r   r   r   r   r5   R   s   'r5   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)Úsigr>   ÚargsÚexpected)r?   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)r?   rf   rc   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 )NT)r^   r_   é   é   )r   r%   rb   ra   )rc   r>   )r?   r   r   rf   Þ   s    zVTestMiscCompiling.test_vectorize_explicit_signature.<locals>._check_explicit_signaturer   z)NPTimedelta('s')(NPTimedelta('s'), int64))r   rg   Zint64)r?   rf   rc   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 )NT)r^   é   r   )r4   r   ra   rb   )r2   Úpyfuncr>   r!   re   )r?   r   r   Úcheckí   s
    
z7TestMiscCompiling.test_constant_datetime.<locals>.checkz
2001-01-01ÚNaTr   )r`   )r?   rn   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 )NT)r^   rl   r   )r4   r   ra   rb   )r2   rm   r>   r!   re   )r?   r   r   rn   ÷   s
    
z8TestMiscCompiling.test_constant_timedelta.<locals>.checkrl   r   éüÿÿÿro   )ra   )r?   rn   r   )r?   r   Útest_constant_timedeltaö   s    z)TestMiscCompiling.test_constant_timedeltaN)rY   rZ   r[   rh   rk   rp   rr   r   r   r   r   r]   Ì   s   
r]   c               @   sŽ   e Zd ZeddZdd„ Zedƒdd„ ƒZedƒdd	„ ƒZd
d„ Z	dd„ Z
dd„ Zedƒdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestTimedeltaArithmeticT)Úforceobjc             C   s   t f | jŽ|ƒS )N)r   Újitargs)r?   rm   r   r   r   r     s    zTestTimedeltaArithmetic.jitÚ	importantc          	      sP  ˆ  t¡‰ ‡ ‡fdd„}|tdƒtdƒtdƒƒ |tddƒtddƒtddƒƒ tjsŒ|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ƒƒ |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 Q R X d S )Nc                s(   ˆ  ˆ | |ƒ|¡ ˆ  ˆ || ƒ|¡ d S )N)rb   )r<   r=   re   )r>   r?   r   r   rn     s    z/TestTimedeltaArithmetic.test_add.<locals>.checkr   r_   ri   r   r   r   iBB r   r   é	   ro   r   )r   r#   ra   r   Ústrict_ufunc_typingrL   Ú	TypeErrorr
   )r?   rn   r   )r>   r?   r   Útest_add	  s    
z TestTimedeltaArithmetic.test_addc          	      sP  ˆ  t¡‰ ‡ ‡fdd„}|tdƒtdƒtdƒƒ |tddƒtddƒtddƒƒ tjsŒ|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ƒƒ |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 Q R X d S )Nc                s*   ˆ  ˆ | |ƒ|¡ ˆ  ˆ || ƒ| ¡ d S )N)rb   )r<   r=   re   )r>   r?   r   r   rn   #  s    z/TestTimedeltaArithmetic.test_sub.<locals>.checkri   r_   r   r   r   r   i¾Æ- r   r   é   ro   r   )r   r$   ra   r   rx   rL   ry   r
   )r?   rn   r   )r>   r?   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 )N)rb   )r<   r=   re   )r>   r?   r   r   rn   9  s    z/TestTimedeltaArithmetic.test_mul.<locals>.checkri   r_   rj   r   ro   rQ   g      ø?é
   iùÿÿÿiöÿÿÿg      ø¿Únanl            é   r   )r   r%   ra   ÚnpÚuint32Úfloat)r?   rn   r   )r>   r?   r   Útest_mul7  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 )N)rb   )r<   r=   re   )ÚdivÚfloordivr?   r   r   rn   P  s    z/TestTimedeltaArithmetic.test_div.<locals>.checkéýÿÿÿr   r_   éÿÿÿÿri   r   ro   r   rQ   g      à?é   iùÿÿÿg      ø?rq   g      @g        r~   )r   r&   r'   ra   r€   r   r‚   )r?   rn   r   )r„   r…   r?   r   Útest_divM  s     

z TestTimedeltaArithmetic.test_divc          	      s<  ˆ  t¡‰ ‡ ‡fdd„}|tdƒtdƒdƒ tjsH|tdƒtd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 Q R X d S )Nc                s   ˆ  ˆ | |ƒ|¡ d S )N)rb   )r<   r=   re   )r„   r?   r   r   rn   g  s    z;TestTimedeltaArithmetic.test_homogeneous_div.<locals>.checkrQ   ri   g«ªªªªª@r   r   gQFoËZc?g«ªªªª:¢@r   z+infiùÿÿÿz-infr~   Znatr   r   r   )	r   r&   ra   r   rx   r‚   rL   ry   r
   )r?   rn   r   )r„   r?   r   Útest_homogeneous_dive  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                s|   |}| }t jdkr0t | ¡s(t | ¡r0d}d}ˆ ˆ | |ƒ|¡ ˆ ˆ || ƒ|¡ ˆ ˆ| |ƒ|¡ ˆ ˆ|| ƒ|¡ d S )N)r   r   FT)r   r	   r€   Úisnatrb   )r<   r=   re   Úexpected_valÚnot_expected_val)ÚeqÚner?   r   r   rn     s    
z1TestTimedeltaArithmetic.test_eq_ne.<locals>.checkr   r_   FTr   iÐ  r   r   rH   r   ÚNatim  r   in  ro   r   )r   r(   r)   ra   )r?   rn   r   )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 d Q R X ˆ ttf¡ ˆ tddƒtddƒƒ W d Q R X ˆ ttf¡ ˆtddƒtddƒƒ W d Q R X ˆ ttf¡ ˆ tddƒtddƒƒ W d Q R X d S )Nc                sX   |}| }t jdkr0t | ¡s(t | ¡r0d}d}ˆ ˆ| |ƒ|¡ ˆ ˆ | |ƒ|¡ d S )N)r   r   F)r   r	   r€   r‹   rb   )r<   r=   re   rŒ   r   )ÚgeÚltr?   r   r   rn   £  s    
z1TestTimedeltaArithmetic.test_lt_ge.<locals>.checkr   r_   TFr   r   é=   é<   r   r   lûÿÿÿÿÿÿÿ r   im  r   ro   )r   r*   r-   ra   rL   ry   r
   )r?   rn   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 d Q R X ˆ ttf¡ ˆ tddƒtddƒƒ W d Q R X ˆ ttf¡ ˆtddƒtddƒƒ W d Q R X ˆ ttf¡ ˆ tddƒtddƒƒ W d Q R X d S )Nc                sX   |}| }t jdkr0t | ¡s(t | ¡r0d}d}ˆ ˆ| |ƒ|¡ ˆ ˆ | |ƒ|¡ d S )N)r   r   F)r   r	   r€   r‹   rb   )r<   r=   re   rŒ   r   )ÚgtÚler?   r   r   rn   Ë  s    
z1TestTimedeltaArithmetic.test_le_gt.<locals>.checkr   r_   TFr   r   r”   r•   é;   r   r   lûÿÿÿÿÿÿÿ r   im  r   ro   )r   r+   r,   ra   rL   ry   r
   )r?   rn   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 )N)rb   )r<   )Úposr?   r   r   rn   ò  s    z/TestTimedeltaArithmetic.test_pos.<locals>.checkri   rq   r   ro   )r   r.   ra   )r?   rn   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 )N)rb   )r<   )Únegr?   r   r   rn   þ  s    z/TestTimedeltaArithmetic.test_neg.<locals>.checkri   rq   r   ro   )r   r/   ra   )r?   rn   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 )N)rb   r0   )r<   )r>   r?   r   r   rn   
  s    z/TestTimedeltaArithmetic.test_abs.<locals>.checkri   rq   r   ro   )r   r1   ra   )r?   rn   r   )r>   r?   r   Útest_abs  s    
z TestTimedeltaArithmetic.test_absN)rY   rZ   r[   Údictru   r   r   rz   r|   rƒ   r‰   rŠ   r‘   r–   rš   rœ   rž   rŸ   r   r   r   r   rs     s   
%((rs   c               @   s   e Zd ZeddZdS )ÚTestTimedeltaArithmeticNoPythonT)r^   N)rY   rZ   r[   r    ru   r   r   r   r   r¡     s   r¡   c               @   s\   e Zd ZeddZdd„ Zejdd„ ƒZe	dƒdd	„ ƒZ
d
d„ Zdd„ Ze	dƒdd„ ƒZdS )ÚTestDatetimeArithmeticT)rt   c             C   s   t f | jŽ|ƒS )N)r   ru   )r?   rm   r   r   r   r     s    zTestDatetimeArithmetic.jitc          	   c   s.   t  ¡  t jddtd d V  W d Q R X d S )NÚignorez-Implicitly casting between incompatible kinds)ÚmessageÚcategory)ÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarning)r?   r   r   r   Úsilence_numpy_warnings!  s
    
z-TestDatetimeArithmetic.silence_numpy_warningsrv   c                sä  ˆ  t¡‰ ˆ  t¡‰‡ ‡‡fdd„}tjsB|tdƒt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ƒƒ |tdƒtddƒtdƒƒ tjs|tdƒtddƒtdƒƒ |tdƒtddƒtdƒƒ tjs"|tdƒt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js’|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js |tdƒtd$d%ƒtd&ƒƒ |td'ƒtdd%ƒtd(ƒƒ |td'ƒtdd)ƒtd*ƒƒ x d+D ]ø}xðd,D ]è}t|| ƒ}xÔtddƒtdd
ƒtd-dƒtd.dƒtd/dƒtd0dƒtd-d
ƒtd.d
ƒtd/d
ƒtd0d
ƒtd-dƒtd.dƒtd/dƒtd0dƒgD ]\}ˆ ˆ ||ƒ|| ||f¡ ˆ ˆ ||ƒ|| ||f¡ ˆ ˆ|| ƒ|| ||f¡ qìW qfW q\W |td1ƒtdƒtd1ƒƒ tjs”|td1dƒtdƒtd1dƒƒ |td1dƒtdd%ƒtd1dƒƒ |td1dƒtdd)ƒtd1d)ƒƒ tjsò|tdƒtd1ƒtd1dƒƒ |tdƒtd1d
ƒtd1d
ƒƒ |td2ƒtd1d
ƒtd1dƒƒ tjsN|td1dƒtd1ƒtd1dƒƒ |td1dƒtd1d)ƒtd1d)ƒƒ xrˆ ˆfD ]f}ˆ t	t
f¡ |td3d2ƒtd3dƒƒ W d4Q R X ˆ t	t
f¡ |td3d2ƒtd3dƒƒ W d4Q R X qvW d4S )5zQ
        Test `datetime64 + timedelta64` and `datetime64 - timedelta64`.
        c          	      sr   ˆ  ¡ ` ˆ ˆ | |ƒ|| |f¡ ˆ ˆ || ƒ|| |f¡ ˆ ˆ| | ƒ|| |f¡ ˆ | | |¡ W d Q R X d S )N)rª   rb   )r<   r=   re   )Úaddr?   Úsubr   r   rn   2  s
    
z<TestDatetimeArithmetic.test_add_sub_timedelta.<locals>.checkÚ2014r_   Z2016r   r   z2014-03ri   r   z
2014-01-16rl   r   z
2014-01-05Ú2000im  z
2000-12-31Z2001r”   r   z2001-01-01T01:01Zr   z2001-01-01T00:01:01Zz2014-02z2014-04z2016-02z
2014-02-03z2014-02-01T00:01:01Zz
2014-01-07z
2014-02-02é   z
2014-03-01z
2012-02-02z
2012-02-29z
2012-02-16éI   r   z2014-02-05T01Zz2000-01-01T01:02:03Zz2000-01-01T03:02:03Zr   z2000-01-01T01:02:03.002Z)Ú600Ú601Ú604Z801Z1900Z1904Z2200Z2300Z2304Ú2400Z6001)r6   z-01z-12éd   i'  iœÿÿÿiðØÿÿro   z
2014-01-01r   N)r   r#   r$   r   rx   r`   ra   rJ   rL   ry   r
   )r?   rn   Zdt_strZ	dt_suffixZdtZtdr>   r   )r«   r?   r¬   r   Útest_add_sub_timedelta+  st    

	
0 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2401r6   z-01z-12z-02-28z-12-31z-01-05T12:30:56Zz-01-05T12:30:56.008Zc             S   s   g | ]\}}t || ƒ‘qS r   )r`   )Ú.0r<   r=   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    )rA   rB   )r?   Zdt_yearsZdt_suffixesÚdtsr   r   r   Údatetime_samples~  s    
z'TestDatetimeArithmetic.datetime_samplesc          	      sN  ˆ   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jsˆ|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ƒƒ ˆ  ¡ d ˆ  ¡ }xTt 	||¡D ]D\}}tjr t
 t|ƒt|ƒ¡s qøˆ  ˆ||ƒ|| ||f¡ qøW W dQ R X dS )z1
        Test `datetime64 - datetime64`.
        Nc          	      s`   ˆ   ¡ N ˆ  ˆ| |ƒ| | | |f¡ ˆ  ˆ|| ƒ||  | |f¡ ˆ  | | |¡ W d Q R X d S )N)rª   rb   )r<   r=   re   )r?   r¬   r   r   rn   Œ  s    
z>TestDatetimeArithmetic.test_datetime_difference.<locals>.checkr­   Ú2017r†   r   z2014-02z2017-01iÝÿÿÿr   z
2014-02-28z
2015-03-01i’þÿÿr   ro   r®   z
2000-01-01)N)r   r$   r`   ra   r   rx   rª   rº   rA   rB   r   rT   r   rb   )r?   rn   r¹   r<   r=   r   )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j	sH|tdƒtdƒd	ƒ |tddƒtdƒd	ƒ tj	s||tddƒtdƒd	ƒ ˆ tdƒtdƒd	ƒ tj	sÆˆ tddƒtdƒd	ƒ ˆ tddƒtddƒd	ƒ ˆ 
¡ }x¾|D ]¶}|jj d¡d d d… }t |¡}t||d … }xz|D ]r}| d| ¡}tj	rFt t|ƒt|ƒ¡sFqˆ ||d	ƒ |||t d|¡ d	ƒ ||t d|¡ |d	ƒ qW qÔW d S )Nc          	      s(  |}| }t jdkràt | ¡s(t |¡ràd}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 d Q R X d S )N)r   r   FT)r   r	   r€   r‹   r9   rª   rb   r8   )r<   r=   re   rŒ   r   )rŽ   r’   r—   r˜   r“   r   r?   r   r   Úcheck_eq°  s:    
z9TestDatetimeArithmetic.test_comparisons.<locals>.check_eqc          	      sÚ   |}| }t jdkr0t | ¡s(t |¡r0d}d}ˆ ¡ ˜ ˆ t¡}ˆ || |ƒ|| ||f¡ ˆ ˆ|| ƒ|| ||f¡ ˆ ˆ| |ƒ|| ||f¡ ˆ ˆ|| ƒ|| ||f¡ |r¼ˆ | |dƒ ˆ | |k |¡ W d Q R X d S )N)r   r   F)r   r	   r€   r‹   rª   r   r*   rb   )r<   r=   re   rŒ   r   r“   )r½   r’   r—   r˜   r?   r   r   Úcheck_ltÖ  s    


z9TestDatetimeArithmetic.test_comparisons.<locals>.check_ltr­   r»   Fz2014-01Tz
2014-01-01r   z
2014-01-02z
2014-01-06z2014-01-01T00:01:00Zr   z2014-01-01T00:01Zr   z2014-01-01T00:01:01Zro   r   r   r   ú[r   r‡   rj   zM8[%s])r   r(   r)   r*   r+   r,   r-   r`   r   rx   rº   r   ÚstrÚsplitrE   ÚindexZastyper   rT   r   r€   Útimedelta64)	r?   r¾   r¹   r<   Za_unitr;   Zunitsr   r=   r   )r½   rŽ   r’   r—   r˜   r“   r   r?   r   Útest_comparisons¦  sT    





&





z'TestDatetimeArithmetic.test_comparisonsN)rY   rZ   r[   r    ru   r   Ú
contextlibÚcontextmanagerrª   r   r¶   rº   r¼   rÄ   r   r   r   r   r¢     s   

S	r¢   c               @   s   e Zd ZeddZdS )ÚTestDatetimeArithmeticNoPythonT)r^   N)rY   rZ   r[   r    ru   r   r   r   r   rÇ     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(   r8   r`   )r?   ru   rŽ   r   r   r   Útest_datetime#  s    z'TestMetadataScalingFactor.test_datetimec          	   C   s$   |   ¡  | jdd W d Q R X d S )NT)r^   )Ú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 )Nr_   rÉ   é   r   )r   r(   r8   ra   )r?   ru   rŽ   r   r   r   Útest_timedelta+  s    z(TestMetadataScalingFactor.test_timedeltac          	   C   s$   |   ¡  | jdd W d Q R X d S )NT)r^   )rË   rÎ   )r?   r   r   r   Útest_timedelta_npm/  s    
z,TestMetadataScalingFactor.test_timedelta_npmN)rY   rZ   r[   r\   rÊ   rÌ   rÎ   rÏ   r   r   r   r   rÈ     s
   rÈ   Ú__main__):r\   Z
__future__r   rÅ   rA   r¦   Znumpyr€   Znumba.unittest_supportZunittest_supportZunittestZnumbar   r   r   r   r   r   Znumba.numpy_supportr	   Znumpy_versionZnumba.errorsr
   Zsupportr   r   r   rC   rD   rE   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r1   r4   r5   rÃ   ra   Z
datetime64r`   r]   rs   r¡   r¢   rÇ   rÈ   rY   Úmainr   r   r   r   Ú<module>   sX    v6     
