U
    sVcf                     @  s  d Z ddlmZ ddlmZmZ ddlmZmZmZ ddl	Z	ddl
ZddlZddlmZmZmZmZ ddlm  m  mZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZm Z  ddl!m"Z# ddl$m%Z%m&Z& ddl'm(  mZ ddl'm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: eee*eeef f  Z;dddddddddg	Z<G dd de%Z=G dd de%Z>G dd dZ?dd Z@dd ZAG d d! d!ZBd"d# ZCG d$d% d%ZDd&d' ZEd(d) ZFejGHd*eIejJd+d, ZKd-d. ZLejGHd*eIejJd/d0 ZMejGHd*eIejJd1d2 ZNd3d4 ZOd5d6 ZPd7d8 ZQejGHd9d:d;id<fd:d=id>fd:d?id@fdd;idAfdd?idBfdd;idCfdd?idDfdd;idEfdd?idFfdd;idGfdd?idHfdd;idIfdd?idJfdd;idKfdd?idLfdd;idMfdd?idNfdd;idOfdd?idPfgdQdR ZRdSdT ZSejGHdUdddddgdVdW ZTdXdY ZUejGHdZd?d;d[gd\d] ZVejGHd^e2d_d`daedbfe2d[dceddfgdedf ZWdS )gz!
Tests of pandas.tseries.offsets
    )annotations)datetime	timedelta)DictListTupleN)NaT	Timestamp
conversion	timezones)_get_offset_offset_map)INVALID_FREQ_ERR_MSG)PerformanceWarning)DatetimeIndexSeries
date_range)BaseWeekDay)FY5253
BaseOffsetBDay	BMonthEndBusinessHourCustomBusinessDayCustomBusinessHourCustomBusinessMonthBeginCustomBusinessMonthEnd
DateOffsetEasterFY5253QuarterLastWeekOfMonth
MonthBeginNanoTickWeekWeekOfMonthZyearsmonthsweeksdayshoursminutessecondsmillisecondsmicrosecondsc                #   @  s  e Zd Zededededededededededededededededed	ed	ed
ed
ededededededededededededededd"Zdd Zdd Zdd Zdd Zdd  Z	d!d" Z
dCd$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ejd<d=d>d?gd@dA ZdBS )D
TestCommonz2011-01-02 09:00:002011-01-03 09:00:00z2011-01-31 09:00:00z2011-02-01 09:00:00z2011-01-15 09:00:00z2012-01-01 09:00:00z2011-12-31 09:00:00z2011-12-30 09:00:00z2011-03-01 09:00:00z2011-03-31 09:00:00z2011-01-03 10:00:00z2011-01-08 09:00:00z2011-01-29 09:00:00z2011-01-25 09:00:00z2011-04-24 09:00:00z2011-01-01 10:00:00z2011-01-01 09:01:00z2011-01-01 09:00:01z2011-01-01 09:00:00.001000z2011-01-01 09:00:00.000001z2011-01-01T09:00:00.000000001)"Dayr   BusinessDayr   r   r   r"   BusinessMonthBeginMonthEndSemiMonthEndSemiMonthBeginBusinessMonthEnd	YearBegin
BYearBeginYearEndBYearEndQuarterBeginBQuarterBegin
QuarterEndBQuarterEndr   r   r&   r!   r    r   r%   r   HourMinuteSecondMilliMicror#   c              	   C  sR   |  |}d}tjt|d d|_W 5 Q R X tjt|d d|_W 5 Q R X d S )Nz8objects is not writable|DateOffset objects are immutablematchT[   )r   pytestraisesAttributeError	normalizen)selfoffset_typesoffsetmsg rQ   M/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/tseries/offsets/test_offsets.pytest_immutable{   s    
zTestCommon.test_immutablec                 C  sl   |  |}td| }t|ts$tt| tks4t|t tksDtt| tksTt| ttkshtd S )NZ20080101)r   r	   
isinstanceAssertionErrorr   _apply)rM   rN   rO   resultrQ   rQ   rR   test_return_type   s    
zTestCommon.test_return_typec                 C  sH   |  |}|jdkst|d }|jdks.t|d }|jdksDtd S )N      )r   rL   rU   )rM   rN   rO   Z
neg_offsetZ
mul_offsetrQ   rQ   rR   test_offset_n   s    
zTestCommon.test_offset_nc              	   C  sL   |  |}tdd}tjtdd t|f d|i|j W 5 Q R X d S )Ni  sargument must be an integerrE   rL   )r   npZtimedelta64rH   rI   	TypeErrortypekwds)rM   rN   offZtd64rQ   rQ   rR   test_offset_timedelta64_arg   s    
z&TestCommon.test_offset_timedelta64_argc                 C  s|   |  |}t||d g|d |d gg}tddgddgg| }t|| |tddgddgg }t|| d S )N   r[      rY   )r   r_   arraytmassert_numpy_array_equal)rM   rN   rc   expectedrW   rQ   rQ   rR   test_offset_mul_ndarray   s    
"z"TestCommon.test_offset_mul_ndarrayc                 C  s2   |  |}|j}|dkr.t |}|j|ks.td S )N)z<Easter>z<DateOffset: days=1>zLWOM-SAT)r   freqstr	rule_coderU   )rM   rN   rO   rl   coderQ   rQ   rR   test_offset_freqstr   s
    
zTestCommon.test_offset_freqstrFc              
   C  s  |rt |trd S | j||d}t||}||}t|ts@t||ksLt|t|}t|tsft||ksrtd }	t|td }
t|j	dkr|dks|r|
j
dkrt}	t|	 ||
}W 5 Q R X |	d kr(|dkr(tjtdd ||
}W 5 Q R X t|t|kst||ks(tt|ts8t|d	krZ||td kshtn||kshtt|tjrzd S | jD ] }||}t|}t||}||}t|tst||kst|t||d
}t|tst||kstd }	t||d
td }
t|j	dkrB|dks2|rB|
j
dkrBt}	t|	 ||
}W 5 Q R X t|tspt|d	kr||td kstn||kstqd S )NrK      r   )applyrV   r   rV   zapply is deprecatedrE   Ftz)
issubclassr$   r   getattrrT   r	   rU   r#   ra   __name__Z
nanosecondUserWarningrh   assert_produces_warningFutureWarningrr   r_   
datetime64r   tz_localizeZmaybe_get_tzr
   Zlocalize_pydatetime)rM   rO   funcnamedtrj   rK   offset_sfuncrW   Zexp_warningtsZres2rt   expected_localizeZtz_objZdt_tzrQ   rQ   rR   _check_offsetfunc_works   sz    




z"TestCommon._check_offsetfunc_worksc                 C  sh   t ddddd}td}| j|j }t| }||fD ](}| |d|| | j|d||dd q:d S )	N  rY   	   r   2011-01-01 09:00rV   Trp   )r   r_   r{   	expectedsrw   r	   dater   )rM   rN   sdtndtrj   Zexpected_normr~   rQ   rQ   rR   
test_apply  s    
    zTestCommon.test_applyc                 C  s0  | j  }ddddddddd	d
ddg}|D ]}td||< q*td|d< td|d< | }|D ]}t||  ||< q`tdtdtdtdtdtdtdtdtdtdtdd}|| tddddd}td}	||	fD ]<}
||j }| 	|d|
| ||j }| j	|d|
|dd qd S ) Nr1   r"   r6   r8   r%   r@   rA   rB   rC   rD   r#   r   2011/01/01 09:00r0   r   r   z2011-01-02 00:00:00z2011-02-01 00:00:00z2011-01-15 00:00:00z2012-01-01 00:00:00z2011-01-08 00:00:002011-01-01 00:00:00r1   r   r"   r6   r8   r%   r@   rA   rB   rC   rD   r   rY   r   r   r   ZrollforwardTrp   )
r   copyr	   r   updater   r_   r{   rw   r   )rM   rN   r   Z
no_changesrL   norm_expectedk
normalizedr   r   r~   rj   rQ   rQ   rR   test_rollforward  s^    




    zTestCommon.test_rollforwardc                 C  s~  t dt dt dt dt dt dt dt dt dt dt dt dt dt dt dt dt dt dt dt dt dt d	d
}dD ]}t d||< q| }|D ]}t ||  ||< qt dt dt dt dt dt dt dt dt dt dt dd}|| tddddd}td}||fD ]>}	||j }
| |d|	|
 ||j }
| j|d|	|
dd q:d S )Nz2010-12-31 09:00:00z2010-12-01 09:00:00z2010-01-01 09:00:00z2010-12-31 17:00:00z2010-12-11 09:00:00z2010-12-25 09:00:00z2010-10-26 09:00:00z2010-01-26 09:00:00z2010-04-04 09:00:00)r2   r   r   r   r3   r4   r5   r7   r9   r:   r;   r<   r=   r>   r?   r   r   r&   r!   r    r   r   )r1   r"   r6   r8   r%   r@   rA   rB   rC   rD   r#   r   r   z2010-12-31 00:00:00z2010-12-01 00:00:00z2010-12-15 00:00:00z2010-01-01 00:00:00z2010-12-25 00:00:00r   r   r   rY   r   r   r   rollbackTrp   )	r	   r   r   r   r   r_   r{   rw   r   )rM   rN   r   rL   r   r   r   r   r   r~   rj   rQ   rQ   rR   test_rollbackR  sl    



    zTestCommon.test_rollbackc                 C  s   | j |j }| |}||s$tt|tr2d S | j|dd}||rNt|ttfkr^d S t	|j
|j|j}||s~td S )NTrp   )r   rw   r   is_on_offsetrU   ru   r$   r   r   r   yearmonthday)rM   rN   r~   r   Zoffset_nr   rQ   rQ   rR   test_is_on_offset  s    

zTestCommon.test_is_on_offsetc                 C  s:  |}t ddddd}| |}| j|j }|| }t|| }||fD ]}	t|	tsXt|	|ksFtqF||}
t||d| }	t|	tst|	|
kstt|t	rd S | j|dd}t|
 }|| }t|| }||fD ]}	t|	tst|	|kstq||}
t||d| }	t|	ts(t|	|
ks6td S )Nr   rY   r   r   rs   Trp   )r   r   r   rw   r	   rT   rU   r|   ru   r$   r   )rM   rN   tz_naive_fixturert   r~   r   rj   Z	result_dtZ	result_tsrW   r   rQ   rQ   rR   test_add  s4    



zTestCommon.test_addc                 C  s   |  |}tg |d}d }t|ttttttt	t
ttf
r<t}t| || }W 5 Q R X t|| t| || }W 5 Q R X t|| |j}t| || }W 5 Q R X t|| t| || }W 5 Q R X t|| d S )Nrs   )r   r   rT   r   r&   r!   r   r   r   r   r   r   r    r   rh   ry   Zassert_index_equal_dataZassert_equal)rM   rN   r   r   dtiwarnrW   dtarQ   rQ   rR   test_add_empty_datetimeindex  s>    
z'TestCommon.test_add_empty_datetimeindexc                 C  s^   |  |}t|}||ks tt|tk	rZ|jD ]&}|dkr@q2t||t||ks2tq2d S )Ncalendar)r   rh   round_trip_picklerU   ra   r   _attributesrv   )rM   rN   rc   resattrrQ   rQ   rR   test_pickle_roundtrip  s    


z TestCommon.test_pickle_roundtripc                 C  sD   t dd}t|}||ks ttddd}|| || ks@td S )N   r'   i  rY   )r   rh   r   rU   r   )rM   rc   r   Zbase_dtrQ   rQ   rR   !test_pickle_dateoffset_odd_inputs  s
    

z,TestCommon.test_pickle_dateoffset_odd_inputsc              	   C  sH   |  |}|}tt ||}W 5 Q R X ||}||ksDtd S N)r   rh   ry   rz   ZonOffsetr   rU   )rM   rN   Zfixed_now_tsrc   r   rW   rj   rQ   rQ   rR   test_onOffset_deprecated  s    

z#TestCommon.test_onOffset_deprecatedc              	   C  s@   |  |}tt | }W 5 Q R X | }||ks<td S r   )r   rh   ry   rz   Z
isAnchoredis_anchoredrU   )rM   rN   rc   rW   rj   rQ   rQ   rR   test_isAnchored_deprecated  s
    
z%TestCommon.test_isAnchored_deprecatedc                 C  s   |  |}t|d k	std S r   )r   hashrU   )rM   rN   rc   rQ   rQ   rR   test_offsets_hashable&  s    
z TestCommon.test_offsets_hashableunitr]   msusc              	   C  s   |  |}tdddd}|jjd| d}t|jj||jd}tj	dd	}|j| }	|| }
W 5 Q R X t
|rtjjd
d}|j| t|
j|	j|j d S )Nz
2016-01-01#   D)ZperiodsfreqzM8[]dtypeT)recordzVGoes through object dtype in DatetimeArray._add_offset, doesn't restore reso in result)reason)r   r   r   Z_ndarrayZastypera   Z_simple_newr   warningscatch_warningslenrH   markxfailnode
add_markerrh   ri   )rM   rN   r   requestrc   r   Zarrr   wrj   rW   r   rQ   rQ   rR   test_add_dt64_ndarray_non_nano+  s     

 z)TestCommon.test_add_dt64_ndarray_non_nanoN)F)rw   
__module____qualname__r	   r   rS   rX   r\   rd   rk   ro   r   r   r   r   r   r   r   r   r   r   r   r   rH   r   parametrizer   rQ   rQ   rQ   rR   r/   R   sn   %	
	
U7K#(	
r/   c                   @  s0  e Zd Zdd Zdd Zdd Zejde	e
jdd	 Zd
d Zdd Zdd Zejdeedddddddddg	dd Zejdeeddddd d!d"d#d$g	d%d& Zejd'eeed(d)dd*d+d,d-d.d/d0d1g	d2d3 Zejd'eeed(d)dd4d5d6d7d8d9d:d;g	d<d= Zd>d? Zd@dA ZdBS )CTestDateOffsetc                 C  s   t tddd| _t  d S )N  rY   re   )r	   r   dr   clearrM   rQ   rQ   rR   setup_methodI  s    zTestDateOffset.setup_methodc                 C  s:   t t  t td t dt   t dtdd  d S )Nre   r   )reprr   r   rQ   rQ   rR   	test_reprM  s    
zTestDateOffset.test_reprc                 C  s4   t ddt d kstt dt dd ks0td S Nre   rY   r   rU   r   rQ   rQ   rR   test_mulS  s    zTestDateOffset.test_mulkwdc                 C  sV   |dkr |j tjjtdd tf |di}|j|diks@tt	||dksRtd S )NmillisecondGConstructing DateOffset object with `millisecond` is not yet supported.rI   r   re   )
r   r   rH   r   r   NotImplementedErrorr   rb   rU   rv   )rM   r   r   rO   rQ   rQ   rR   test_constructorW  s    zTestDateOffset.test_constructorc                 C  s"   | j td tdddkstd S )Nre   r   rY   rf   )r   r   r   rU   r   rQ   rQ   rR   test_default_constructore  s    z'TestDateOffset.test_default_constructorc                 C  s$   t d rtt d s td S r   )r   r   rU   r   rQ   rQ   rR   test_is_anchoredh  s    zTestDateOffset.test_is_anchoredc                 C  s<   t dd t ddkstt dd t ddks8td S )Nre   r   rY   r-   )r   r   rU   r   rQ   rQ   rR   	test_copyl  s    zTestDateOffset.test_copyz arithmatic_offset_type, expectedz
2009-01-02z
2008-02-02z
2008-01-09z
2008-01-03z2008-01-02 01:00:00z2008-01-02 00:01:00z2008-01-02 00:00:01z2008-01-02 00:00:00.001000000z2008-01-02 00:00:00.000001000c                 C  sD   t f |di| j t|ks t| jt f |di t|ks@td S NrY   r   r   r	   rU   rM   arithmatic_offset_typerj   rQ   rQ   rR   r   p  s     zTestDateOffset.test_addz
2007-01-02z
2007-12-02z
2007-12-26z
2008-01-01z2008-01-01 23:00:00z2008-01-01 23:59:00z2008-01-01 23:59:59z2008-01-01 23:59:59.999000000z2008-01-01 23:59:59.999999000c              	   C  sR   | j tf |di t|ks ttjtdd tf |di| j   W 5 Q R X d S )NrY   z$Cannot subtract datetime from offsetrE   )r   r   r	   rU   rH   rI   r`   r   rQ   rQ   rR   test_sub  s     zTestDateOffset.test_subz#arithmatic_offset_type, n, expectedrY   
   z
2008-03-02z
2008-01-23z
2008-01-06z2008-01-02 05:00:00z2008-01-02 00:06:00z2008-01-02 00:00:07z2008-01-02 00:00:00.008000000z2008-01-02 00:00:00.000009000c                 C  s   t f |di| | j t|ks$t|t f |di | j t|ksHt| jt f |di|  t|kslt| j|t f |di  t|kstd S r   r   rM   r   rL   rj   rQ   rQ   rR   test_mul_add  s    


zTestDateOffset.test_mul_addz
2007-11-02z
2007-12-12z
2007-12-29z2008-01-01 19:00:00z2008-01-01 23:54:00z2008-01-01 23:59:53z2008-01-01 23:59:59.992000000z2008-01-01 23:59:59.999991000c                 C  sL   | j tf |di|  t|ks$t| j |tf |di  t|ksHtd S r   )r   r   r	   rU   r   rQ   rQ   rR   test_mul_sub  s    
zTestDateOffset.test_mul_subc                 C  s.   t ddd}|tdd t dddks*td S )Nr   rY      r   re      )r   r   rU   )rM   r   rQ   rQ   rR   test_leap_year  s    zTestDateOffset.test_leap_yearc                 C  s<   t dd}t dd}||ks tt ddt ddks8td S )NrY   r)   im  r[   r      r   )rM   Zoffset1Zoffset2rQ   rQ   rR   test_eq  s    

zTestDateOffset.test_eqN)rw   r   r   r   r   r   rH   r   r   sorted
liboffsets_relativedelta_kwdsr   r   r   r   zip_ARITHMETIC_DATE_OFFSETr   r   ranger   r   r   r   rQ   rQ   rQ   rR   r   H  s   




r   c                   @  s   e Zd Zdd ZdS )TestOffsetNamesc                 C  s   t  jdkstt djdks"tt jdks2ttddjdksFttddjd	ksZttddjd
ksnttddjdksttddjdkstttjdjdkstd S )NBre   Z2BBMr   weekdayW-MONrY   W-TUEW-WEDr[   W-THUrf   W-FRIzLWOM-SUN)r   rl   rU   r   r%   r!   r   SUNr   rQ   rQ   rR   test_get_offset_name  s    z$TestOffsetNames.test_get_offset_nameN)rw   r   r   r   rQ   rQ   rQ   rR   r     s   r   c                  C  s   t jttd td W 5 Q R X t jttd td W 5 Q R X dt fdt fdt fdt fdtd	d
fdtdd
fdtdd
fdtdd
fdtdd
fg	} | D ]@\}}t|}||kstdt	| dt	| dt	| dqd S )NrE   Z	gibberishzQS-JAN-Br   bZbmZBmr   r   r   r   rY   r   re   r   r[   r   rf   z	Expected z
 to yield z
 (actual: ))
rH   rI   
ValueErrorr   r   r   r   r%   rU   r   )pairsnamerj   rO   rQ   rQ   rR   test_get_offset  s&    
"r  c               
   C  sD   dt ddfg} | D ]*\}}tjttd t| W 5 Q R X qd S )Nzw@Satrq   r   rE   )r%   rH   rI   r  r   r   )r  r  rj   rQ   rQ   rR   test_get_offset_legacy
  s    r  c                   @  s$   e Zd Zdd Zdd Zdd ZdS )TestOffsetAliasesc                 C  s   t   d S r   )r   r   r   rQ   rQ   rR   r     s    zTestOffsetAliases.setup_methodc                 C  s0   t  D ]"\}}|d krq|| kstqd S r   )r   itemsr   rU   )rM   r   vrQ   rQ   rR   test_alias_equality  s    z%TestOffsetAliases.test_alias_equalityc                 C  s.  ddddddddd	d
dg}|D ]8}|t |jks4t|tks@t|t |d jkstqdddddddg}d}|D ]:}d||g}|t |jkst|t |d jksrtqrdddddddddd d!d"g}d#d$d%d&d'd(d)d*g}|D ]F}|D ]<}d||g}|t |jkst|t |d jkstqqd S )+NMZMSr   ZBMSr   r   HTSLUr[   MONTUEWEDTHUFRISATr   W-rq   JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECAASBABASQQSBQBQS)r   rm   rU   r   join)rM   lstr   Z
suffix_lstbaser	  aliasZbase_lstrQ   rQ   rR   test_rule_code  s<    z TestOffsetAliases.test_rule_codeN)rw   r   r   r   r
  r1  rQ   rQ   rQ   rR   r    s   r  c                  C  sD   t dtddd} | jdks tt dtddd} | jdks@td S )NrY   r   i  )rO   zB+30MinizB-30Min)r   r   rl   rU   )rc   rQ   rQ   rR   test_freq_offsets@  s    r2  c                   @  s   e Zd Zdd ZdS )TestReprNamesc                   s   ddddddddg}d	d
 |D }dddddddg |dd
  D 7 }| fdd
dD 7 }t   |D ]}t|}|j|kshtqhd S )Nr%  r&  r'  r(  r)  r+  r,  r*  c                 S  s"   g | ]}d D ]}|d | qqS ))r  r  r  r  r  r  r  r   r!  r"  r#  r$  r  rQ   ).0prefixr   rQ   rQ   rR   
<listcomp>L  s    z<TestReprNames.test_str_for_named_is_name.<locals>.<listcomp>r  r  r  r  r  r  r   c                 S  s   g | ]}d | qS )zW-rQ   )r4  r   rQ   rQ   rR   r6  _  s     c                   s"   g | ]} D ]}d | | qqS )zWOM-rQ   )r4  weekr   r   rQ   rR   r6  `  s       )1234)r   r   r   rl   rU   )rM   Zmonth_prefixesnamesr  rO   rQ   r   rR   test_str_for_named_is_nameI  s    z(TestReprNames.test_str_for_named_is_nameN)rw   r   r   r=  rQ   rQ   rQ   rR   r3  H  s   r3  c                 C  s    |   }|jd d |j d S )N   i  g      @)	utcoffsetr)   r,   )r   orQ   rQ   rR   get_utc_offset_hoursg  s    rA  c                 C  s   | }|  d S r   rQ   rN   clsrQ   rQ   rR   test_valid_default_argumentsp  s    rD  r   c              	   C  s<   |}d|  d}t jt|d |f | di W 5 Q R X d S Nz1__init__\(\) got an unexpected keyword argument ''rE   r[   rH   rI   r`   )r   month_classesrC  rP   rQ   rQ   rR   test_valid_month_attributesw  s    rI  c                 C  s$   | d}| d}|j |j ks td S )NrY   re   )r  rU   )rH  objobj2rQ   rQ   rR   test_month_offset_name  s    rL  c                 C  s2   | dkr |j tjjtdd tf | di d S )Nr   r   r   rY   )r   r   rH   r   r   r   r   )r   r   rQ   rQ   rR   test_valid_relativedelta_kwargs  s    	rM  c              	   C  s<   |}d|  d}t jt|d |f | di W 5 Q R X d S rE  rG  )r   tick_classesrC  rP   rQ   rQ   rR   test_valid_tick_attributes  s    rO  c                	   C  s   t jtdd tdd W 5 Q R X t jtdd ttdd W 5 Q R X t jtdd  ttjddgtj	dd W 5 Q R X d S )Nr^   rE   zDoh!rL   rY   re   r   )
rH   rI   r`   r   r"   r   r   r_   rg   Zint64rQ   rQ   rQ   rR   test_validate_n_error  s    rQ  c              	   C  s,   | }t jtdd |dd W 5 Q R X d S )Nr^   rE   g      ?rP  rH   rI   r  rB  rQ   rQ   rR   test_require_integers  s    rS  c              	   C  s2   | }d}t jt|d |ddd W 5 Q R X d S )Nz2Tick offset with `normalize=True` are not allowed.rE   r[   T)rL   rK   rR  )rN  rC  rP   rQ   rQ   rR   test_tick_normalize_raises  s    rT  zoffset_kwargs, expected_argnanosecondsrY   z1970-01-01 00:00:00.000000001rq   z1970-01-01 00:00:00.000000005rZ   z1969-12-31 23:59:59.999999999z1970-01-01 00:00:00.000001z1969-12-31 23:59:59.999999z1970-01-01 00:00:01z1969-12-31 23:59:59z1970-01-01 00:01:00z1969-12-31 23:59:00z1970-01-01 01:00:00z1969-12-31 23:00:00z1970-01-02 00:00:00z1969-12-31 00:00:00z1970-01-08 00:00:00z1969-12-25 00:00:00z1970-02-01 00:00:00z1969-12-01 00:00:00z1971-01-01 00:00:00z1969-01-01 00:00:00c                 C  sZ   t f | }td}|| }t|}||ks.t||8 }||ksBt|| }||ksVtd S )Nr   r   r	   rU   )Zoffset_kwargsZexpected_argrO   r   rW   rj   rQ   rQ   rR   test_dateoffset_add_sub  s    
rW  c                  C  s\   t ddd} td}||  }td}||ks0t|| 8 }||ksDt| | }||ksXtd S )Nre   r   r+   rU  rf   z1970-01-01 00:02:00.000000013rV  )rO   r   rW   rj   rQ   rQ   rR   +test_dateoffset_add_sub_timestamp_with_nano  s    rY  	attributec              	   C  s<   t f | di}d}tjt|d t|| d W 5 Q R X d S )Nr   z DateOffset objects are immutablerE   rq   )r   rH   rI   rJ   setattr)rZ  rO   rP   rQ   rQ   rR   test_dateoffset_immutable  s    r\  c                  C  s,   t jddd} | j t jdddkr(td S )Nre   rf   )r'   r)   r   )offsetsr   rl   rU   )ZosetrQ   rQ   rR   test_dateoffset_misc  s    r^  rL   r[   c                 C  sJ   t | }|jtdksttddd| }tddd|  }||ksFtd S )NrY   i  re   )r   _offsetr   rU   r	   )rL   rO   rW   rj   rQ   rQ   rR   -test_construct_int_arg_no_kwargs_assumed_days  s
    r`  zoffset, expectedr      rX  z2022-01-01 00:07:00.000000018)rU  z2022-01-01 00:00:00.000000003c                 C  sb   t d}|}t|g}||  }|d |ks.t|| 8 }|d |ksFt| | }|d |ks^td S )Nz
2022-01-01r   )r	   r   rU   )rO   rj   
start_timeZ	teststampZ
testseriesrQ   rQ   rR   2test_dateoffset_add_sub_timestamp_series_with_nano  s    
rc  )X__doc__
__future__r   r   r   typingr   r   r   r   Znumpyr_   rH   Zpandas._libs.tslibsr   r	   r
   r   Zpandas._libs.tslibs.offsetsZ_libsZtslibsr]  r   r   r   Zpandas._libs.tslibs.periodr   Zpandas.errorsr   Zpandasr   r   r   Zpandas._testingZ_testingrh   Z#pandas.tests.tseries.offsets.commonr   r   Zpandas.tseries.offsetsZtseriesr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Z_ApplyCasesr   r/   r   r   r  r  r  r2  r3  rA  rD  r   r   r   r   rI  rL  rM  rO  rQ  rS  rT  rW  rY  r\  r^  r`  rc  rQ   rQ   rQ   rR   <module>   s   P   y /	
	

		






















	

