U
    sVc&                     @   s   d dl mZ d dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZ G dd dZG dd	 d	ZG d
d dZdS )    )	timedeltaN)NpyDatetimeUnit)	Timedelta)DatetimeArrayTimedeltaArrayc                   @   s   e Zd Zejdddgddd Zejdd Zejd	d
 Zdd Zej	
dejdd Zdd Zdd Zej	
deddeddg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 ),TestNonNanosmsus)paramsc                 C   s   |j S N)param)selfrequest r   G/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arrays/test_timedeltas.pyunit   s    zTestNonNano.unitc                 C   s<   |dkrt jjS |dkr t jjS |dkr0t jjS t|d S )Nr   r	   r
   )r   ZNPY_FR_svalueZ	NPY_FR_msZ	NPY_FR_usNotImplementedError)r   r   r   r   r   reso   s    zTestNonNano.resoc                 C   s.   t jdt jdd| d}tj||jdS )N   dtypem8[])nparangeint64viewr   _simple_newr   )r   r   arrr   r   r   tda!   s    zTestNonNano.tdac                 C   sT   t jdt jdd| d}tj||jd}|j|jks>t|d j|ksPtd S )Nr   r   r   r   r   )	r   r   r   r   r   r   r   AssertionError_reso)r   r   r   r    r!   r   r   r   test_non_nano&   s    zTestNonNano.test_non_nanofieldc                 C   s@   |j d}tj||jd}t||}t||}t|| d S Nm8[ns]r   )_ndarrayastyper   r   r   getattrtmassert_numpy_array_equal)r   r!   r%   as_nanotda_nanoresultexpectedr   r   r   test_fields-   s
    

zTestNonNano.test_fieldsc                 C   s<   |j d}tj||jd}| }| }t|| d S r&   )r(   r)   r   r   r   to_pytimedeltar+   r,   )r   r!   r-   r.   r/   r0   r   r   r   test_to_pytimedelta6   s
    zTestNonNano.test_to_pytimedeltac                 C   s<   |j d}tj||jd}| }| }t|| d S r&   )r(   r)   r   r   r   total_secondsr+   r,   )r   r   r!   r-   r.   r/   r0   r   r   r   test_total_seconds>   s
    zTestNonNano.test_total_secondsnatNaTnsc                 C   sp   || }t |tst|j|jks&t|  s6t|| }t |tsLt|j|jks\t|  sltd S r   )
isinstancer   r"   r#   isnaall)r   r6   r!   r/   r   r   r    test_add_nat_datetimelike_scalarF   s    z,TestNonNano.test_add_nat_datetimelike_scalarc                 C   st   |t j }t|tst|j|jks(t|  s8tt j| }t|tsPt|j|jks`t|  sptd S r   )pdr7   r9   r   r"   r#   r:   r;   )r   r!   r/   r   r   r   test_add_pdnatT   s    

zTestNonNano.test_add_pdnatc              	   C   s   t jd|d}d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X ||j}|j|j }t	j
||jdd|j}|| }t|| || }t|| d S )Nz
2016-01-01)tzzwith mis-matched resolutionsmatchr   UTC)r=   	Timestamppytestraisesr   Z_as_unitZ_unitr(   Zasm8r   r   r   Ztz_localizeZ
tz_convertr?   r+   assert_extension_array_equal)r   r!   Ztz_naive_fixturetsmsgZ
exp_valuesr0   r/   r   r   r   test_add_datetimelike_scalara   s$    z(TestNonNano.test_add_datetimelike_scalarc                 C   sB   d}|| }t j|j| |jd}t|| |j|jks>td S N   r   r   r   r(   r   r+   rF   r#   r"   r   r!   otherr/   r0   r   r   r   test_mul_scalar{   s
    zTestNonNano.test_mul_scalarc                 C   sL   t t|}|| }tj|j| |jd}t|| |j	|j	ksHt
d S Nr   r   r   lenr   r   r(   r   r+   rF   r#   r"   rM   r   r   r   test_mul_listlike   s
    zTestNonNano.test_mul_listlikec                 C   sR   t t|}||t }tj|j| |jd}t	
|| |j|jksNtd S rP   )r   r   rR   r)   objectr   r   r(   r   r+   rF   r#   r"   rM   r   r   r   test_mul_listlike_object   s
    z$TestNonNano.test_mul_listlike_objectc                 C   sB   d}|| }t j|j| |jd}t|| |j|jks>td S rJ   rL   rM   r   r   r   test_div_numeric_scalar   s
    z#TestNonNano.test_div_numeric_scalarc                 C   s4   t dd}|| }|jtdd }t|| d S )N   secondsr   )r   r(   r   Ztimedelta64r+   r,   rM   r   r   r   test_div_td_scalar   s    
zTestNonNano.test_div_td_scalarc                 C   sL   t t|}|| }tj|j| |jd}t|| |j	|j	ksHt
d S rP   rQ   rM   r   r   r   test_div_numeric_array   s
    z"TestNonNano.test_div_numeric_arrayc                 C   s2   |j |j d  }|| }|j | }t|| d S )N)r(   r+   r,   rM   r   r   r   test_div_td_array   s    
zTestNonNano.test_div_td_arrayN)__name__
__module____qualname__rD   Zfixturer   r   r!   r$   markparametrizer   Z
_field_opsr1   r3   r5   r   
datetime64r<   r>   rI   rO   rS   rU   rV   rZ   r[   r]   r   r   r   r   r      s2   




 
r   c                   @   s   e Zd Zejdeejej	ddgdd Z
dd Zejded	d
ed	d
 ed	d
 gdd Zejdd	e	d	dededdejdddd d d edd d d deddg	ejdddgdd ZdS ) TestTimedeltaArrayr   Zuint32uint64c              	   C   s   t tdtdg}t|jdkr2td}n
td}||}d }||krVt}d}tj	||d ||}W 5 Q R X |j|kst
t|| d S )N1HZ2Hure   r   z( will return exactly the specified dtyper@   )r   Z_from_sequencer   r   r   kindr)   FutureWarningr+   Zassert_produces_warningr"   r,   )r   r   r    Zexpected_dtyper0   warnrH   r/   r   r   r   test_astype_int   s    

z"TestTimedeltaArray.test_astype_intc                 C   s2   t tjdddd}td|d< |jd ks.td S )Nrf   rK   HZperiodsfreqr   )r   r=   timedelta_ranger   rn   r"   )r   ar   r   r   test_setitem_clears_freq   s    z+TestTimedeltaArray.test_setitem_clears_freqobjrW   rX   c                 C   s@   t jdddd}t||jd}||d< |d tddks<td S )	N2 Days   rl   rm   rn   r   rW   rX   )r=   ro   r   rn   r   r"   )r   rr   tdir    r   r   r   test_setitem_objects   s    
z'TestTimedeltaArray.test_setitem_objectsrN   g      ?r7   z
2021-01-01invalid
   i8r         ʚ;zdatetime64[ns]DindexTFc              	   C   sj   t jdddd d d }t|dd}|r4t|}d	d
dg}tjt|d |	| W 5 Q R X d S )Nry   rz   r   r{   r|   r}   r~   ru   |z0searchsorted requires compatible dtype or scalarz<value should be a 'Timedelta', 'NaT', or array of those. Gotr@   )
r   r   r   r=   ZIndexjoinrD   rE   	TypeErrorZsearchsorted)r   rN   r   datar    rH   r   r   r   test_searchsorted_invalid_types   s    
z2TestTimedeltaArray.test_searchsorted_invalid_typesN)r^   r_   r`   rD   ra   rb   intr   Zint32r   rk   rq   r   Zto_timedelta64r2   rw   rc   r=   rC   r   r   Z	to_periodr   r   r   r   r   rd      s4   

rd   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestUnaryOpsc                 C   sf   t jdddgdd}t|}t jdddgdd}t|}t|}t|| t |}t|| d S )N  qar7       @B1r'   r        qa)r   arrayr   absr+   assert_timedelta_array_equalr   valsr    Zevalsr0   r/   result2r   r   r   test_abs   s    
zTestUnaryOps.test_absc                 C   sh   t jdddgdd}t|}|
 }t|| t||r>tt |}t|| t||rdtd S )Nr   r7   r   r'   r   )r   r   r   r+   r   Zshares_memoryr"   Zpositive)r   r   r    r/   r   r   r   r   test_pos  s    
zTestUnaryOps.test_posc                 C   sd   t jdddgdd}t|}t jdddgdd}t|}| }t|| t |}t|| d S )Nr   r7   r   r'   r   r   l @B1)r   r   r   r+   r   negativer   r   r   r   test_neg  s    
zTestUnaryOps.test_negc                 C   s^   t jdddd}t||jd}t|j |j d}| }t|| t|}t|| d S )Nrs   rt   rl   rm   ru   )	r=   ro   r   rn   _datar+   r   r   r   )r   rv   r    r0   r/   r   r   r   r   test_neg_freq  s    
zTestUnaryOps.test_neg_freqN)r^   r_   r`   r   r   r   r   r   r   r   r   r      s   r   )datetimer   Znumpyr   rD   Zpandas._libs.tslibs.dtypesr   Zpandasr=   r   Zpandas._testingZ_testingr+   Zpandas.core.arraysr   r   r   rd   r   r   r   r   r   <module>   s    I