U
    sVc?                     @   s   d Z ddlmZmZ ddlZddlZddlZddlmZ ddl	Z
ddl	mZmZmZmZ ddlmZ ddlmZ G dd dZG d	d
 d
ZG dd dZdd Zdd ZdS )z+
Tests for scalar Timedelta arithmetic ops
    )datetime	timedeltaN)OutOfBoundsTimedelta)NaT	Timedelta	Timestampoffsets)opsc                   @   s   e Zd ZdZejdedddedde	
dde	
ddedgd	d
 Zejdedededdde	
dde	
dd e ed gdd Zejdejejgdd Zdd Zejdejejgdd Zejdejejgdd Zejdejejgdd Zejdejej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!d0d1 Z"d2d3 Z#d4d5 Z$d6d7 Z%d8d9 Z&ejdejejgd:d; Z'ejdejejgd<d= Z(d>d? Z)d@dA Z*dBdC Z+dDS )E TestTimedeltaAdditionSubtractionz\
    Tests for Timedelta methods:

        __add__, __radd__,
        __sub__, __rsub__
    ten_seconds
   sunit)secondsl    d(	 nsc                 C   sD   t d}t d}t d}|| }||ks,t|| }||ks@td S )Nz20130101 09:01:12.123456z20130101 09:01:22.12345620130101 09:01:02.123456r   AssertionError)selfr   baseexpected_addexpected_subresult r   Q/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/scalar/timedelta/test_arithmetic.pytest_td_add_sub_ten_seconds"   s    z<TestTimedeltaAdditionSubtraction.test_td_add_sub_ten_secondsone_day_ten_secsz1 day, 00:00:10z1 days, 00:00:10   )daysr   Dc                 C   sD   t d}t d}t d}|| }||ks,t|| }||ks@td S )Nz20130102 09:01:12.123456z20130103 09:01:22.123456r   r   )r   r   r   r   r   r   r   r   r   #test_td_add_sub_one_day_ten_seconds8   s    zDTestTimedeltaAdditionSubtraction.test_td_add_sub_one_day_ten_secondsopc                 C   s   t ddd}||tddd}|tjkr6t|ts6t|tdddksJt||td}t|tsft|tdksvt||td	}t|tst|td
kst||t	}|t	kstd S )Nr   dr     r      z2018-01-12 18:09z2018-01-22 18:09z
2018-01-12
2018-01-22)
r   r   operatoradd
isinstancer   r   np
datetime64r   r   r"   tdr   r   r   r   test_td_add_datetimelike_scalarN   s    

z@TestTimedeltaAdditionSubtraction.test_td_add_datetimelike_scalarc              	   C   sf   d}t jt|d tdtddd  W 5 Q R X d}t jt|d tdtdd  W 5 Q R X d S )	Nz2Cannot cast 259987 from D to 'ns' without overflowmatchz
1700-01-01i r    r   z<Cannot cast 259987 days, 0:00:00 to unit=ns without overflowr   )pytestraisesr   r   r   r   )r   msgr   r   r   test_td_add_timestamp_overflowe   s    z?TestTimedeltaAdditionSubtraction.test_td_add_timestamp_overflowc                 C   s@   t ddd}||t dd}t|t s*t|t ddks<td S )Nr   r#   r   r1      r   r)   r   r,   r   r   r   test_td_add_tdn   s    z/TestTimedeltaAdditionSubtraction.test_td_add_tdc                 C   s@   t ddd}||tdd}t|t s*t|t ddks<td S )Nr   r#   r   	   r1      r   r   r)   r   r,   r   r   r   test_td_add_pytimedeltav   s    z8TestTimedeltaAdditionSubtraction.test_td_add_pytimedeltac                 C   sB   t ddd}||tdd}t|t s,t|t ddks>td S )Nr   r#   r   r       r1   r   r*   timedelta64r)   r   r,   r   r   r   test_td_add_timedelta64}   s    z8TestTimedeltaAdditionSubtraction.test_td_add_timedelta64c                 C   sB   t ddd}||td}t|t s*t|t dddks>td S )Nr   r#   r   r>   r   hoursr   r   Hourr)   r   r,   r   r   r   test_td_add_offset   s    z3TestTimedeltaAdditionSubtraction.test_td_add_offsetc                 C   s>   t ddd}t ddd}|| }t|t s.t||ks:td S Nr   r#   r   r   r   r7   r   r-   expectedr   r   r   r   test_td_sub_td   s
    z/TestTimedeltaAdditionSubtraction.test_td_sub_tdc                 C   sh   t ddd}t ddd}||  }t|t s2t||ks>t| | }t|t sXt||ksdtd S rG   )r   to_pytimedeltar)   r   rH   r   r   r   test_td_sub_pytimedelta   s    z8TestTimedeltaAdditionSubtraction.test_td_sub_pytimedeltac                 C   sh   t ddd}t ddd}||  }t|t s2t||ks>t| | }t|t sXt||ksdtd S rG   )r   to_timedelta64r)   r   rH   r   r   r   test_td_sub_timedelta64   s    z8TestTimedeltaAdditionSubtraction.test_td_sub_timedelta64c                 C   s$   t ddd}|t }|tks td S Nr   r#   r   r   r   r   r   r-   r   r   r   r   test_td_sub_nat   s    z0TestTimedeltaAdditionSubtraction.test_td_sub_natc                 C   sB   t ddd}td}|| }|tks*t|| }|tks>td S Nr   r#   r   r   r   r*   r@   r   r   )r   r-   td_natr   r   r   r   test_td_sub_td64_nat   s    
z5TestTimedeltaAdditionSubtraction.test_td_sub_td64_natc                 C   s@   t ddd}|td }t|t s(t|t dddks<td S )Nr   r#   r   r      hrD   rQ   r   r   r   test_td_sub_offset   s    z3TestTimedeltaAdditionSubtraction.test_td_sub_offsetc              
   C   s   t ddd}d}ddtdtdfD ]}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X q(d S )Nr   r#   r   unsupported operand type          @r/   )r   r*   int64float64r2   r3   	TypeError)r   r-   r4   otherr   r   r   test_td_add_sub_numeric_raises   s    z?TestTimedeltaAdditionSubtraction.test_td_add_sub_numeric_raisesc              	   C   s   t d}tdg}d}tjt|d |tdg  W 5 Q R X dddg}tjt|d ||  W 5 Q R X d}tjt|d ||  W 5 Q R X d	}tjt|d ||  W 5 Q R X d S )
N1 dayr   z;unsupported operand type\(s\) for \+: 'Timedelta' and 'int'r/   |zEunsupported operand type\(s\) for \+: 'numpy.ndarray' and 'Timedelta'z;Concatenation operation is not implemented for NumPy arraysz:unsupported operand type\(s\) for -: 'Timedelta' and 'int'zDunsupported operand type\(s\) for -: 'numpy.ndarray' and 'Timedelta')r   r*   arrayr2   r3   r_   joinr   r-   r`   r4   r   r   r   test_td_add_sub_int_ndarray   s$    z<TestTimedeltaAdditionSubtraction.test_td_add_sub_int_ndarrayc                 C   s>   t ddd}t| }|tks ttd| }|tks:td S rS   )r   r   r   r*   r+   rQ   r   r   r   test_td_rsub_nat   s
    z1TestTimedeltaAdditionSubtraction.test_td_rsub_natc                 C   s<   t dtddd }t|ts$t|tdddks8td S )Nr   r   r#   r   irX   )r   rE   r   r)   r   r   r   r   r   r   test_td_rsub_offset   s    z4TestTimedeltaAdditionSubtraction.test_td_rsub_offsetc                 C   sH   t tdtdg}t tdtdg}|td }t|| d S )N20130101 9:0120121230 9:02z20121231 9:01z20121229 9:021Dr*   rd   r   r   tmassert_numpy_array_equal)r   arrexpresr   r   r   ,test_td_sub_timedeltalike_object_dtype_array   s    zMTestTimedeltaAdditionSubtraction.test_td_sub_timedeltalike_object_dtype_arrayc                 C   sl   t d}t|tdtddg}t|td tdtddtd g}|td }t|| d S )N2021-11-09 09:54:00rm   r[   rX   Z0D)r   r*   rd   r   r@   ro   rp   )r   nowrq   rr   rs   r   r   r   7test_td_sub_mixed_most_timedeltalike_object_dtype_array   s    
zXTestTimedeltaAdditionSubtraction.test_td_sub_mixed_most_timedeltalike_object_dtype_arrayc              	   C   sR   t d}t|tdtddg}d}tjt|d td|  W 5 Q R X d S )Nru   rm   r[   rX   zAunsupported operand type\(s\) for \-: 'Timedelta' and 'Timestamp'r/   )r   r*   rd   r   r@   r2   r3   r_   )r   rv   rq   r4   r   r   r   8test_td_rsub_mixed_most_timedeltalike_object_dtype_array  s
    zYTestTimedeltaAdditionSubtraction.test_td_rsub_mixed_most_timedeltalike_object_dtype_arrayc                 C   sJ   t tdtdg}t tdtdg}||td}t|| d S )Nrk   rl   z20130102 9:01z20121231 9:02rm   rn   )r   r"   rq   rr   rs   r   r   r   ,test_td_add_timedeltalike_object_dtype_array  s    zMTestTimedeltaAdditionSubtraction.test_td_add_timedeltalike_object_dtype_arrayc                 C   sR   t d}t|tdg}t|td tdg}||td}t|| d S )Nru   rm   Z2D)r   r*   rd   r   ro   rp   )r   r"   rv   rq   rr   rs   r   r   r   2test_td_add_mixed_timedeltalike_object_dtype_array  s
    zSTestTimedeltaAdditionSubtraction.test_td_add_mixed_timedeltalike_object_dtype_arrayc                 C   s   t d}t| g}tt d g}|| }t|| || }t|| || }t||d  || }t||d  d S )Nrb   2 Daysr   r   r*   rd   rM   ro   rp   r   r-   r`   rI   r   r   r   r   test_td_add_sub_td64_ndarray%  s    z=TestTimedeltaAdditionSubtraction.test_td_add_sub_td64_ndarrayc                 C   sx   t d}tdgj}tdgj}t|| | t|| | tdgj}t| | | t|| | d S )Nrb   z
2000-01-01z
2000-01-02z
1999-12-31)r   pdZto_datetimevaluesro   rp   )r   r-   r`   rI   r   r   r   test_td_add_sub_dt64_ndarray5  s    z=TestTimedeltaAdditionSubtraction.test_td_add_sub_dt64_ndarrayc                 C   s   t d}t|j}|| }t|t s*t|d| ks:t|| }t|t sPt|d| ks`t|| }t|t svt|d| kst|| }t|t st|d| kstd S )Nrb   r[   r   )r   r*   rd   asm8r)   r   )r   r-   r`   r   r   r   r   test_td_add_sub_ndarray_0dA  s    z;TestTimedeltaAdditionSubtraction.test_td_add_sub_ndarray_0dN),__name__
__module____qualname____doc__r2   markparametrizer   r   r*   r@   r   ZSecondr   ZDayr!   r'   r(   r	   Zraddr.   r5   r8   r<   rA   rF   rJ   rL   rN   rR   rV   rY   ra   rg   rh   rj   rt   rw   rx   ry   rz   r~   r   r   r   r   r   r   r
      sh   








	






r
   c                
   @   s  e Zd ZdZejdee	dde	dgejde
jejgdd Zejdejed	edgejde
jejgd
d Zejde
jejgdd Zdd Zdd Zdd Zdd Zdd Zdd Zejdejed	e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.d/ Z$d0d1 Z%d2d3 Z&d4d5 Z'd6d7 Z(d8d9 Z)d:d; Z*d<d= Z+d>d? Z,d@dA Z-dBdC Z.dDdE Z/dFdG Z0dHdI Z1dJdK Z2dLdM Z3dNdO Z4dPdQ Z5dRdS Z6dTdU Z7dVdW Z8dXdY Z9dZd[ Z:d\d] Z;d^d_ Z<d`da Z=dbdc Z>ddde Z?ejde
jeje
j@ejAejBgejdfeCeDdgeDdhgeCeDdieEdjggdkdl ZFdmS )n#TestTimedeltaMultiplicationDivisionz
    Tests for Timedelta methods:

        __mul__, __rmul__,
        __div__, __rdiv__,
        __truediv__, __rtruediv__,
        __floordiv__, __rfloordiv__,
        __mod__, __rmod__,
        __divmod__, __rdivmod__
    rU   r   r   r"   c              	   C   s`   t ddd}ddddg}dd| d	| d
dg}tjt|d ||| W 5 Q R X d S )Nr   r#   r   rc   znumpy.timedelta64ZNaTTyper   z'unsupported operand type\(s\) for \*: 'z' and ''z1ufunc '?multiply'? cannot use operands with typesr/   )r   re   r2   r3   r_   )r   r"   rU   r-   Ztypsr4   r   r   r   test_td_mul_nate  s    z3TestTimedeltaMultiplicationDivision.test_td_mul_natnanNaNc                 C   s&   t ddd}|||}|tks"td S rO   rP   )r   r"   r   r-   r   r   r   r   test_td_mul_nanv  s    
z3TestTimedeltaMultiplicationDivision.test_td_mul_nanc              	   C   s   t dd}||d}|t ddks&t||d}|t dddksDt||tjtksXt|d	|jd	|j ksrt|d
|jd
|j kstd}tjt|d ||t	ddd W 5 Q R X tjt|d ||| W 5 Q R X d S )N   minutesr[   r>   g      ?      r   r   g      rZ   r/   r$   r   )
r   r   r*   r   r   valuer2   r3   r_   r   )r   r"   r-   r   r4   r   r   r   test_td_mul_scalar~  s    


z6TestTimedeltaMultiplicationDivision.test_td_mul_scalarc                 C   sT   t d}tdg}tt d g}|| }t|| || }t|| d S )Nrb   r[   r{   r|   r}   r   r   r   test_td_mul_numeric_ndarray  s    z?TestTimedeltaMultiplicationDivision.test_td_mul_numeric_ndarrayc                 C   st   t d}td}|jdks tt d}|| }t|t ks@t||ksLt|| }t|t ksdt||ksptd S )Nrb   r[   r   2 days)r   r*   rd   ndimr   type)r   r-   r`   rI   rs   r   r   r   test_td_mul_numeric_ndarray_0d  s    
zBTestTimedeltaMultiplicationDivision.test_td_mul_numeric_ndarray_0dc              	   C   sh   t d}tt d g}d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d S )Nrb   r{   z_ufunc '?multiply'? cannot use operands with types dtype\('<m8\[ns\]'\) and dtype\('<m8\[ns\]'\)r/   )r   r*   rd   rM   r2   r3   r_   rf   r   r   r    test_td_mul_td64_ndarray_invalid  s    zDTestTimedeltaMultiplicationDivision.test_td_mul_td64_ndarray_invalidc                 C   sd   t ddd}|td }|dks&t|| dks6t|tdd dksNtt|t s`td S )	Nr   r#   r   r      <   rX   r   )r   r   rE   r   r*   r@   isnanr   rQ   r   r   r    test_td_div_timedeltalike_scalar  s    zDTestTimedeltaMultiplicationDivision.test_td_div_timedeltalike_scalarc                 C   s   t d}|tdd }||jd ks*t|tdd }||jd ksLt|tdd }||jksjtt d}|tdd }|dkst|tdd }|dkst|tdd }||jkstd S )	Nz1 days 2 hours 3 nsr   r    l     "R: r    ʚ;r   im )r   r*   r@   r   r   rQ   r   r   r   test_td_div_td64_non_nano  s    z=TestTimedeltaMultiplicationDivision.test_td_div_td64_non_nanoc                 C   s`   t ddd}|d }t|t s"t|t ddks4t|d }t|t sJt|t ddks\td S )Nr   r#   r   r[      r1   r7   rQ   r   r   r   test_td_div_numeric_scalar  s    z>TestTimedeltaMultiplicationDivision.test_td_div_numeric_scalarc                 C   s8   t ddd}|| }|tks t|| }|tks4td S rO   rP   )r   r   r-   r   r   r   r   test_td_div_nan  s
    
z3TestTimedeltaMultiplicationDivision.test_td_div_nanc                 C   sX   t d}tt d g}tdg}|| }t|| || }t||d  d S )Nrb   r{   g      ?r   r|   r}   r   r   r   test_td_div_td64_ndarray  s    z<TestTimedeltaMultiplicationDivision.test_td_div_td64_ndarrayc                 C   s8   t d}td}|| }t|t s(t||ks4td S )Nrb   r   )r   r*   rd   r)   r   )r   r-   r`   rs   r   r   r   test_td_div_ndarray_0d	  s
    
z:TestTimedeltaMultiplicationDivision.test_td_div_ndarray_0dc                 C   sB   t ddd}td| }|dks&ttdd| dks>td S )	Nr   r#   r   r   gq?r   rX   g      ?)r   r   rE   r   r*   r@   rQ   r   r   r   !test_td_rdiv_timedeltalike_scalar  s    zETestTimedeltaMultiplicationDivision.test_td_rdiv_timedeltalike_scalarc              	   C   s   t ddd}t| }t|s"td | }t|s8ttd| }t|sTtd}tjt|d t	d|  W 5 Q R X d}tjt|d tj
|  W 5 Q R X d S )Nr   r#   r   r   zGunsupported operand type\(s\) for /: 'numpy.datetime64' and 'Timedelta'r/   <unsupported operand type\(s\) for /: 'float' and 'Timedelta')r   r   r*   r   r   r@   r2   r3   r_   r+   r   )r   r-   r   r4   r   r   r   test_td_rdiv_na_scalar  s    z:TestTimedeltaMultiplicationDivision.test_td_rdiv_na_scalarc              	   C   s   t ddd}tj|gtd}|| }tjdgtjd}t|| td g}|| }ttjg}t|| tjtjgtd}d}tj	t
|d ||  W 5 Q R X tjtjgtjd}d}tj	t
|d ||  W 5 Q R X d S )	Nr   r#   r   dtyper   r   r/   z$cannot use operands with types dtype)r   r*   rd   objectr^   ro   rp   r   r2   r3   r_   )r   r-   rq   r   rI   r4   r   r   r   test_td_rdiv_ndarray1  s"    z8TestTimedeltaMultiplicationDivision.test_td_rdiv_ndarrayc                 C   s,   t ddd}t|j}|| dks(td S )Nr   r#   r   r   )r   r*   rd   r   r   )r   r-   rq   r   r   r   test_td_rdiv_ndarray_0dH  s    z;TestTimedeltaMultiplicationDivision.test_td_rdiv_ndarray_0dc                 C   sZ   t ddd}t ddd}|| dks(t| |  dks>td| |  dksVtd S )Nr   r   rC   r   r   r[   )r   r   rK   rM   r   r-   scalarr   r   r   %test_td_floordiv_timedeltalike_scalarR  s
    zITestTimedeltaMultiplicationDivision.test_td_floordiv_timedeltalike_scalarc                 C   sL   t ddd}|tj tkstt|t s0tt|td sHtd S )Nr   r   r   r   )r   r*   r   r   r   r   r@   r   r-   r   r   r   test_td_floordiv_null_scalar[  s    z@TestTimedeltaMultiplicationDivision.test_td_floordiv_null_scalarc                 C   s<   t ddd}|td dks"t|td dks8td S )Nr   r   r   r   r[   \   )r   r   rE   r   ZMinuter   r   r   r   test_td_floordiv_offsetsc  s    z<TestTimedeltaMultiplicationDivision.test_td_floordiv_offsetsc              	   C   sL   t ddd}ddddg}tjt|d |tjd	d
d  W 5 Q R X d S )Nr   r   r   rc   z.Invalid dtype datetime64\[D\] for __floordiv__z8'dtype' is an invalid keyword argument for this functionz5ufunc '?floor_divide'? cannot use operands with typesr/   
2016-01-01zdatetime64[us]r   )r   re   r2   r3   r_   r*   r+   r   r-   r4   r   r   r   test_td_floordiv_invalid_scalari  s    zCTestTimedeltaMultiplicationDivision.test_td_floordiv_invalid_scalarc                 C   s~   t ddd}t ddd}|d |ks(t|d |ks8t|td |ksNt|td |ksdt|td |ksztd S )Nr   r   r   r       r[   r\   )r   r   r*   r^   int32uint8)r   r-   rI   r   r   r   test_td_floordiv_numeric_scalarw  s    zCTestTimedeltaMultiplicationDivision.test_td_floordiv_numeric_scalarc                 C   s   t ddd}t ddd}|t|  dks2td| t| g }tjdgtjd}t|| d| t| tdg }tdtj	g}t|| d S )Nr   r   r   r   r   r   r   )
r   r*   rd   rM   r   r]   ro   rp   r@   r   )r   r-   r   rs   rI   r   r   r   $test_td_floordiv_timedeltalike_array  s     zHTestTimedeltaMultiplicationDivision.test_td_floordiv_timedeltalike_arrayc                 C   s:   t ddd}tjdgtjd}|| }|jjdks6td S )Nr   r   r   r   r   m)r   r   Seriesr*   r]   r   kindr   )r   r-   serrs   r   r   r   test_td_floordiv_numeric_series  s    zCTestTimedeltaMultiplicationDivision.test_td_floordiv_numeric_seriesc                 C   s`   t ddd}t ddd}||dks*t| | dksBtd| | dks\td S )Nr   r   r   r   r   r[   r   )r   __rfloordiv__r   rK   rM   r   r   r   r   &test_td_rfloordiv_timedeltalike_scalar  s
    zJTestTimedeltaMultiplicationDivision.test_td_rfloordiv_timedeltalike_scalarc                 C   s>   t ddd}t|ts tt|tds:td S )Nr   r   r   )r   r*   r   r   r   r   r@   r   r   r   r   test_td_rfloordiv_null_scalar  s    zATestTimedeltaMultiplicationDivision.test_td_rfloordiv_null_scalarc                 C   s    t dtdd dkstd S )Nr      r   r[   )r   rE   r   r   r   r   r   r   test_td_rfloordiv_offsets  s    z=TestTimedeltaMultiplicationDivision.test_td_rfloordiv_offsetsc              	   C   sT   t ddd}tdd}||tks*td}tjt|d ||  W 5 Q R X d S )Nr   r   r   uszHunsupported operand type\(s\) for //: 'numpy.datetime64' and 'Timedelta'r/   )	r   r*   r+   r   NotImplementedr   r2   r3   r_   )r   r-   Zdt64r4   r   r   r    test_td_rfloordiv_invalid_scalar  s    zDTestTimedeltaMultiplicationDivision.test_td_rfloordiv_invalid_scalarc              	   C   s  t ddd}|tjtks t|dtks2t|dtksDt|tdtks\t|tdtkstt|tdtkstd}t	j
t|d td|  W 5 Q R X t	j
t|d td|  W 5 Q R X t	j
t|d td|  W 5 Q R X d S )	Nr   r   g      @r[   r\   r9   z9unsupported operand type\(s\) for //: '.*' and 'Timedeltar/   )r   r   r*   r   r   r   r^   r   r   r2   r3   r_   r   r   r   r    test_td_rfloordiv_numeric_scalar  s    zDTestTimedeltaMultiplicationDivision.test_td_rfloordiv_numeric_scalarc                 C   s   t ddd}t ddd}|t| dks4t|td|  g}tjdgtjd}t|| td|  t	dg}||}tdtj
g}t|| d S )Nr   r   r   r   r   r   r   )r   r   r*   rd   rM   r   r]   ro   rp   r@   r   )r   r-   r   rs   rI   rq   r   r   r   %test_td_rfloordiv_timedeltalike_array  s    
zITestTimedeltaMultiplicationDivision.test_td_rfloordiv_timedeltalike_arrayc              	   C   sH   t ddddgd }d}tjt|d |tdd	d
  W 5 Q R X d S )NirPi isPitPi vPr   Invalid dtyper/   r   r   r   )r*   rd   r2   r3   r_   r   )r   Zintsr4   r   r   r   test_td_rfloordiv_intarray  s    z>TestTimedeltaMultiplicationDivision.test_td_rfloordiv_intarrayc              	   C   s^   t ddd}tjdgtjd}||}|tks4td}tj	t
|d ||  W 5 Q R X d S )Nr   r   r   r   r   r/   )r   r   r   r*   r]   r   r   r   r2   r3   r_   )r   r-   r   rs   r4   r   r   r    test_td_rfloordiv_numeric_series  s    
zDTestTimedeltaMultiplicationDivision.test_td_rfloordiv_numeric_seriesc                 C   s|   t dd}|t dd }t|t s&t|t ddks8t|tdd }t|t sTt|t dksdt|t }|tksxtd S )N%   rC   r>   r   r   r   r   )r   r)   r   r   r   rQ   r   r   r   test_mod_timedeltalike   s    
z:TestTimedeltaMultiplicationDivision.test_mod_timedeltalikec                 C   s*   t dd}|tdd }|tks&td S )Nr   r   r   r   rT   rQ   r   r   r   test_mod_timedelta64_nat  s    
z<TestTimedeltaMultiplicationDivision.test_mod_timedelta64_natc                 C   s>   t dd}|tdd }t|t s(t|t ddks:td S )Nr   r   r[   rX   r   r?   rQ   r   r   r   test_mod_timedelta64  s    
z8TestTimedeltaMultiplicationDivision.test_mod_timedelta64c                 C   s<   t dd}|td }t|t s&t|t ddks8td S )Nr   r   r   r[   rD   rQ   r   r   r   test_mod_offset  s    
z3TestTimedeltaMultiplicationDivision.test_mod_offsetc                 C   s   t dd}|d }t|t s t|t dks0t|d }t|t sFt|t dddksZt|td }t|t stt|t dddkstd S )	Nr   r   r[   r   g   mBr   r6   r   )r   r)   r   intrQ   r   r   r   test_mod_numeric'  s    
z4TestTimedeltaMultiplicationDivision.test_mod_numericc              	   C   sZ   t dd}d}tjt|d |td  W 5 Q R X tjt|d |g   W 5 Q R X d S )Nr   r   rZ   r/   r&   )r   r2   r3   r_   r   r   r   r   r   test_mod_invalid8  s    
z4TestTimedeltaMultiplicationDivision.test_mod_invalidc                 C   s<   t dd}tdd| }t|t s&t|t ddks8td S )Nr   r   r   r   r;   rQ   r   r   r   test_rmod_pytimedeltaB  s    
z9TestTimedeltaMultiplicationDivision.test_rmod_pytimedeltac                 C   s>   t dd}tdd| }t|t s(t|t ddks:td S )Nr   r   r   r   r[   r?   rQ   r   r   r   test_rmod_timedelta64J  s    
z9TestTimedeltaMultiplicationDivision.test_rmod_timedelta64c              	   C   s   t dd}d}tjt|d td|  W 5 Q R X tjt|d d|  W 5 Q R X tjt|d d|  W 5 Q R X d}tjt|d td	d
g|  W 5 Q R X d S )Nr   r   zunsupported operandr/   r&            0@Invalid dtype int      )r   r2   r3   r_   r   r*   rd   r   r   r   r   test_rmod_invalidQ  s    
z5TestTimedeltaMultiplicationDivision.test_rmod_invalidc                 C   s   t ddd}t|d}|d t dddks.tt|d t s@t|d t dd	ksVt|s^tt|tj}|d tkszt|d tkstd S )
Nr[   r>   rB   g  $Br   r   r   r   r   )r   divmodr   r)   r*   r   r   rQ   r   r   r   test_divmod_numericf  s    
z7TestTimedeltaMultiplicationDivision.test_divmod_numericc                 C   s   t ddd}t|tdd}|d dks,tt|d t s>t|d t ddksTtt|d}|d t ddksttt|d t st|d t dkstt|t}t|d st|d tkstd S )	Nr[   r>   rB   r   r1   r   r   6   )r   r   r   r   r)   r   r*   r   rQ   r   r   r   test_divmodt  s    

z/TestTimedeltaMultiplicationDivision.test_divmodc                 C   sX   t ddd}t|td}|d dks,tt|d t s>t|d t dd	ksTtd S )
Nr[   r>   rB   r=   r   r   r   r   )r   r   r   rE   r   r)   rQ   r   r   r   test_divmod_offset  s
    z6TestTimedeltaMultiplicationDivision.test_divmod_offsetc              	   C   s<   t ddd}d}tjt|d t|td W 5 Q R X d S )Nr[   r>   rB   zAunsupported operand type\(s\) for //: 'Timedelta' and 'Timestamp'r/   r&   )r   r2   r3   r_   r   r   r   r   r   r   test_divmod_invalid  s    z7TestTimedeltaMultiplicationDivision.test_divmod_invalidc                 C   sT   t tdddtdd}|d dks(tt|d ts:t|d tddksPtd S )Nr[   r>   rB   r   r1   r   r   )r   r   r   r   r)   ri   r   r   r   test_rdivmod_pytimedelta  s    z<TestTimedeltaMultiplicationDivision.test_rdivmod_pytimedeltac                 C   sR   t tdtdd}|d dks&tt|d ts8t|d tddksNtd S )Nr   r=   r   r   r   r   r   )r   r   rE   r   r   r)   ri   r   r   r   test_rdivmod_offset  s    z7TestTimedeltaMultiplicationDivision.test_rdivmod_offsetc              	   C   s   t dd}d}tjt|d ttd| W 5 Q R X tjt|d td| W 5 Q R X tjt|d td| W 5 Q R X d}tjt|d ttd	d
g| W 5 Q R X d S )Nr   r   rZ   r/   r&   r   r   r   r   r   )r   r2   r3   r_   r   r   r*   rd   r   r   r   r   test_rdivmod_invalid  s    
z8TestTimedeltaMultiplicationDivision.test_rdivmod_invalidrq   rk   rl   ru   rm   c              	   C   s0   d}t jt|d ||td W 5 Q R X d S )Nz7unsupported operand type|cannot use operands with typesr/   rm   )r2   r3   r_   r   )r   r"   rq   r4   r   r   r   (test_td_op_timedelta_timedeltalike_array  s    zLTestTimedeltaMultiplicationDivision.test_td_op_timedelta_timedeltalike_arrayN)Gr   r   r   r   r2   r   r   r   r*   r@   r'   mulr	   Zrmulr   r   r^   floatr   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   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   truedivZrdivZrsubrd   r   r   r   r   r   r   r   r   V  s    

	
	

	 r   c                   @   sN   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
dddgdd ZdS )TestTimedeltaComparisonc                 C   s   |}|d}|j }t|ts t||ks,t||kr8t||ksDt||ksPt||k r\t||krht|d| krxt|d| kst|d| kst|d| k st|d| krt|d| krtd S )Nr   r[   )deltar)   r   r   )r   Ztick_classesclsoffr-   r   r   r   test_compare_tick  s     z)TestTimedeltaComparison.test_compare_tickc                 C   s   t d}t d}tj||gtd}||k}tjddgtd}||k sLttj||g||ggtd}||k}tjddgddggtd}|j|jkst||k std S )Nr   z3 hoursr   FT)r   r*   rd   r   boolallr   shape)r   r-   r`   rq   rs   rI   r   r   r   test_comparison_object_array  s    z4TestTimedeltaComparison.test_comparison_object_arrayc                 C   sD   t dt dg}t|}|d |k}tddg}t|| d S )Nz0 days 01:00:00r   F)r   r*   rd   ro   rp   )r   Zperiodsrq   r   rI   r   r   r   test_compare_timedelta_ndarray  s
    
z6TestTimedeltaComparison.test_compare_timedelta_ndarrayc                 C   s   t dd}t|d }t jdddddgtd}||k}t|| ||k}t|| ||k}t||  ||k}t||  d S )Nr   ztimedelta64[ns]r   FTr   )r*   ZarangeZastyper   rd   r   ro   rp   )r   rq   r-   rI   r   r   r   r   test_compare_td64_ndarray  s    z1TestTimedeltaComparison.test_compare_td64_ndarrayc                 C   s   G dd d}t d}|dkr"t|dkr.t|| kr<t||ddkrNt||ddk s`t||ddk rrt||ddkstd	S )
z
        Make sure non supported operations on Timedelta returns NonImplemented
        and yields to other operand (GH#20829).
        c                   @   s4   e Zd ZdddddZdd Zdd Zd	d
 ZdS )zGTestTimedeltaComparison.test_compare_custom_object.<locals>.CustomClassN)returnc                 S   s
   || _ d S N
cmp_result)r   r  r   r   r   __init__  s    zPTestTimedeltaComparison.test_compare_custom_object.<locals>.CustomClass.__init__c                 S   s   | j d krtS | j S d S r  )r  r   r   r   r   r   generic_result  s    
zVTestTimedeltaComparison.test_compare_custom_object.<locals>.CustomClass.generic_resultc                 S   s   |   S r  r  r   r`   r   r   r   __eq__  s    zNTestTimedeltaComparison.test_compare_custom_object.<locals>.CustomClass.__eq__c                 S   s   |   S r  r  r  r   r   r   __gt__  s    zNTestTimedeltaComparison.test_compare_custom_object.<locals>.CustomClass.__gt__)N)r   r   r   r  r  r  r	  r   r   r   r   CustomClass  s   r
  1sstringr   Fr  TN)r   r   )r   r
  tr   r   r   test_compare_custom_object
  s    z2TestTimedeltaComparison.test_compare_custom_objectvalr  r   c              	   C   s   t d}d}tjt|d ||k W 5 Q R X tjt|d ||k W 5 Q R X tjt|d ||k W 5 Q R X tjt|d ||k  W 5 Q R X d S )Nr  z>not supported between instances of 'Timedelta' and '(int|str)'r/   )r   r2   r3   r_   )r   r  r  r4   r   r   r   test_compare_unknown_type,  s    z1TestTimedeltaComparison.test_compare_unknown_typeN)r   r   r   r   r   r   r   r  r2   r   r   r  r   r   r   r   r     s   "r   c                  C   sz   G dd d} |  }t d}||tks.t||tks@t||tksRt||tksdt||tksvtd S )Nc                   @   s   e Zd ZdS )z&test_ops_notimplemented.<locals>.OtherN)r   r   r   r   r   r   r   Other<  s   r  rb   )r   __add__r   r   __sub____truediv____mul____floordiv__)r  r`   r-   r   r   r   test_ops_notimplemented;  s    r  c               
   C   s   t d} | dfd| ffD ]x\}}ddddg}tjt|d ||  W 5 Q R X d}tjt|d ||k W 5 Q R X ||krt||kstqd S )	Nrb   arc   rZ   z3can only concatenate str \(not "Timedelta"\) to strzmust be str, not Timedeltar/   z"not supported between instances of)r   re   r2   r3   r_   r   )r-   leftrightr4   r   r   r   test_ops_error_strI  s    r  )r   r   r   r'   Znumpyr*   r2   Zpandas.errorsr   Zpandasr   r   r   r   r   Zpandas._testingZ_testingro   Zpandas.corer	   r
   r   r   r  r  r   r   r   r   <module>   s(     >    vs