U
    f/eM                     @   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	m
Z
 ddlZddlmZ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)is_numpy_dev)OutOfBoundsTimedelta)NaT	Timedelta	Timestampcompat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%ejdejejgd8d9 Z&ejdejejgd:d; Z'd<d= Z(d>S )? 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-tiezk1ph/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_seconds:   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_scalarP   s    

z@TestTimedeltaAdditionSubtraction.test_td_add_datetimelike_scalarc              	   C   sb   d}t jt|d tdtddd  W 5 Q R X t jt|d tdtdd  W 5 Q R X d S )Nzint too (large|big) to convertmatchz
1700-01-01i r"   r   r!   )pytestraisesOverflowErrorr   r   r   r   )r   msgr   r   r   test_td_add_timestamp_overflowg   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   r3      r   r+   r   r.   r   r   r   test_td_add_tdo   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   	   r3      r   r   r+   r   r.   r   r   r   test_td_add_pytimedeltaw   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"      r3   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   rA   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   r:   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 rJ   )r   to_pytimedeltar+   r   rK   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 rJ   )r   to_timedelta64r+   r   rK   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,   rC   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       hrG   rT   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          @r1   )r   r,   int64float64r4   r5   	TypeError)r   r/   r7   otherr   r   r   test_td_add_sub_numeric_raises   s    z?TestTimedeltaAdditionSubtraction.test_td_add_sub_numeric_raisesc                 C   s>   t ddd}t| }|tks ttd| }|tks:td S rV   )r   r   r   r,   r-   rT   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r[   )r
   rH   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,   arrayr   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  }t|tdtddg}t|td tdtddtd g}|td }t|| d S )Nrj   r^   r[   Z0D)r   nowr,   rl   r   rC   rm   rn   )r   rs   ro   rp   rq   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  }t|tdtddg}d}tjt|d td|  W 5 Q R X d S )Nrj   r^   r[   zAunsupported operand type\(s\) for \-: 'Timedelta' and 'Timestamp'r1   )	r   rs   r,   rl   r   rC   r4   r5   rb   )r   rs   ro   r7   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 )Nrh   ri   z20130102 9:01z20121231 9:02rj   rk   )r   r$   ro   rp   rq   r   r   r   ,test_td_add_timedeltalike_object_dtype_array   s    zMTestTimedeltaAdditionSubtraction.test_td_add_timedeltalike_object_dtype_arrayc                 C   sR   t  }t|tdg}t|td tdg}||td}t|| d S )Nrj   Z2D)r   rs   r,   rl   r   rm   rn   )r   r$   rs   ro   rp   rq   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dgj}tdgj}t|| | t|| | d}tjt|d |t	
dg  W 5 Q R X d}tjt|d t	
dg|  W 5 Q R X tdgj}t|| | t| | | d}tjt|d |t	
dg  W 5 Q R X d	}tjt|d t	
dg|  W 5 Q R X tdgj}t|t	
d
g | tt	
d
g| | d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X t|| t	j
dgt	jd t|| t	j
dgt	jd tdgj}tdgj}t|| | t|| | tdgj}t| | | t|| | d S )N1 day2 daysz;unsupported operand type\(s\) for \+: 'Timedelta' and 'int'r1   r    zunsupported operand type\(s\) for \+: 'numpy.ndarray' and 'Timedelta'|Concatenation operation is not implemented for NumPy arraysz0 daysz:unsupported operand type\(s\) for -: 'Timedelta' and 'int'zDunsupported operand type\(s\) for -: 'numpy.ndarray' and 'Timedelta'r^   z_ufunc '?multiply'? cannot use operands with types dtype\('<m8\[ns\]'\) and dtype\('<m8\[ns\]'\)dtypez
2000-01-01z
2000-01-02z
1999-12-31)r   pdZto_timedeltavaluesrm   rn   r4   r5   rb   r,   rl   ra   Zto_datetime)r   r/   rc   rL   r7   r   r   r   test_ops_ndarray  sN    z1TestTimedeltaAdditionSubtraction.test_ops_ndarrayN))__name__
__module____qualname____doc__r4   markparametrizer   r   r,   rC   r
   ZSecondr   ZDayr#   r)   r*   r   Zraddr0   r8   r;   r?   rD   rI   rM   rO   rQ   rU   rY   r\   rd   re   rg   rr   rt   ru   rv   rw   r~   r   r   r   r   r      sb   




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









	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ejdejejed	ejjeoej edd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'd-d. Z(d/d0 Z)d1d2 Z*d3d4 Z+d5d6 Z,d7d8 Z-d9d: Z.d;d< Z/d=d> Z0d?d@ Z1dAdB Z2dCdD Z3dEdF Z4dGdH Z5dIdJ Z6dKdL Z7dMdN Z8dOdP Z9dQdR Z:dSdT Z;dUdV Z<dWdX Z=dYdZ Z>d[d\ Z?ejde
jeje
j@ejAejBgejd]eCeDd^eDd_geCeDE eFd`ggdadb ZGdcS )d#TestTimedeltaMultiplicationDivisionz
    Tests for Timedelta methods:

        __mul__, __rmul__,
        __div__, __rdiv__,
        __truediv__, __rtruediv__,
        __floordiv__, __rfloordiv__,
        __mod__, __rmod__,
        __divmod__, __rdivmod__
    rX   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   |znumpy.timedelta64ZNaTTyper   z'unsupported operand type\(s\) for \*: 'z' and ''z1ufunc '?multiply'? cannot use operands with typesr1   )r   joinr4   r5   rb   )r   r$   rX   r/   Ztypsr7   r   r   r   test_td_mul_natP  s    z3TestTimedeltaMultiplicationDivision.test_td_mul_natnanNaNc                 C   s&   t ddd}|||}|tks"td S rR   rS   )r   r$   r   r/   r   r   r   r   test_td_mul_nana  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^   rA   g      ?      r   r   g      r]   r1   r&   r    )
r   r   r,   r   r   valuer4   r5   rb   r   )r   r$   r/   r   r7   r   r   r   test_td_mul_scalari  s    


z6TestTimedeltaMultiplicationDivision.test_td_mul_scalarc                 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       <   r[   r   )r   r
   rH   r   r,   rC   isnanr   rT   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,   rC   r   r   rT   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^      r3   r:   rT   r   r   r   test_td_div_numeric_scalar  s    z>TestTimedeltaMultiplicationDivision.test_td_div_numeric_scalarz1https://github.com/pandas-dev/pandas/issues/31992)r5   reason)Zmarksc                 C   s8   t ddd}|| }|tks t|| }|tks4td S rR   rS   )r   r   r/   r   r   r   r   test_td_div_nan  s
    z3TestTimedeltaMultiplicationDivision.test_td_div_nanc                 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   r[   g      ?)r   r
   rH   r   r,   rC   rT   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'r1   <unsupported operand type\(s\) for /: 'float' and 'Timedelta')r   r   r,   r   r   rC   r4   r5   rb   r-   r   )r   r/   r   r7   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   rz   r    r   r1   z$cannot use operands with types dtype)r   r,   rl   objectra   rm   rn   r   r4   r5   rb   )r   r/   ro   r   rL   r7   r   r   r   test_td_rdiv_ndarray  s"    z8TestTimedeltaMultiplicationDivision.test_td_rdiv_ndarrayc                 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   rF   r   r    r^   )r   r   rN   rP   r   r/   scalarr   r   r   %test_td_floordiv_timedeltalike_scalar  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   rC   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
   rH   r   ZMinuter   r   r   r   test_td_floordiv_offsets  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   r   z.Invalid dtype datetime64\[D\] for __floordiv__z8'dtype' is an invalid keyword argument for this functionz5ufunc '?floor_divide'? cannot use operands with typesr1   
2016-01-01zdatetime64[us]rz   )r   r   r4   r5   rb   r,   r-   r   r/   r7   r   r   r   test_td_floordiv_invalid_scalar  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,   ra   int32uint8)r   r/   rL   r   r   r   test_td_floordiv_numeric_scalar)  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    rz   r   r   )
r   r,   rl   rP   r   r`   rm   rn   rC   r   )r   r/   r   rq   rL   r   r   r   $test_td_floordiv_timedeltalike_array4  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    rz   m)r   r|   Seriesr,   r`   r{   kindr   )r   r/   serrq   r   r   r   test_td_floordiv_numeric_seriesD  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   rN   rP   r   r   r   r   &test_td_rfloordiv_timedeltalike_scalarN  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   rC   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
   rH   r   r   r   r   r   r   test_td_rfloordiv_offsetsd  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'r1   )	r   r,   r-   r   NotImplementedr   r4   r5   rb   )r   r/   Zdt64r7   r   r   r    test_td_rfloordiv_invalid_scalarh  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_   r<   z9unsupported operand type\(s\) for //: '.*' and 'Timedeltar1   )r   r   r,   r   r   r   ra   r   r   r4   r5   rb   r   r   r   r    test_td_rfloordiv_numeric_scalarv  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    rz   r   r   )r   r   r,   rl   rP   r   r`   rm   rn   rC   r   )r   r/   r   rq   rL   ro   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 dtyper1   r    r   r   )r,   rl   r4   r5   rb   r   )r   Zintsr7   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    rz   r   r1   )r   r|   r   r,   r`   r   r   r   r4   r5   rb   )r   r/   r   rq   r7   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%   rF   rA   r    r   r   r   )r   r+   r   r   r   rT   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   rW   rT   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^   r[   r    rB   rT   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^   rG   rT   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   r9   r   )r   r+   r   intrT   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   r]   r1   r(   )r   r4   r5   rb   r   r   r   r   r   test_mod_invalid  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>   rT   r   r   r   test_rmod_pytimedelta  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^   rB   rT   r   r   r   test_rmod_timedelta64  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 operandr1   r(            0@Invalid dtype int      )r   r4   r5   rb   r   r,   rl   r   r   r   r   test_rmod_invalid  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^   rA   rE   g  $Br   r    r   r   r   )r   divmodr   r+   r,   r   r   rT   r   r   r   test_divmod_numeric  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^   rA   rE   r    r3   r   r   6   )r   r   r   r   r+   r   r,   r   rT   r   r   r   test_divmod&  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^   rA   rE   r@   r   r    r   r   )r   r   r
   rH   r   r+   rT   r   r   r   test_divmod_offset8  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^   rA   rE   zAunsupported operand type\(s\) for //: 'Timedelta' and 'Timestamp'r1   r(   )r   r4   r5   rb   r   r   r   r   r   r   test_divmod_invalidA  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^   rA   rE   r    r3   r   r   )r   r   r   r   r+   rf   r   r   r   test_rdivmod_pytimedeltaI  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
   rH   r   r   r+   rf   r   r   r   test_rdivmod_offsetP  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   r]   r1   r(   r   r   r   r   r   )r   r4   r5   rb   r   r   r,   rl   r   r   r   r   test_rdivmod_invalidV  s    
z8TestTimedeltaMultiplicationDivision.test_rdivmod_invalidro   rh   ri   rj   c              	   C   s0   d}t jt|d ||td W 5 Q R X d S )Nz7unsupported operand type|cannot use operands with typesr1   rj   )r4   r5   rb   r   )r   r$   ro   r7   r   r   r   (test_td_op_timedelta_timedeltalike_arrayj  s    zLTestTimedeltaMultiplicationDivision.test_td_op_timedelta_timedeltalike_arrayN)Hr   r   r   r   r4   r   r   r   r,   rC   r)   mulr   Zrmulr   r   ra   floatr   r   r   r   r   paramZxfailr   r	   ZPY39RuntimeWarningr   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rsubrl   r   rs   r   r   r   r   r   r   r   A  s    

	
	

	 r   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zejj	d	d
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 )Nry   z3 hoursrz   FT)r   r,   rl   r   boolallr   shape)r   r/   rc   ro   rq   rL   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,   rl   rm   rn   )r   Zperiodsro   r   rL   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    FTrz   )r,   ZarangeZastyper   rl   r   rm   rn   )r   ro   r/   rL   r   r   r   r   test_compare_td64_ndarray  s    z1TestTimedeltaComparison.test_compare_td64_ndarrayz'GH#20829 is reverted until after 0.24.0)r   c                 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                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )zGTestTimedeltaComparison.test_compare_custom_object.<locals>.CustomClassNc                 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   rc   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)'r1   )r   r4   r5   rb   )r   r  r  r7   r   r   r   test_compare_unknown_type  s    z1TestTimedeltaComparison.test_compare_unknown_typeN)r   r   r   r   r   r   r   r4   r   skipr  r   r  r   r   r   r   r   z  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  rx   )r   __add__r   r   __sub____truediv____mul____floordiv__)r  rc   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 )	Nrx   ar   r]   z3can only concatenate str \(not "Timedelta"\) to strzmust be str, not Timedeltar1   z"not supported between instances of)r   r   r4   r5   rb   r   )r/   leftrightr7   r   r   r   test_ops_error_str  s    r  )r   r   r   r)   Znumpyr,   r4   Zpandas.compatr   Zpandas.errorsr   Zpandasr|   r   r   r   r	   r
   Zpandas._testingZ_testingrm   Zpandas.corer   r   r   r   r  r  r   r   r   r   <module>   s*     '    =t