U
    sVc4V                    @   s  d dl m Z mZmZ d dlmZm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 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mZ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(m)Z) G dd dZ*G dd dZ+G dd dZ,G dd dZ-G dd dZ.G dd dZ/G dd dZ0G dd dZ1e
j23ddd dge
j23ddd d gd!d" Z4d#d$ Z5dS )%    )datetimetime	timedelta)productstarmapN)localize_pydatetime)shift_months)PerformanceWarning)	
DateOffsetDatetimeIndexNaTPeriodSeries	TimedeltaTimedeltaIndex	Timestamp
date_range)DatetimeArrayTimedeltaArray)	roperator)assert_cannot_addassert_invalid_addsub_typeassert_invalid_comparisonget_upcast_boxc                   @   s  e Zd Zdd Zejddddde edd	e	d
dd
 dejg	dd Zejdeedededejedeejdddjeejdddeejdddejdddeejddddjejddddeg
dd Zdd Zdd ZdS )"TestDatetime64ArrayLikeComparisonsc                 C   st   |}|}t dd|d}t| d }t||}t||d}||k}	tdddg}
t|
|}
t|	|
 d S )N20130101   periodstzr   TF)r   nparrayZto_numpytmbox_expectedr   assert_equal)selftz_naive_fixturebox_with_arrayr   boxdtiotherdtarrxboxresultexpected r/   K/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arithmetic/test_datetime64.pytest_compare_zerodim:   s    z7TestDatetime64ArrayLikeComparisons.test_compare_zerodimr*   fooc   g      @   daysi     Nc                 C   s.   |}t dd|d}t||}t||| d S )N1/1/2000
   r   )r   r"   r#   r   )r%   r*   r&   r'   r   rngr+   r/   r/   r0   test_dt64arr_cmp_scalar_invalidI   s    zBTestDatetime64ArrayLikeComparisons.test_dt64arr_cmp_scalar_invalidr:   Z1nsr   1 Dayz
1971-01-01Dfreqr   c                 C   s2   |}t ddd|dj}t||}t||| d S )N
1970-01-01nsr:   rA   r   r   )r   _datar"   r#   r   )r%   r*   r&   r'   r   dtaobjr/   r/   r0   "test_dt64arr_cmp_arraylike_invalidc   s    zETestDatetime64ArrayLikeComparisons.test_dt64arr_cmp_arraylike_invalidc              	   C   s  |}t ddd|dj}tddd|d tdd	g}||k}td
d
d
dd
g}t|| ||k}t||  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 )NrB   h   rD   r   r8   r5   r   r6   FTzDInvalid comparison between|Cannot compare type|not supported betweenmatch)
r   rE   r    r!   r   r"   assert_numpy_array_equalpytestraises	TypeError)r%   r&   r   rF   r*   r-   r.   msgr/   r/   r0   test_dt64arr_cmp_mixed_invalid|   s"    zATestDatetime64ArrayLikeComparisons.test_dt64arr_cmp_mixed_invalidc                 C   sn   |}|}t d|d}t|tg}t||}t||d}tddgtjd}	t|	|}	||k}
t|
|	 d S )Nz
2021-01-01r   TFdtype)	r   r   r   r"   r#   r   r    Zbool_r$   )r%   r&   r'   r   r(   tsserrG   r,   r.   r-   r/   r/   r0   test_dt64arr_nat_comparison   s    z>TestDatetime64ArrayLikeComparisons.test_dt64arr_nat_comparison)__name__
__module____qualname__r1   rN   markparametrizeobjectr   r   dater    nanr<   listrangeZarangeastypeZfloat32pdtimedelta_ranger!   Zperiod_rangerH   rR   rX   r/   r/   r/   r0   r   5   s@   


	r   c                   @   sT  e Zd Zejdedeedgeeedgfedeedgeeedgfe	dddee	d	ddgeee	d	ddgfgejd
ddgejdde
gejdejedddgfejedddgfejedddgfejedddgfejedddgfejedddgfgdd Zejdedeedgedeedge	dddee	d	ddggejdde
gdd Zejdedddedddgdd Zejddddd gd!d" Zd#d$ Zejd%ed&ed'dded(d)gejd*ejddddgfejddddgfejddddgfejddddgfgd+d, ZdS )-TestDatetime64SeriesComparisonpair
2011-01-01
2011-01-031 daysz3 daysz2011-01MrA   z2011-03reverseTFrU   Nzop, expectedc                 C   sL   |}|\}}	|r|	| }}	t ||d}
||	|d}||
|}t|| d S )NrT   )r   r"   assert_series_equal)r%   rU   index_or_seriesrm   rg   opr.   r(   lrleftrightr-   r/   r/   r0   test_nat_comparisons   s    '

z3TestDatetime64SeriesComparison.test_nat_comparisonsdatac                 C   s  |}t ||d}t||}t|td}dddg}t||}|tjkr^|tkr^tj|dd}t|tk| tt|k| dddg}t||}|tjkr|tkrtj|dd}t|tk| tt|k| dddg}t||}|tjkr|tkrtj|dd}t|tk | tt|k| t|tk| tt|k| t|tk| tt|k | t|tk| tt|k| d S )NrT   TFbool)	r   r"   r#   r   r   rd   r!   r^   r$   )r%   rU   rv   r'   r(   rs   r,   r.   r/   r/   r0   test_nat_comparisons_scalar   s8    



z:TestDatetime64SeriesComparison.test_nat_comparisons_scalarvali  r8      rJ   c                    s>   t tddd}| k}t  fdd|D }t|| d S )Nr9   r:   r=   c                    s   g | ]}| kqS r/   r/   .0xry   r/   r0   
<listcomp>  s     zQTestDatetime64SeriesComparison.test_series_comparison_scalars.<locals>.<listcomp>)r   r   r"   rn   )r%   ry   Zseriesr-   r.   r/   r~   r0   test_series_comparison_scalars	  s    z=TestDatetime64SeriesComparison.test_series_comparison_scalarsz
left,right)ltgt)lege)eqr   )ner   c           	      C   s   t tddddd}|jdd}td|d	< td|d
< tt|}tt|}||td}|td|}t|| ||td}|td|}t|| ||td}|td|}t|| ||t}|t|}t|| d S )NZ20010101r:   r=   datesnameT)deepnatr   r   Z20010109)	r   r   copyr   getattroperatorr"   rn   r   )	r%   rs   rt   rW   Zs_natZleft_fZright_fr.   r-   r/   r/   r0   test_timestamp_compare_series  s$    



z<TestDatetime64SeriesComparison.test_timestamp_compare_seriesc              	   C   s  t tdtdtg}t||}t||d}||k}tdddg|}t|| |tjkrbt	nd }t
| ||d k}W 5 Q R X tdddg|}t|| t
| ||d k}W 5 Q R X tdddg|}t|| ||k}tdddg|}t|| t
| ||d k}W 5 Q R X tdddg|}t|| t
| ||d k}W 5 Q R X tdddg|}t|| d S )Nz2000-01-29 01:59:00z
2000-01-30TFr   r5   )r   r   r   r"   r#   r   r$   rd   	DataFrameFutureWarningassert_produces_warning)r%   r'   rW   r,   r-   r.   warnr/   r/   r0   test_dt64arr_timestamp_equality4  s4    z>TestDatetime64SeriesComparison.test_dt64arr_timestamp_equalitydatetimeliker   i  z2013-01-01T00:00rC   zop,expectedc                 C   sH   t tdtdtjtdgdd}|||}t |dd}t|| d S )N20120101r   Z20130103Ar   )r   r   r    r`   r"   rn   )r%   r   rp   r.   rW   r-   r/   r/   r0   !test_dt64_compare_datetime_scalar\  s    	
z@TestDatetime64SeriesComparison.test_dt64_compare_datetime_scalar)rY   rZ   r[   rN   r\   r]   r   r   r   r   r^   r   r   r   r   r   r   r   r   ru   rx   r   r   r   r   r    
datetime64r   r/   r/   r/   r0   rf      sv   $ 
 

 (

	rf   c                   @   s(  e Zd Zdd Zejdedddede	
dgdd Zejd	d
egdd Zdd Zdd Zdd Zejdedddede	
dgejdejddd Zdd Zdd Zdd Zejjdejdddejddd ejdddjd gd!d" d#d$d% Zd&d' Zd
S )(TestDatetimeIndexComparisonsc                 C   sd   t d}|t|d  }t| }t|}|||}|||}t|tjsTt	t 
|| d S )Nd   r5   )r"   ZmakeDateIndexlenr   to_datetime64r    r!   
isinstanceZndarrayAssertionErrorrM   )r%   comparison_opindexelementZarrZ
arr_resultZindex_resultr/   r/   r0   test_comparators  s    



z-TestDatetimeIndexComparisons.test_comparatorsr*     r8   
2016-01-01c                 C   s   |}t dd|d}|d k	r6t|tjr*d S t||j}||k}tddg}t|| ||k}tddg}t|| ||k}tddg}t|| ||k }tddg}t|| ||k}tddg}t|| d S )Nr   r5   r   TF)	r   r   r    r   r   tzinfor!   r"   rM   )r%   r*   r&   r   r)   r-   r.   r/   r/   r0   test_dti_cmp_datetimelike  s*    z6TestDatetimeIndexComparisons.test_dti_cmp_datetimelikerU   Nc           
      C   s  t tdttdg}t tttdg}t||}t||}t||d}|| }}|tkrt|t|t }}||k}t	dddg}	t|	|}	t
||	 ||k}t	dddg}	t|	|}	t
||	 t	dddg}	t|	|}	t
|tk|	 t
t|k|	 t	dddg}	t|	|}	t
|tk|	 t
t|k|	 t	dddg}	t|	|}	t
|tk |	 t
t|k|	 d S )Nrh   ri   TF)r   r   r   r"   r#   r   r^   rc   r    r!   r$   )
r%   rU   r'   rs   rt   r,   lhsrhsr-   r.   r/   r/   r0   test_dti_cmp_nat  s8    
z-TestDatetimeIndexComparisons.test_dti_cmp_natc              
   C   s  t dtjdtjddg}t ddtjtjddg}tdtdtd	d
g}tddttdd
g}ttdtdtdtdtdtdg}||f||f||fg}t	d  |D ]\}}||k }	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 qW 5 Q R X t	d  |tjf|tffD ]\}}||k }	tddddddg}
t
|	|
 ||k}	t
|	|
 ||k}	t
|	|
 ||k}	t
|	|
 ||k}	t
|	|
 ||k}	tddddddg}
t
|	|
 qW 5 Q R X t	d ( |df|tdddffD ]\}}||k }	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 ||k}	tddddddg}
t
|	|
 qW 5 Q R X d S )N      ?      @g      @g      @       @g      @
2014-01-01
2014-03-01
2014-05-01
2014-07-01z
2014-02-01z
2014-06-01z2014-02-01 00:00z2014-03-01 00:00r   z2014-06-01 00:00z2014-07-01 00:00TFr   i  r8   )rd   Indexr    r`   r   r   r!   r   r"   r   rM   r   )r%   Zfidx1Zfidx2Zdidx1Zdidx2darrZcasesZidx1Zidx2r-   r.   ry   r/   r/   r0   +test_dti_cmp_nat_behaves_like_float_cmp_nan  s    "zHTestDatetimeIndexComparisons.test_dti_cmp_nat_behaves_like_float_cmp_nanc           	   	   C   st  |}|}t ddd}|d}t||}t||}|tjkrJdd }nt}|tjtj	fkr`d}t
jt|d ||| W 5 Q R X t
jt|d |||| W 5 Q R X t
jt|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 ||tj||td	 W 5 Q R X t||ksttt|||kstt|||kstttj||td	|kstt|tj||td	kstt||kstt|||kstt|||ks,tttj||td	|ksNtt|tj||td	ksptd S )
Nr      r=   
US/Pacificc                 S   s   |  tj d S )Nr   )rc   r^   valuestolistr}   r/   r/   r0   <lambda>A      zQTestDatetimeIndexComparisons.test_comparison_tzawareness_compat.<locals>.<lambda>z^Invalid comparison between dtype=datetime64\[ns.*\] and (Timestamp|DatetimeArray|list|ndarray)rK   rT   )r   tz_localizer"   r#   rd   r   ra   r   r   r   rN   rO   rP   r    r!   r^   allr   )	r%   r   r'   rp   r(   drdzr   rQ   r/   r/   r0   "test_comparison_tzawareness_compat5  sD    


"""""z?TestDatetimeIndexComparisons.test_comparison_tzawareness_compatc           	   	   C   s  |}t ddd}|d}t||}t||}td}tddd}t||ksXtd}|tj	tj
fkrtjt|d	 ||| W 5 Q R X t||kst|tj	tj
fkrtjt|d	 ||| W 5 Q R X |tj	tj
fkrtjt|d	 ||| W 5 Q R X d S )
Nr   r   r=   r   z2000-03-14 01:59zEurope/AmsterdamrS   zAInvalid comparison between dtype=datetime64\[ns.*\] and TimestamprK   )r   r   r"   r#   r   r    r   r   r   r   r   rN   rO   rP   )	r%   r   r'   rp   r   r   rV   Zts_tzrQ   r/   r/   r0   *test_comparison_tzawareness_compat_scalarsf  s&    
zGTestDatetimeIndexComparisons.test_comparison_tzawareness_compat_scalarsz*ignore:elementwise comp:DeprecationWarningz.ignore:Converting timezone-aware:FutureWarningc              	   C   s   |}|}t dd|d}t||}t||d}	|tjtjfkr|tjk}
tj|
|
gt	d}t||	}|||}t
|| |||}t
|| nXdt|j }tjt|d ||| W 5 Q R X tjt|d ||| W 5 Q R X d S )Nr   r5   r   TrT   z:Invalid comparison between dtype=datetime64\[ns, .*\] and rK   )r   r"   r#   r   r   r   r   r    r!   rw   r$   typerY   rN   rO   rP   )r%   r   r*   tz_aware_fixturer'   rp   r   r)   r+   r,   Zexboolr.   r-   rQ   r/   r/   r0   "test_scalar_comparison_tzawareness  s&    


z?TestDatetimeIndexComparisons.test_scalar_comparison_tzawarenessc                 C   sh   |}t dtdtddg}t|tjkgt| }||t}t|| ||	dt}t|| d S )Nr   r   r   r   r   )
r   r   r    r!   r   r   r   r"   rM   r   )r%   r   rp   r)   r.   r-   r/   r/   r0   test_nat_comparison_tzawareness  s    
z<TestDatetimeIndexComparisons.test_nat_comparison_tzawarenessc                 C   s
  |}t dd|d}d}||k}tdgdgd  }t|| ||k}tdgdgd  }t|| ||k }tdgd }t|| ||k}tdgdgd  }t|| ||k}tdgdgd  }t|| ||k}tdgd }t|| d S )Nr9   r:   r   TF	   )r   r    r!   r"   rM   )r%   r&   r   r;   r*   r-   r.   r/   r/   r0   test_dti_cmp_str  s*    z-TestDatetimeIndexComparisons.test_dti_cmp_strc                 C   s0   t ddd}|t|k}||k}t|| d S )Nr9   r:   r=   )r   ra   r"   rM   )r%   r;   r-   r.   r/   r/   r0   test_dti_cmp_list  s    z.TestDatetimeIndexComparisons.test_dti_cmp_listZ1Dr:   r=   m8[ns]c                 C   s
   t | jS N)r   rY   r   r/   r/   r0   r     r   z%TestDatetimeIndexComparisons.<lambda>)idsc              	   C   s   t dddd}||k}tdgd }t|| ||k}tdgd }t|| 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 )	N
2000-01-01r:   
Asia/Tokyor   FTzInvalid comparison betweenrK   )r   r    r!   r"   rM   rN   rO   rP   )r%   r*   r)   r-   r.   rQ   r/   r/   r0   test_dti_cmp_tdi_tzawareness  s     z9TestDatetimeIndexComparisons.test_dti_cmp_tdi_tzawarenessc              	   C   s   t dddd}|d}||k}tdgd }t|| |d }||k}t|| tt|d d tdd	gd  }||k}tdgd d
gd  }t|| d}t	j
t|d ||k W 5 Q R X d S )Nr   r:   r   r   OTrJ   r8   r6   FzB>=' not supported between instances of 'Timestamp' and 'Timedelta'rK   )r   rc   r    r!   r"   rM   r   ra   r   rN   rO   rP   )r%   r)   r*   r-   r.   rQ   r/   r/   r0   test_dti_cmp_object_dtype  s    

&z6TestDatetimeIndexComparisons.test_dti_cmp_object_dtype)rY   rZ   r[   r   rN   r\   r]   r   r   r    r   r   r^   r   r   r   r   filterwarningsr   r   r   r   rd   re   Z	to_seriesasi8viewr   r   r/   r/   r/   r0   r   ~  s>   

&`1

	
r   c                   @   s  e Zd Zejjdd Zdd Zdd Zdd Z	d	d
 Z
dd Zejdeded e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ejdddd d!d"d#d$d%gejd&d%d'gd(d) Zejd*d+ed,d-ged.dd/ed0d1d2gejd3d%dgd4d5 Zejd6dd d#dgejd3d%dgd7d8 Zd9d: Zejd;e ed<ed<ge e!ed<ge e!e!gd=d>gejd?d0d@ed0gdAdB Z"d%S )CTestDatetime64Arithmeticc                 C   sx   |}t dd|d}t dd|d}t||}t||}|| }t|| || }t|| ||7 }t|| d S )Nr   
2000-02-01rS   z2000-01-01 02:00z2000-02-01 02:00r   r"   r#   r$   r%   r&   Z	two_hoursr'   r   r;   r.   r-   r/   r/   r0   %test_dt64arr_add_timedeltalike_scalar!  s    z>TestDatetime64Arithmetic.test_dt64arr_add_timedeltalike_scalarc                 C   sd   |}t dd|d}t dd|d}t||}t||}|| }t|| ||8 }t|| d S )Nr   r   rS   z1999-12-31 22:00z2000-01-31 22:00r   r   r/   r/   r0   %test_dt64arr_sub_timedeltalike_scalar7  s    z>TestDatetime64Arithmetic.test_dt64arr_sub_timedeltalike_scalarc              	   C   s   t dddd}t||}tdd}td}|| }tddd	g}t||}t|| || }td
ddg}t||}t|| d}tjt	|d ||  W 5 Q R X tjt	|d ||  W 5 Q R X d S )Nr   r   r=   
US/EasternCETi5)30 days 06:00:00z1 days 06:00:00z2 days 06:00:00-1 days +18:00:00z-2 days +18:00:00z-3 days +18:00:00;Cannot subtract tz-naive and tz-aware datetime-like objectsrK   )
r   r   r"   r#   r   r   r$   rN   rO   rP   r%   r'   t1t2Ztnaiver-   r.   rQ   r/   r/   r0   .test_dt64_array_sub_dt_with_different_timezoneH  s*    zGTestDatetime64Arithmetic.test_dt64_array_sub_dt_with_different_timezonec              	   C   s   t dddd}t||}t dddd}t||}t ddd}|| }tdddg}t||}t|| || }tdddg}t||}t|| d}tjt|d	 ||  W 5 Q R X tjt|d	 ||  W 5 Q R X d S )
Nr   r   r=   r   r   r   r   r   rK   )	r   r   r"   r#   r   r$   rN   rO   rP   r   r/   r/   r0   6test_dt64_array_sub_dt64_array_with_different_timezonec  s,    zOTestDatetime64Arithmetic.test_dt64_array_sub_dt64_array_with_different_timezonec           
   	   C   s   |}t dd|dd}td}tdgd |d}t||}t||}|| }t|| || }t|| || }t|| d}	tjt	|	d ||  W 5 Q R X d S )	Nz
1994-04-01r   ZQSr   r   rA   r   rS   cannot subtractrK   )
r   r    timedelta64r   r"   r#   r$   rN   rO   rP   )
r%   r'   r&   r   r)   r*   r.   rG   r-   rQ   r/   r/   r0   test_dt64arr_add_sub_td64_nat  s    
z6TestDatetime64Arithmetic.test_dt64arr_add_sub_td64_natc              	   C   s   |}t dd|d}tdddg}|j}t ddd|d}t||}t||}|| }	t|	| || }	t|	| t ddd|d}t||}|| }	t|	| d}
tjt|
d	 ||  W 5 Q R X d S )
Nr   r   r   z-1 Dayz
2015-12-31z
2016-01-02z
2016-01-04z8cannot subtract|(bad|unsupported) operand type for unaryrK   )	r   r   r   r"   r#   r$   rN   rO   rP   )r%   r&   r'   r   r)   tdiZtdarrr.   r+   r-   rQ   r/   r/   r0    test_dt64arr_add_sub_td64ndarray  s$    z9TestDatetime64Arithmetic.test_dt64arr_add_sub_td64ndarrayrV   
2013-01-01r?   c                 C   st   t dddd }t||}tdddg}t||}|| }t|| || }t||  t||  d S )Nr   r   r=   z0 Daysr>   z2 Days)r   
_with_freqr"   r#   r   r$   )r%   r'   rV   idxr.   r-   r/   r/   r0   test_dt64arr_sub_dtscalar  s    z2TestDatetime64Arithmetic.test_dt64arr_sub_dtscalarc                 C   s|   t ddddd}|d }|d }t||}ttddtddg}t||}t|| | t|| |  d S )Nz
2014-03-17r5   r?   r   r   rA   r   r   r8   )r   r   r"   r#   r   r    r   r$   )r%   r'   rW   rV   Zdelta_seriesr.   r/   r/   r0   "test_dt64arr_sub_timestamp_tzaware  s    
z;TestDatetime64Arithmetic.test_dt64arr_sub_timestamp_tzawarec                 C   s   t ttdg}t||}|t }tttgdd}t||}t|| |d}t||}|t }tttgdd}t||}t|| d S )N19900315timedelta64[ns]rT   r   )r   r   r   r"   r#   r   r$   r   )r%   r'   r)   rW   r-   r.   dti_tzZser_tzr/   r/   r0   test_dt64arr_sub_NaT  s    
z-TestDatetime64Arithmetic.test_dt64arr_sub_NaTc              	   C   sb   t dd|d}|| }t||}t||}tt ||t }W 5 Q R X t|| d S Nr   r   r   )r   r"   r#   r   r	   rc   r^   r$   )r%   r'   r&   r)   r.   rG   r-   r/   r/   r0   !test_dt64arr_sub_dt64object_array  s    z:TestDatetime64Arithmetic.test_dt64arr_sub_dt64object_arrayc                 C   sT   t ddd d}|j}t||}|| }|| }t|| || }t|| d S r   )r   r   r"   r#   r$   )r%   r'   r)   dt64valsr+   r.   r-   r/   r/   r0   "test_dt64arr_naive_sub_dt64ndarray  s    z;TestDatetime64Arithmetic.test_dt64arr_naive_sub_dt64ndarrayc              	   C   sp   |}t dd|d}|j}t||}d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d S )Nr   r   r   z.Cannot subtract tz-naive and tz-aware datetimerK   )r   r   r"   r#   rN   rO   rP   )r%   r   r'   r   r)   r   r+   rQ   r/   r/   r0   )test_dt64arr_aware_sub_dt64ndarray_raises  s    zBTestDatetime64Arithmetic.test_dt64arr_aware_sub_dt64ndarray_raisesc                 C   s   |}t dd|d}|d kr&|d}n
|d }t||}t||j t|| t|| t||d  t||d   t||d   t||d  t||d   t|t	dd d S )Nr   r   r   r   r   rh   r?   )
r   r   r"   r#   r   r   to_pydatetimer   r    r   )r%   r&   r'   r   r)   dti2r+   r/   r/   r0   test_dt64arr_add_dtlike_raises  s    


z7TestDatetime64Arithmetic.test_dt64arr_add_dtlike_raisesrA   HWrk   ZMSQBNrU   Zuint8c           
      C   s   |}|t jkrd S |d kr,tddg|d}ntdd||d}||}tjddg|d	}d
dddddg}	t|d|	 t|td|	 t|tjdtjd	|	 t|||	 t|t||	 t|t ||	 t|t 	||	 t|t 
||	 t|t jjj||	 t|t||	 d S )Nr   z2017-04-05 06:07:08rS   r   r5   r   rz   r3   rT   |z Addition/subtraction of integersz"cannot subtract DatetimeArray fromz(can only perform ops with numeric valuesz%unsupported operand type.*Categoricalz:unsupported operand type\(s\) for -: 'int' and 'Timestamp'r8   r   )rd   r   r   r   r    r!   joinr   Zint64ZCategoricalr   coreZindexesapiZNumericIndexr   )
r%   rU   r'   rA   r&   r   r)   rG   r*   rQ   r/   r/   r0   test_dt64arr_addsub_intlike2  s4    

z4TestDatetime64Arithmetic.test_dt64arr_addsub_intliker*   gQ	@r   r   rh   rl   r8   r5   r   dti_freqc                 C   s@   t ddg|d}t||}dddddd	g}t||| d S )
Nrh   
2011-01-02rl   r   zunsupported operand typecannot (add|subtract)zcannot use operands with typesz7ufunc '?(add|subtract)'? cannot use operands with typesz;Concatenation operation is not implemented for NumPy arrays)r   r"   r#   r  r   )r%   r  r*   r'   r)   r+   rQ   r/   r/   r0   test_dt64arr_add_sub_invalidZ  s    	z5TestDatetime64Arithmetic.test_dt64arr_add_sub_invalidpi_freqc           
      C   sT   t ddg|d}||}t||}t||}dddddg}	t|||	 d S )	Nrh   r  rl   r   r  unsupported operandzdescriptor.*requireszufunc.*cannot use operands)r   Z	to_periodr"   r#   r  r   )
r%   r  r	  r'   Zbox_with_array2r)   pir+   ZparrrQ   r/   r/   r0   test_dt64arr_add_sub_parrt  s    
z2TestDatetime64Arithmetic.test_dt64arr_add_sub_parrc              	   C   s   |}t dd|d}dd tdD }t||}t||}dddg}tjd	d
  tdt t	|||d W 5 Q R X d S )N
2012-01-01r   r   c                 S   s   g | ]}t |||qS r/   )r   )r|   ir/   r/   r0   r     s     zTTestDatetime64Arithmetic.test_dt64arr_addsub_time_objects_raises.<locals>.<listcomp>r   r
  z*cannot subtract DatetimeArray from ndarrayTrecordignore)rQ   )
r   rb   r"   r#   r  warningscatch_warningssimplefilterr	   r   )r%   r'   r&   r   Zobj1obj2rQ   r/   r/   r0   'test_dt64arr_addsub_time_objects_raises  s    z@TestDatetime64Arithmetic.test_dt64arr_addsub_time_objects_raisesdt64_seriesr   datetime64[ns]rT   oner   c              	   C   s   t ||}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 d S )Nz&cannot perform .* with this index typerK   )r"   r#   rN   rO   rP   )r%   r  r  r'   rG   rQ   r/   r/   r0   !test_dt64_mul_div_numeric_invalid  s    
z:TestDatetime64Arithmetic.test_dt64_mul_div_numeric_invalid)#rY   rZ   r[   rN   r\   Zarm_slowr   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/   r0   r     s`   




&

r   c                &   @   s  e Zd Zdd Zdd Zejddddd	d
ddgdd Zdd Z	dd Z
ejdddddifddddifddddddddifddddifd d!d"d#d$d%d&d'd(d)d*d+d,d-d.dd/ifd0d1d1d/d2d3fd4d5d/d2d6fd7d/d/d8fd9d:d;d<ifd:ddifg!ejd=d>d?gejd@d5dgdAdB ZdCdD ZejdEeej ejjd/dFgeejjd1dGej geejjd1dGejjd1dGggejdHejejejgejdId>d?gdJdK ZejdLdMeddNdOedPedQedRedSgdTfdMeddUedVedWedXedYgdZfd[eddNdOed\ed]ed^ed_gdTfd[eddUed`edaedbedcgddfgdedf ZdTS )g"TestDatetime64DateOffsetArithmeticc                 C   s|   t tdtdg}t tdtdg}t||}t||}|tjd }t|| tjd| }t|| d S )N20130101 9:0120130101 9:02z20130101 9:01:05z20130101 9:02:05rJ   )r   r   r"   r#   rd   offsetsSecondr$   )r%   r'   rW   r.   r-   result2r/   r/   r0   'test_dt64arr_series_add_tick_DateOffset  s    zJTestDatetime64DateOffsetArithmetic.test_dt64arr_series_add_tick_DateOffsetc              	   C   s   t tdtdg}t tdtdg}t||}t||}|tjd }t|| tjd | }t|| d}tj	t
|d tjd|  W 5 Q R X d S )Nr  r  z20130101 9:00:55z20130101 9:01:55rJ   ((bad|unsupported) operand type for unaryrK   )r   r   r"   r#   rd   r  r  r$   rN   rO   rP   )r%   r'   rW   r.   r-   r   rQ   r/   r/   r0   'test_dt64arr_series_sub_tick_DateOffset  s    zJTestDatetime64DateOffsetArithmetic.test_dt64arr_series_sub_tick_DateOffsetcls_nameDayHourMinuter  MilliZMicroZNanoc                 C   sT   t tdtdg}t||}ttj|}||d  |d|  ||d  d S )Nr  r  rJ   )r   r   r"   r#   r   rd   r  )r%   r$  r'   rW   
offset_clsr/   r/   r0   *test_dt64arr_add_sub_tick_DateOffset_smoke  s    zMTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_tick_DateOffset_smokec           
   
   C   s  |}|dkrJt dd|d}|tjd }|d tjd |d ksJtt dd|dd	}td
ddgd|d}t||}t||}tjdt	ddt
ddfD ]p}|| }t|| || }t|| || }t|| dddg}	tjt|	d ||  W 5 Q R X qd S )Nr   z
2012-11-01r   r   rJ   r   z2010-11-01 00:00r   r   z2010-11-01 05:00z2010-11-01 06:00z2010-11-01 07:00)rA   r   rI   )hoursr   zbad operand type for unary -zcannot subtract DatetimeArrayrK   )r   rd   r  r&  r   r   r"   r#   r    r   r   r$   r  rN   rO   rP   )
r%   r   r'   r   r   offsetr.   ZscalarZ	roundtriprQ   r/   r/   r0   test_dti_add_tick_tzaware  s2     $z<TestDatetime64DateOffsetArithmetic.test_dti_add_tick_tzawarec           
   
      s  t tdtdtdtdtdtdtdtdg}t||}|tjkrX|jd	 n|}d
ddddddg}t|D ]"\}\}}tf ||i t  fdd|D }t||}t	||   t  fdd|D }t||}t	||   tf t
|d |d   t  fdd|D }t||}t	||   t  fdd|D }t||}t	||   d}	tjt|	d  |  W 5 Q R X qvd S )N2000-01-05 00:15:002000-01-31 00:23:00r   
2000-03-31
2000-02-29
2000-12-31
2000-05-15
2001-06-15r   )yearsr5   )monthsrJ   )r7   r   )r+  rJ   )minutesr:   )secondsr5   )microsecondsrJ   c                    s   g | ]}|  qS r/   r/   r{   offr/   r0   r   <  s     zaTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_relativedelta_offsets.<locals>.<listcomp>c                    s   g | ]}|  qS r/   r/   r{   r:  r/   r0   r   @  s     r8   c                    s   g | ]}|  qS r/   r/   r{   r:  r/   r0   r   F  s     c                    s   g | ]}|  qS r/   r/   r{   r:  r/   r0   r   J  s     r"  rK   )r   r   r"   r#   rd   r   iloc	enumerater
   r$   dictrN   rO   rP   )
r%   r'   vec	vec_itemsZrelative_kwargsr  unitvaluer.   rQ   r/   r:  r0   *test_dt64arr_add_sub_relativedelta_offsets  sN    	zMTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_relativedelta_offsetscls_and_kwargsZ	YearBeginmonthrJ   ZYearEndZ
MonthBeginMonthEndZSemiMonthEndZSemiMonthBeginZWeekweekdayr   r   ZBusinessDayZBDayZ
QuarterEndZQuarterBeginZCustomBusinessDayZCDayZ
CBMonthEndZCBMonthBeginZBMonthBeginZ	BMonthEndZBusinessHourZ
BYearBeginZBYearEndZBQuarterBeginLastWeekOfMonthr5   FY5253Quarterr8   Znearest)Zqtr_with_extra_weekstartingMonthrG  	variationFY5253r   )rG  rJ  rK  WeekOfMonth)rG  weekZEasterr
   dayrz   	normalizeTFnc              
      s  t |tr|\}}n|}i }|dkr0|dkr0d S ttdtdtdtdtdtdtd	td
g}t||}|tjkr|jd n|}t	tj
|}	tjdd tdt |	|fd|i| t fdd|D }
t|
|}
t|
|   t fdd|D }
t|
|}
t|
|   t fdd|D }
t|
|}
t|
 |  d}tjt|d  |  W 5 Q R X W 5 Q R X d S )Nr   )rM  rH  rI  rL  r.  r/  r   r0  r1  r2  r3  r4  Tr  r  rP  c                    s   g | ]}|  qS r/   r/   r{   r,  r/   r0   r     s     zWTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_DateOffsets.<locals>.<listcomp>c                    s   g | ]}|  qS r/   r/   r{   rR  r/   r0   r     s     c                    s   g | ]} | qS r/   r/   r{   rR  r/   r0   r     s     r"  rK   )r   tupler   r   r"   r#   rd   r   r<  r   r  r  r  r  r	   r$   rN   rO   rP   )r%   r'   rQ  rP  rD  r$  kwargsr?  r@  r)  r.   rQ   r/   rR  r0    test_dt64arr_add_sub_DateOffsetsV  sF    6

zCTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_DateOffsetsc                 C   s  t dddd}t||}|tdd }tdd| }t ddddd }t||}t|| t|| |tdd }t d	d
ddd }t||}t|| ttdddtdddgdd}t||}|tj	
  }tj	
 | }ttdddtdddgdd}t||}t|| t|| ttdddtdddgdd}t||}|tj	  }tj	 | }ttdddtdddgdd}t||}t|| t|| d S )Nr   z
2000-01-31ar   r8   r5  z
2001-01-01z
2001-01-31z
1999-01-01z
1999-01-31z2000-01-15 00:15:00z
US/CentralrS   z
2000-02-15z2000-01-16 00:15:00z
2000-02-16z2000-01-31 00:15:00r1  )r   r"   r#   r
   r   r$   r   r   rd   r  r%  rF  )r%   r'   sr-   r   expr/   r/   r0   test_dt64arr_add_sub_DateOffset  s`    







zBTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_DateOffsetr*   rQ  rW  rp   	box_otherc           
   	      s   |}t dd|d t |}ttj tjjddgt	 fddt
t D }t||}|rzt|tt |}	W 5 Q R X t|	| d S )N
2017-01-01r5   r   r[  c                    s   g | ]} | | qS r/   r/   r|   rQ  r)   rp   r*   r/   r0   r     s     zXTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_offset_array.<locals>.<listcomp>)r   r"   r#   r    r!   rd   r  rF  r%  r   rb   r   r   r	   r$   )
r%   r&   r'   r\  rp   r*   r   r+   r.   resr/   r_  r0   !test_dt64arr_add_sub_offset_array  s    "zDTestDatetime64DateOffsetArithmetic.test_dt64arr_add_sub_offset_arrayzop, offset, exp, exp_freq__add__r:   )r6  r7   z
2014-04-11z
2015-04-11z
2016-04-11z
2017-04-11N)r6  z
2014-04-01z
2015-04-01z
2016-04-01z
2017-04-01zAS-APR__sub__z
2013-09-21z
2014-09-21z
2015-09-21z
2016-09-21z
2013-10-01z
2014-10-01z
2015-10-01z
2016-10-01zAS-OCTc                 C   s^   |}t ddd|d}t||d}t||}	|	|}
t||d}t||d}t|
| d S )Nz01 Jan 2014z01 Jan 2017ZAS)startendrA   r   FrS   )r   r"   r#   r   r   r$   )r%   rp   r,  rY  Zexp_freqr   r'   r   r_   Zmthr-   r.   r/   r/   r0   #test_dti_add_sub_nonzero_mth_offset!  s    5
zFTestDatetime64DateOffsetArithmetic.test_dti_add_sub_nonzero_mth_offset)rY   rZ   r[   r!  r#  rN   r\   r]   r*  r-  rC  rU  rZ  r    r!   rd   r  rF  r%  r
   r   addr   raddsubra  r   rf  r/   r/   r/   r0   r    s    
$8




	

.?:


1r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestDatetime64OverflowHandlingc                 C   s^   t tdg}t tg}t||}t||}ttg}t||}|| }t|| d S )Nz
1969-12-31)r   r   r   r"   r#   r   r$   )r%   r'   rs   rt   r.   r-   r/   r/   r0   test_dt64_overflow_maskingd  s    

z9TestDatetime64OverflowHandling.test_dt64_overflow_maskingc              	   C   sH  t d}td}tdddd}t|}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 t|jd	< td
dddgdd}|| }t	
|| || }t	
|| t|jdd < tddddgdd}|| }t	
|| || }t	
||  d S )Nz
1700-01-31z
20000 Daysz
1949-09-30Z100Yrz   r@   Overflow in int64 additionrK   r3   z
2004-10-03z
2104-10-04z
2204-10-04r   r  rT   r8   z
91279 Daysr   )r   r   r   r   rN   rO   OverflowErrorr   r<  r"   rn   )r%   dttdr)   rW   rQ   r.   r`  r/   r/   r0   test_dt64_series_arith_overflowr  s8    

 z>TestDatetime64OverflowHandling.test_dt64_series_arith_overflowc              
   C   s>  t dtjg}t dtjg}td}|| | d| dg}td}|| | d| dg}d}|D ]&}tj	t
|d ||  W 5 Q R X qtjj|j }	|D ]}|| }
|
d j|	kstqtjj|j }	|D ]}|| }
|
d j|	kstq|D ](}tj	t
|d ||  W 5 Q R X qd S )	N2021-12-28 17:19
1950-01-01r  zdatetime64[D]
1980-01-01rl  rK   r8   )rd   to_datetimer   maxminr   r   rc   rN   rO   rm  rB  r   )r%   dtimaxdtiminZtsnegZts_neg_variantsZtsposZts_pos_variantsrQ   variantr.   r`  r/   r/   r0   )test_datetimeindex_sub_timestamp_overflow  s:    zHTestDatetime64OverflowHandling.test_datetimeindex_sub_timestamp_overflowc              	   C   sd  t dtjg}t dtjg}t ddg}t ddg}tjj|d j }|| }|d j|kshttjj|d j }|| }|d j|kstd}tjt	|d ||  W 5 Q R X tjt	|d ||  W 5 Q R X t tjg}|t
j t
d }	tjt	|d |	|  W 5 Q R X t tjg}
|
t
j t
d }tjt	|d |
|  W 5 Q R X d S )Nrq  rr  rs  r8   rl  rK   Z1us)rd   rt  r   ru  rv  rB  r   rN   rO   rm  r   )r%   rw  rx  Zts_negZts_posr.   r-   rQ   Ztminr   Ztmaxr   r/   r/   r0   -test_datetimeindex_sub_datetimeindex_overflow  s.    zLTestDatetime64OverflowHandling.test_datetimeindex_sub_datetimeindex_overflowN)rY   rZ   r[   rk  rp  rz  r{  r/   r/   r/   r0   rj  a  s    &rj  c                   @   s  e Zd Zdd Zdd Zdd Zejde	de	d	e
ge	d
e	de	dgddgge	de	d	e
gedddeddde
gdddgge	ddde	ddde
geddde
edddgdddgggdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%TestTimestampSeriesArithmeticc              	   C   s~   t dd}t dd}||}||}t|||  t|||  t|||  d}tjt|d ||  W 5 Q R X d S )NzM8[ns]rT   r   r   rK   )r   r"   r$   rN   rO   rP   )r%   r'   rV  brQ   r/   r/   r0   test_empty_series_add_sub  s    

z7TestTimestampSeriesArithmetic.test_empty_series_add_subc                 C   s   t tdddgd }tj|jd< t tdtdtdg}tj|jd< t tdtd	td
g}||  ||  ||  ||  ||  ||  ||  d S )NrJ   r   r7  r8  r5   20111230r   Z20120103201112312012010220120104)r   r   r    r`   r<  r   )r%   td1dt1dt2r/   r/   r0   test_operators_datetimelike  s,    z9TestTimestampSeriesArithmetic.test_operators_datetimelikec                 C   sV   t tdddddd}tddddd}t|g}tt|| }|jd	ksRtd S )
Ni  r8            r   r      r   )	r   r   r   rd   Zto_timedeltar    absrU   r   )r%   rV   rn  rW   r-   r/   r/   r0   test_dt64ser_sub_datetime_dtype  s
    
z=TestTimestampSeriesArithmetic.test_dt64ser_sub_datetime_dtypezleft, right, op_failr  r   r  r  r  rc  __rsub__rJ   r   r  rb  __radd__r   rS   c           	   	   C   sX   |}t |}t |}t||d }||krLtjtdd || W 5 Q R X n|| d S )Nz%operate|[cC]annot|unsupported operandrK   )r   r   rN   rO   rP   )	r%   rs   rt   Zop_failZall_arithmetic_operatorsZop_strZarg1Zarg2rp   r/   r/   r0   #test_operators_datetimelike_invalid  s     zATestTimestampSeriesArithmetic.test_operators_datetimelike_invalidc                 C   sl   t tdddg}t tdddg}|| }t tdg}t|| || }t tdg}t|| d S )Nz
2016-02-10zAmerica/Sao_PaulorS   z
2016-02-08Z2daysz-2days)r   r   r   r"   rn   )r%   s1s2r-   r.   r/   r/   r0   test_sub_single_tzD  s    z0TestTimestampSeriesArithmetic.test_sub_single_tzc                 C   sT   t dddd}t|}ttdgd }|| }t|| || }t|| d S )Nz
1999-09-30r:   r   r   Z0days)r   r   r   r"   rn   )r%   r)   rW   r.   r`  r/   r/   r0   test_dt64tz_series_sub_dtitzO  s    z:TestTimestampSeriesArithmetic.test_dt64tz_series_sub_dtitzc                 C   sh   t tddddtjdtg}tddddtjd}t tdtg}t|| | t|t| | d S )Nr            )r   r  rj   )	r   r   pytzutcr   r   r"   rn   r   )r%   rX  rn  rY  r/   r/   r0   test_sub_datetime_compat[  s
    z6TestTimestampSeriesArithmetic.test_sub_datetime_compatc                 C   s   t tdtdg}|tjd }tjd| }t tdtdg}t|| t|| |tjd tjd }t tdtdg}t|| d S )Nr  r  rJ   z20130101 9:01:00.005z20130101 9:02:00.005z20130101 9:06:00.005z20130101 9:07:00.005)r   r   rd   r  r(  r"   rn   r'  )r%   rX  r-   r   r.   r/   r/   r0   *test_dt64_series_add_mixed_tick_DateOffsetc  s    zHTestTimestampSeriesArithmetic.test_dt64_series_add_mixed_tick_DateOffsetc              	   C   s   t ttdg}t ttgdd}t tgdd}tt | | d}tjt|d | |  W 5 Q R X tt | | tjt|d | |  W 5 Q R X t|t | tt| | t|t | tt| | d S )Nr   r  rT   z-bad operand type for unary -: 'DatetimeArray'rK   )r   r   r   r"   rn   rN   rO   rP   )r%   datetime_seriesnat_series_dtype_timestampsingle_nat_dtype_datetimerQ   r/   r/   r0   test_datetime64_ops_natv  s:         z5TestTimestampSeriesArithmetic.test_datetime64_ops_natc           	   	   C   s  d}t tdd|ddd}| }tj|jd< t tjddd	d
}| }tj|jd< |jj	d ksft
||d  }|jd |d  j|}t|| ||d  }|jd |d  j|}t|| |d | }|jd |d  j|}t|| |d | }|jd |d  j|}t|| ||d  }|jd |d  j|}t|| d}tjt|d |d |  W 5 Q R X ||d  }|jd |d  j|}t|| tjt|d |d |  W 5 Q R X || }|jd | j|}t|| || }|jd | j|}t|| || }|jd | j|}t|| || }|jd | j|}t|| d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d S )Nr   z2000-01-01 09:00:00rJ   r   r2   r   r5   z1 days 1 minr   )r   rA   r8   r   r"  rK   r  )r   r   r   r    r`   r<  rd   re   _valuesrA   r   rn  r   r"   rn   rN   rO   rP   )	r%   r   r  r  r  Ztd2r-   rY  rQ   r/   r/   r0   *test_operators_datetimelike_with_timezones  s`    zHTestTimestampSeriesArithmetic.test_operators_datetimelike_with_timezonesN)rY   rZ   r[   r~  r  r  rN   r\   r]   r   r   r   r  r  r  r  r  r  r  r/   r/   r/   r0   r|    s:   "


$r|  c                   @   s   e Z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jgdd Zdd Zdd Zdd Ze	j
dejejejgdd Ze	j
dejejgdd ZdS )TestDatetimeIndexArithmeticc                 C   s   |}t td|dgd }tjddd}tdd|d}|d }|| }t|| || }t|| ||j }t|| |j| }t|| d S Nr]  rS   r:   0 daysr=   r   	r   r   rd   re   r   r   r"   assert_index_equalr   r%   r&   r   r)   r   r.   r-   r/   r/   r0   test_dti_add_tdi  s    


z,TestDatetimeIndexArithmetic.test_dti_add_tdic                 C   s   |}t td|dgd }tjddd}tdd|d}|d }t td|dgd }||7 }t|| tjddd}||7 }t|| t td|dgd }||j7 }t|| tjddd}||7 }t|| d S r  r  r  r/   r/   r0   test_dti_iadd_tdi  s"    

z-TestDatetimeIndexArithmetic.test_dti_iadd_tdic              	   C   s   |}t td|dgd }tjddd}tdd|dd}|d }|| }t|| d}tj	t
|d	 ||  W 5 Q R X ||j }t|| d
}tj	t
|d	 |j|  W 5 Q R X d S )Nr]  rS   r:   r  r=   -1Dr   z cannot subtract .*TimedeltaArrayrK   0cannot subtract a datelike from a TimedeltaArray)r   r   rd   re   r   r   r"   r  rN   rO   rP   r   )r%   r&   r   r)   r   r.   r-   rQ   r/   r/   r0   test_dti_sub_tdi  s    

z,TestDatetimeIndexArithmetic.test_dti_sub_tdic           
   	   C   sZ  |}t td|dgd }tjddd}tdd|dd}|d }t td|dgd }||8 }t|| |j	 }||8 }t
||j |j	 }tj|||d t
||j d	}	tjt|	d
 ||8 }W 5 Q R X t td|dgd }||j8 }t|| tjt|	d
 | j|8  _W 5 Q R X tjt|	d
 | j|8  _W 5 Q R X d S )Nr]  rS   r:   r  r=   r  r   )outr  rK   )r   r   rd   re   r   r   r"   r  rE   r   Zassert_datetime_array_equalr    subtractrN   rO   rP   r   r  )
r%   r&   r   r)   r   r.   r-   rF   r  rQ   r/   r/   r0   test_dti_isub_tdi%  s0    



z-TestDatetimeIndexArithmetic.test_dti_isub_tdic                 C   sp   t dd|d}|j}|| }|| }t|| |}|| }|| }t|| || }|| }t|| d S )Nr   r   r   )r   r!   r"   r  )r%   r&   r)   rF   r-   r.   r   r/   r/   r0   test_dta_add_sub_indexQ  s    z2TestDatetimeIndexArithmetic.test_dta_add_sub_indexc              	   C   s8  t ddd}t dddd}tdddg}|| }t|| || }t|| d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X ||8 }t|| t ddd}t ddd}d	}tjt|d ||  W 5 Q R X t	d
t
jdg}t	ddt
jg}tdt
jt
jg}|| }t|| d S )Nr   r   r=   r   r   r   rK   rz   z$cannot add indices of unequal lengthr  z
2012-01-03z
2012-01-02rj   )r   r   r   r"   r  rN   rO   rP   
ValueErrorr   r    r`   )r%   r)   r   r.   r-   rQ   Zdti1r   r/   r/   r0   test_sub_dti_dtib  s0    z,TestDatetimeIndexArithmetic.test_sub_dti_dtirp   c                    s   t tdtdtdtdg}||}ddddd	g  fd
d}ttdgd  D ]P\}}}}	}
|||||	|
}t||||	|
d}|||}|||}t|| qTd S )NZ20130301z20130228 23:00:00z20130228 22:00:00z20130228 21:00:00r?   rI   mrX  usc                     s   t ttt jt|  S r   )r    sumra   r   r   zip)argsZ	intervalsr/   r0   r     s    z_TestDatetimeIndexArithmetic.test_timedelta64_equal_timedelta_supported_ops.<locals>.timedelta64r5   rJ   )r7   r+  r7  r8  r9  )r   r   r   rb   r   r"   r$   )r%   rp   r'   rW   rG   r   drI   r  rX  r  ZnptdZpytdr   r   r/   r  r0   .test_timedelta64_equal_timedelta_supported_ops  s      

zJTestDatetimeIndexArithmetic.test_timedelta64_equal_timedelta_supported_opsc              	   C   sJ  t ttdg}t ttdg}t ttgdd}t ttgdd}t tgdd}t tgdd}t|| | t|| | t| | | t|| | t|| | t| | | d}tjt|d ||  W 5 Q R X t|| | t|| | t|| | t|| | t|| | t|| | d S )NZ1sr   r   rT   r  zcannot subtract a datelikerK   )	r   r   r   r   r"   rn   rN   rO   rP   )r%   Ztimedelta_seriesr  Znat_series_dtype_timedeltar  r  Zsingle_nat_dtype_timedeltarQ   r/   r/   r0   )test_ops_nat_mixed_datetime64_timedelta64  sr       zETestDatetimeIndexArithmetic.test_ops_nat_mixed_datetime64_timedelta64c                 C   s  t ddddd}tdd}t ddddd}|| t||fD ],}t|tsRtt|| |j	dks@tq@t d	dddd}|| t
||fD ],}t|tstt|| |j	dkstq|d }ttddtd
dtddg}tdddgdd}|| t||fD ]$}t|| |j	|j	kstqtd	ddgdd}|| t
||fD ]4}t|tsxtt|| |j	|j	ksdtqdd S )Nrh   r   Z2Dr}   )r   rA   r   r8   r?   r  z
2010-12-31r5   z
2011-01-05z
2011-01-08r   )r   r    r   rg  r   r   r   r"   r  rA   r  r   r!   )r%   r   deltarY  r-   r/   r/   r0   test_ufunc_coercions  s2    
 z0TestDatetimeIndexArithmetic.test_ufunc_coercionsc                 C   s   |}t ddg||d d}ttddgd ||d d	}t|tdd ||d d	}|d |_|j|jksnt|| }t|| || }t|| |tdd }|j| }	t	|	| ||j }
t	|
| d S )
Nz2016-06-28 05:30z2016-06-28 05:31r   )r   r   rJ   )r8  r5   r8   )r   r   )
r   r   r   r   rU   r   r"   rn   r   r  )r%   r&   namesr   r   rW   r.   r-   r   Zresult3Zresult4r/   r/   r0   test_dti_add_series	  s&      


z/TestDatetimeIndexArithmetic.test_dti_add_seriesc           
   	      s   |}|}t dd||d d |tj tjjddg|d dt }tt  }W 5 Q R X t	 fdd	t
t D |d d
d}	t|	|}	t||	 d S )Nr]  r5   r   )r   r   r   r[  r8   r   c                    s   g | ]} | | qS r/   r/   r^  r_  r/   r0   r   6	  s     zPTestDatetimeIndexArithmetic.test_dti_addsub_offset_arraylike.<locals>.<listcomp>Zinfer)r   rA   )r   rd   r  rF  r%  r   r"   r   r	   r   rb   r   r#   r$   )
r%   r&   r  rp   ro   	other_boxr   r,   r`  r.   r/   r_  r0    test_dti_addsub_offset_arraylike%	  s    $
  z<TestDatetimeIndexArithmetic.test_dti_addsub_offset_arrayliker  c              	   C   s   |}t dd|d}t||}|tj tddg}t||}tddg|d}	t|	|}	t	t
 || }
W 5 Q R X t|
|	 td	d
g|d}	t|	|}	t	t
 || }
W 5 Q R X t|
|	 d S )Nr]  r5   r   rz   r6   z
2017-01-31z
2017-01-06rS   z
2016-12-31z
2016-12-29)r   r"   r#   rd   r  rF  r   r   r   r   r	   r$   )r%   r&   r'   r  r   r)   r+   r*   r,   r.   r-   r/   r/   r0    test_dti_addsub_object_arraylike;	  s    
z<TestDatetimeIndexArithmetic.test_dti_addsub_object_arraylikeN)rY   rZ   r[   r  r  r  r  r  r  rN   r\   r]   r   rg  ri  r  r  r  r  r   rh  r  rd   r   r    r!   r  r/   r/   r/   r0   r    s   ,*
E#
r  r5  r3   r8   r6  r5   c                    sj   t tdtdtdtdtdg}t t|jd   } fdd|D }t |}t|| d S )	Nr.  r/  r   r1  r2  r  c                    s    g | ]}|t jj d  qS ))r5  r6  )rd   r  r
   r{   r6  r5  r/   r0   r   c	  s     z%test_shift_months.<locals>.<listcomp>)r   r   r   r   r"   r  )r5  r6  r)   actualrawr.   r/   r  r0   test_shift_monthsU	  s    	r  c               	   C   s4  t dddd} | jd}tdd tdD }|j|jksBtt	t
 || }W 5 Q R X t	t
. |d d df |d d df  d	d
}W 5 Q R X t|tst|jd kstt|j|j t	t
 ||t }W 5 Q R X t|tst|jdkst|jd kst|jdk s0td S )Nz
1994-02-13Z2Wrz   r@   )rz   r8   c                 S   s   g | ]}t j|gqS r/   )rd   r  r%  r^  r/   r/   r0   r   n	  s     z7test_dt64arr_addsub_object_dtype_2d.<locals>.<listcomp>r   r3   r8   )r   rE   Zreshaper    r!   rb   shaper   r"   r   r	   r   r   rA   rM   rc   r^   r   r   r   )r)   rF   r*   r-   r.   r   r/   r/   r0   #test_dt64arr_addsub_object_dtype_2dh	  s"    2r  )6r   r   r   	itertoolsr   r   r   r  Znumpyr    rN   r  Zpandas._libs.tslibs.conversionr   Zpandas._libs.tslibs.offsetsr   Zpandas.errorsr	   Zpandasrd   r
   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr"   Zpandas.core.arraysr   r   Zpandas.core.opsr   Zpandas.tests.arithmetic.commonr   r   r   r   r   rf   r   r   r  rj  r|  r  r\   r]   r  r  r/   r/   r/   r0   <module>   sR   ,p Z      *   #z     ~