U
    iâËd5�  ã                   @   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@eAdGk�re B¡  dS )Hz0
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   úT/home/sam/Atlas/atlas_env/lib/python3.8/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%   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                 C   s   t | ƒS r   )Úintr1   r   r   r   Úint_cast_usecaseX   s    r?   c                    s   ‡ fdd„}|S )Nc                    s   | ˆ  S r   r   r1   ©Úconstr   r   Úadd_constant\   s    z'make_add_constant.<locals>.add_constantr   )rA   rB   r   r@   r   Úmake_add_constant[   s    rC   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Ú ©rE   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_unitsrI   Ú	all_unitsrH   )rQ   rM   rN   r   rR   r   rO   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 ¡ qN‡ ‡fdd„}|tƒ |tƒ ˆ ˆ ddƒd¡ ˆ ˆ d	d
ƒd¡ ˆ ˆ d	dƒd¡ ˆ ˆ d	dƒd¡ d S )NrF   é   rE   c                    sR   t | ƒD ]D\}}| d |… D ].}ˆ ˆ ||ƒd||f¡ ˆ ˆ ||ƒd ¡ qqd S )NrY   )rG   ZassertGreaterÚassertIsrJ   rO   r   r   rR   †   s    zFTestModuleHelpers.test_timedelta_conversion.<locals>.check_units_groupr   r   é   r   r   é¨   r   i`'  r   l     Ç!3)	r   Zget_timedelta_conversion_factorrW   ÚassertEqualrS   rT   rV   rU   rZ   )rQ   r   rM   rN   rR   r   rO   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 ]\}}ˆ ||ƒ q`t tt¡D ]\}}ˆ ||ƒ q€t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_unitrO   r   r   Úcheck_error—   s    zFTestModuleHelpers.test_datetime_timedelta_scaling.<locals>.check_errorrY   rE   )rE   rY   rY   r   r   )r   r[   rY   )r   rY   r[   r   r   )r   é   rY   )r   rY   rd   r   )r   é€:	 rY   )r   rY   re   r"   )r"   ì     ÈNÎZorY   )r"   rY   rf   )r   é±: é�  )r   rg   ið
  )r   rg   éÀ  )r   rg   i@ƒ  )r   ì   €YÀ` rh   )r   rj   ri   )r   Z!get_datetime_timedelta_conversionrS   rT   rV   rU   rW   r]   )rQ   rc   ra   rb   r   r   rO   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 ]\}}|  |||ƒ|¡ qŒd S )NrE   )	r   Z combine_datetime_timedelta_unitsrW   r]   rS   rT   rV   rU   rZ   )rQ   rP   r   ra   rb   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 ](\}}|  |||ƒ¡ |  |||ƒ¡ q€d S )N)r   r   r   r   )	r   r   r   r   r   r   r    r!   r"   )r   Ú	same_kindrW   rH   rS   rT   rI   )rQ   rP   ÚuÚAÚBrM   rN   r   r   r   Útest_same_kindÈ   s    z TestModuleHelpers.test_same_kindN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rX   r^   rk   rl   rq   r   r   r   r   rD   a   s   'rD   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nopythonrY   r   é   r   )r   r&   ÚDTÚTDÚassertPreciseEqual)ÚsigrP   ÚargsÚexpected©rQ   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©rQ   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 )NTrw   rx   é   é   )r   r(   r{   rz   )r|   rP   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 ©NTrw   é   r   ©rC   r   rz   r{   ©rA   ÚpyfuncrP   r$   r~   r   r   r   Úcheckü   s
    
z7TestMiscCompiling.test_constant_datetime.<locals>.checkz
2001-01-01ÚNaTr   ©ry   ©rQ   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Ž   )rz   r�   r   r   r   Útest_constant_timedelta  s    z)TestMiscCompiling.test_constant_timedeltaN)rr   rs   rt   rƒ   r‡   r‘   r“   r   r   r   r   rv   Û   s   
rv   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©rQ   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   ©r{   ©rM   rN   r~   rO   r   r   r�     s    z/TestTimedeltaArithmetic.test_add.<locals>.checkrY   rx   r„   r   r   iBB r   r   é	   rŽ   r   r   )r   r&   rz   r_   Ú	TypeErrorr   r�   r   rO   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š   rO   r   r   r�   -  s    z/TestTimedeltaArithmetic.test_sub.<locals>.checkr„   rx   rY   r   r   i¾Æ- r   r   é   rŽ   r   r   )r   r'   rz   r_   rœ   r   r�   r   rO   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š   rO   r   r   r�   @  s    z/TestTimedeltaArithmetic.test_mul.<locals>.checkr„   rx   r…   r    rŽ   rd   ç      ø?é
   éùÿÿÿiöÿÿÿg      ø¿Únanl            é   r   )r   r(   rz   ÚnpÚuint32Úfloatr�   r   rO   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ÚfloordivrQ   r   r   r�   W  s    z/TestTimedeltaArithmetic.test_div.<locals>.checkéýÿÿÿr    rx   éÿÿÿÿr„   rY   rŽ   r   rd   g      à?é   r¢   r    r’   g      @g        r£   )r   r)   r*   rz   r¥   r¦   r§   r�   r   r©   r   Útest_divT  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ª   rQ   r   r   r�   n  s    z;TestTimedeltaArithmetic.test_homogeneous_div.<locals>.checkrd   r„   g«ªªªªª@r   r   gQFoËZc?g«ªªªª:¢@r   z+infr¢   z-infr£   ZnatrY   r   r   )r   r)   rz   r§   r_   rœ   r   r�   r   r°   r   Útest_homogeneous_divl  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                    sr   |}| }t  | ¡st  | ¡r&d}d}ˆ ˆ | |ƒ|¡ ˆ ˆ || ƒ|¡ ˆ ˆ| |ƒ|¡ ˆ ˆ|| ƒ|¡ d S ©NFT©r¥   Úisnatr{   ©rM   rN   r~   Úexpected_valÚnot_expected_val©ÚeqÚnerQ   r   r   r�   ƒ  s    z1TestTimedeltaArithmetic.test_eq_ne.<locals>.checkrY   rx   FTr   iÐ  r   r   r[   r   ÚNatém  r   in  rŽ   r   )r   r+   r,   rz   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                    sN   |}| }t  | ¡st  | ¡r&d}d}ˆ ˆ| |ƒ|¡ ˆ ˆ | |ƒ|¡ d S ©NFr³   rµ   ©ÚgeÚltrQ   r   r   r�   ¦  s    z1TestTimedeltaArithmetic.test_lt_ge.<locals>.checkrY   rx   TFr   r   é=   é<   r»   r   ìûÿÿÿÿÿÿÿ r   r¼   r   rŽ   )r   r-   r0   rz   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                    sN   |}| }t  | ¡st  | ¡r&d}d}ˆ ˆ| |ƒ|¡ ˆ ˆ | |ƒ|¡ d S r¾   r³   rµ   ©ÚgtÚlerQ   r   r   r�   Í  s    z1TestTimedeltaArithmetic.test_le_gt.<locals>.checkrY   rx   TFr   r   rÂ   rÃ   é;   r»   r   rÄ   r   r¼   r   rŽ   )r   r.   r/   rz   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™   ©rM   ©ÚposrQ   r   r   r�   ó  s    z/TestTimedeltaArithmetic.test_pos.<locals>.checkr„   r’   r   rŽ   )r   r2   rz   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Ë   ©ÚnegrQ   r   r   r�   ÿ  s    z/TestTimedeltaArithmetic.test_neg.<locals>.checkr„   r’   r   rŽ   )r   r3   rz   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   )r{   r4   rË   rO   r   r   r�     s    z/TestTimedeltaArithmetic.test_abs.<locals>.checkr„   r’   r   rŽ   )r   r5   rz   r�   r   rO   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   )r{   r6   rË   rO   r   r   r�     s    z0TestTimedeltaArithmetic.test_hash.<locals>.check))r„   )r’   )r„   r   )r’   r   )é   r   )rx   r   )rx   r   )rx   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   r7   Úziprz   Úlenry   )rQ   r�   ZTD_CASESZDT_CASESÚcaseÚtypr   rO   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™   ©rM   rN   ©rP   rQ   Úusecaser   r   r�   +  s    z4TestTimedeltaArithmetic._test_min_max.<locals>.checkr   rY   rx   rŽ   r   )r   rz   rS   rT   ©rQ   rð   r�   ZcasesrM   rN   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)rr   rs   rt   Ú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 )ÚTestTimedeltaArithmeticNoPythonTrw   c              	      s€   ˆ  t¡‰ ‡ ‡fdd„}dD ]\}}|t||ƒ d¡ƒ qdD ]}|t|ƒ d¡ƒ q>ˆjtdd�� ˆ td	ƒƒ W 5 Q R X d S )
Nc                    s   ˆ  ˆ | ƒt| ƒ¡ d S r   )r{   r>   rË   rO   r   r   r�   B  s    z<TestTimedeltaArithmeticNoPython.test_int_cast.<locals>.check))r„   r   )r’   r   )i0u  r   )i ¦�ýr   )rY   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   r?   rz   Úastypery   r_   r   )rQ   r�   Údeltar   Útimer   rO   r   Útest_int_cast@  s    
z-TestTimedeltaArithmeticNoPython.test_int_castN)rr   rs   rt   r÷   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   Z  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_warnings]  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  r{   rš   ©ÚaddrQ   Úsubr   r   r�   m  s
    
z<TestDatetimeArithmetic.test_add_sub_timedelta.<locals>.checkr×   rx   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)rE   ú-01ú-12éd   rÔ   iœÿÿÿrÕ   rŽ   r   ú
2014-01-01rY   N)	r   r&   r'   ry   rz   r]   r_   rœ   r   )rQ   r�   Zdt_strZ	dt_suffixÚdtÚtdrP   r   r	  r   Útest_add_sub_timedeltag  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2401rE   r  r  z-02-28z-12-31z-01-05T12:30:56Zz-01-05T12:30:56.008Zc                 S   s   g | ]\}}t || ƒ‘qS r   r�   )Ú.0rM   rN   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     )rS   rT   )rQ   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
|ƒ¡sôqÖˆ  ˆ||ƒ|| ||f¡ qÖW 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š   ©rQ   r  r   r   r�   ¶  s    
z>TestDatetimeArithmetic.test_datetime_difference.<locals>.checkr×   Ú2017r¬   r   rÚ   z2017-01iÝÿÿÿr   z
2014-02-28z
2015-03-01i’þÿÿr   rŽ   rÙ   z
2000-01-01)N)r   r'   ry   rz   r  r  rS   rT   r   rm   r   r{   )rQ   r�   r  rM   rN   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  | ¡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 5 Q R X d S r²   )r¥   r´   rI   r  r{   rH   rµ   )r¹   rÀ   rÇ   rÈ   rÁ   rº   rQ   r   r   Úcheck_eqÕ  s8    z9TestDatetimeArithmetic.test_comparisons.<locals>.check_eqc              	      sÐ   |}| }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{   )rM   rN   r~   r¶   r·   rÁ   )r  rÀ   rÇ   rÈ   rQ   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   ú[rY   r­   r…   zM8[%s])r   r+   r,   r-   r.   r/   r0   ry   r  r   ÚstrÚsplitrW   Úindexrû   r   rm   r   r¥   Útimedelta64)	rQ   r  r  rM   Za_unitrL   Zunitsr   rN   r   )r  r¹   rÀ   rÇ   rÈ   rÁ   rº   rQ   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�   4  s    z3TestDatetimeArithmetic._test_min_max.<locals>.checkr   r   rY   rx   rŽ   r   )r   ry   rS   rT   rñ   r   rï   r   rò   2  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ö   A  s    zTestDatetimeArithmetic.test_maxN)rr   rs   rt   r÷   r—   r   Ú
contextlibÚcontextmanagerr  r  r  r  r%  rò   rô   rö   r   r   r   r   rÿ   V  s   

	A	frÿ   c                   @   s   e Zd Zedd�ZdS )ÚTestDatetimeArithmeticNoPythonTrw   N)rr   rs   rt   r÷   r—   r   r   r   r   r(  D  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+   rH   ry   ©rQ   r—   r¹   r   r   r   Útest_datetimeO  s    z'TestMetadataScalingFactor.test_datetimec              	   C   s$   |   ¡ � | jdd� W 5 Q R X d S ©NTrw   )ÚassertTypingErrorr,  r   r   r   r   Útest_datetime_npmS  s    
z+TestMetadataScalingFactor.test_datetime_npmc                 K   s.   t f |Žtƒ}|  |tddƒtddƒƒ¡ d S )Nrx   r*  é   r   )r   r+   rH   rz   r+  r   r   r   Útest_timedeltaW  s    z(TestMetadataScalingFactor.test_timedeltac              	   C   s$   |   ¡ � | jdd� W 5 Q R X d S r-  )r.  r1  r   r   r   r   Útest_timedelta_npm[  s    
z,TestMetadataScalingFactor.test_timedelta_npmN)rr   rs   rt   ru   r,  r/  r1  r2  r   r   r   r   r)  I  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 |||ƒ|||ƒ¡¡ q²dS )zC
        Test the division of a timedelta by numeric types
        c                 S   s   | | S r   r   rî   r   r   r   Úarr_dive  s    z.TestDatetimeDeltaOps.test_div.<locals>.arr_divr„   rY   N)	r   r¥   ZonesÚTIMEDELTA_MÚTIMEDELTA_Yr†   Zfloat64rH   Úarray_equal)rQ   r4  Úpy_funcÚcfuncÚ
test_casesrM   rN   r   r   r   r¯   a  s    ù	zTestDatetimeDeltaOps.test_divN)rr   rs   rt   r¯   r   r   r   r   r3  `  s   r3  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  ||	|
ƒ||	|
ƒ¡¡ qödS )zY
        Test the addition/subtraction of a datetime array with a timedelta type
        c                    s
   ˆ | |ƒS r   r   rî   ©Ú	operationr   r   Úimpl}  s    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
  ÚextendrH   r7  )rQ   r=  rE  r>  Zarr_oneZarr_twor8  r9  r:  rM   rN   r   r<  r   Ú_test_td_add_or_suby  sB    üûüûü
üz(TestDatetimeArrayOps._test_td_add_or_subc                 C   s   |   tjd¡ d S r¾   ©rJ  r¥   r
  r   r   r   r   Útest_add_tdŸ  s    z TestDatetimeArrayOps.test_add_tdc                 C   s   |   tjd¡ d S ©NTrK  r   r   r   r   Útest_add_td_parallel¢  s    z)TestDatetimeArrayOps.test_add_td_parallelc                 C   s   |   tjd¡ d S r¾   ©rJ  r¥   Úsubtractr   r   r   r   Útest_sub_td¦  s    z TestDatetimeArrayOps.test_sub_tdc                 C   s   |   tjd¡ d S rM  rO  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î   r<  r   r   r>  ²  s    z<TestDatetimeArrayOps._test_add_sub_td_no_match.<locals>.implzufunc 'z<' is not supported between datetime64[ns] and timedelta64[M]r?  rù   rC  rF  r   N)r   rr   ÚreÚescapeÚassertRaisesRegexr   rœ   r¥   rG  rH  r$  )rQ   r=  r>  Úfnamer~   r   r<  r   Ú_test_add_sub_td_no_match­  s    ÿ
ýz.TestDatetimeArrayOps._test_add_sub_td_no_matchc                 C   s   |   tj¡ d S r   )rW  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   )rW  r¥   rP  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  |	¡�s„t  |
¡�r¦|  t  |	¡¡ |  t  |
¡¡ n|  |	|
¡ �qXd S )Nc                 S   s   |   ¡ S r   r8   ©Úarrr   r   r   r>  É  s    z0TestDatetimeArrayOps._test_min_max.<locals>.implc                 S   s   |   ¡ S r   r;   rZ  r   r   r   r>  Ì  s    c                    s   ˆ | ƒS r   r   rZ  r<  r   r   r>  Ï  s    rD  r   r   rY   rx   r„   r?  r@  z
1900-01-01rA  rB  r   rŽ   r‰   )	r¥   r9   r   rG  ry   rz   r´   rH   r]   )rQ   r=  rE  Úmethodr>  r8  r9  r:  r[  Zpy_resZc_resr   r<  r   rò   Æ  s¼    


üûûúúþýüüûûÿýµRz"TestDatetimeArrayOps._test_min_maxc                 C   s   |   tdd¡ d S r¾   )rò   r9   r   r   r   r   Útest_min_func0  s    z"TestDatetimeArrayOps.test_min_funcc                 C   s   |   tjdd¡ d S r¾   ©rò   r¥   r9   r   r   r   r   Útest_np_min_func3  s    z%TestDatetimeArrayOps.test_np_min_funcc                 C   s   |   tjdd¡ d S r²   r^  r   r   r   r   Útest_min_method6  s    z$TestDatetimeArrayOps.test_min_methodc                 C   s   |   tdd¡ d S r¾   )rò   r<   r   r   r   r   Útest_max_func9  s    z"TestDatetimeArrayOps.test_max_funcc                 C   s   |   tjdd¡ d S r¾   ©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 r²   rb  r   r   r   r   Útest_max_method?  s    z$TestDatetimeArrayOps.test_max_methodc                 C   s   |   tjdd¡ d S ©NTFr^  r   r   r   r   Útest_min_func_parallelB  s    z+TestDatetimeArrayOps.test_min_func_parallelc                 C   s   |   tjdd¡ d S rM  r^  r   r   r   r   Útest_min_method_parallelF  s    z-TestDatetimeArrayOps.test_min_method_parallelc                 C   s   |   tjdd¡ d S re  rb  r   r   r   r   Útest_max_func_parallelJ  s    z+TestDatetimeArrayOps.test_max_func_parallelc                 C   s   |   tjdd¡ d S rM  rb  r   r   r   r   Útest_max_method_parallelN  s    z-TestDatetimeArrayOps.test_max_method_parallelN)rr   rs   rt   rJ  rL  r   rN  rQ  rR  rW  rX  rY  rò   r]  r_  r`  ra  rc  rd  rf  rg  rh  ri  r   r   r   r   r;  w  s2   &

j


r;  Ú__main__)Cru   r&  rS   rS  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   r5  r6  r   rU   rV   rW   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r2   r3   r5   r7   r:   r=   r?   rC   rD   r$  rz   rH  ry   rv   r”   rø   rÿ   r(  r)  r3  r;  rr   Úmainr   r   r   r   Ú<module>   sl   

v6  - o ]
