U
    *ifq                     @  sH  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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 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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 eee'eeef f  Z8G dd de"Z9G dd de"Z:G dd dZ;dd Z<dd Z=G dd dZ>dd Z?G dd dZ@dd ZAdd  ZBejCDd!eEejFd"d# ZGd$d% ZHejCDd!eEejFd&d' ZIejCDd!eEejFd(d) ZJd*d+ ZKd,d- ZLd.d/ ZMejCDd0d1d2id3fd1d4id5fd1d6id7fd8d2id9fd8d6id:fd;d2id<fd;d6id=fd>d2id?fd>d6id@fdAd2idBfdAd6idCfdDd2idEfdDd6idFfdGd2idHfdGd6idIfdJd2idKfdJd6idLfdMd2idNfdMd6idOfgdPdQ ZNdRdS ZOejCDdTdAdDdGdJdMgdUdV ZPdWdX ZQejCDdYd6d2dZgd[d\ ZRdS )]z!
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)BaseWeekDay)FY5253
BaseOffsetBDay	BMonthEndBusinessHourCustomBusinessDayCustomBusinessHourCustomBusinessMonthBeginCustomBusinessMonthEnd
DateOffsetEasterFY5253QuarterLastWeekOfMonth
MonthBeginNanoTickWeekWeekOfMonthc                #   @  sp  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
d=d$d%Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<S )>
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 rG   \/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/tseries/offsets/test_offsets.pytest_immutablej   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)rC   rD   rE   resultrG   rG   rH   test_return_types   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   rB   rK   )rC   rD   rE   Z
neg_offsetZ
mul_offsetrG   rG   rH   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 integerr;   rB   )r   npZtimedelta64r>   r?   	TypeErrortypekwds)rC   rD   offZtd64rG   rG   rH   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   rQ      rO   )r   rU   arraytmZassert_numpy_array_equal)rC   rD   rY   expectedrM   rG   rG   rH   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_coderK   )rC   rD   rE   ra   coderG   rG   rH   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rA      r   )applyrL   r   rL   zapply is deprecatedr;   Ftz)
issubclassr"   r   getattrrJ   r	   rK   r!   rW   __name__Z
nanosecondUserWarningr^   assert_produces_warningFutureWarningrg   rU   
datetime64r   tz_localizeZmaybe_get_tzr
   Zlocalize_pydatetime)rC   rE   funcnamedtr_   rA   offset_sfuncrM   Zexp_warningtsZres2ri   expected_localizeZtz_objZdt_tzrG   rG   rH   _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  rO   	   r   2011-01-01 09:00rL   Tre   )r   rU   rp   	expectedsrl   r	   daterx   )rC   rD   sdtndtr_   Zexpected_normrs   rG   rG   rH   
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 ) Nr'   r    r,   r.   r#   r6   r7   r8   r9   r:   r!   r   2011/01/01 09:00r&   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r'   r   r    r,   r.   r#   r6   r7   r8   r9   r:   ry   rO   rz   r   r{   ZrollforwardTre   )
r|   copyr	   r}   updater   rU   rp   rl   rx   )rC   rD   r|   Z
no_changesrB   norm_expectedk
normalizedr~   r   rs   r_   rG   rG   rH   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)r(   r   r   r   r)   r*   r+   r-   r/   r0   r1   r2   r3   r4   r5   r   r   r$   r   r   r   r   )r'   r    r,   r.   r#   r6   r7   r8   r9   r:   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   ry   rO   rz   r   r{   rollbackTre   )	r	   r   r}   r   r   rU   rp   rl   rx   )rC   rD   r|   rB   r   r   r   r~   r   rs   r_   rG   rG   rH   test_rollbackA  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 )NTre   )r|   rl   r   is_on_offsetrK   rj   r"   r   r   r   yearmonthday)rC   rD   rs   rt   Zoffset_nr}   rG   rG   rH   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 )Nry   rO   rz   r   rh   Tre   )r   r   r|   rl   r	   rJ   rK   rq   rj   r"   r}   )rC   rD   tz_naive_fixtureri   rs   rt   r_   Z	result_dtZ	result_tsrM   rw   rG   rG   rH   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 )Nrh   )r   r   rJ   r   r$   r   r   r   r   r   r   r   r   r   r^   rn   Zassert_index_equal_dataZassert_equal)rC   rD   r   rt   ZdtiwarnrM   ZdtarG   rG   rH   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   r^   round_trip_picklerK   rW   r   _attributesrk   )rC   rD   rY   resattrrG   rG   rH   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   monthsi  rO   )r   r^   r   rK   r   )rC   rY   r   Zbase_dtrG   rG   rH   !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   r^   rn   ro   ZonOffsetr   rK   )rC   rD   Zfixed_now_tsrY   rv   rM   r_   rG   rG   rH   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   r^   rn   ro   Z
isAnchoredis_anchoredrK   )rC   rD   rY   rM   r_   rG   rG   rH   test_isAnchored_deprecated  s
    
z%TestCommon.test_isAnchored_deprecatedc                 C  s   |  |}t|d k	std S r   )r   hashrK   )rC   rD   rY   rG   rG   rH   test_offsets_hashable  s    
z TestCommon.test_offsets_hashableN)F)rl   
__module____qualname__r	   r|   rI   rN   rR   rZ   r`   rd   rx   r   r   r   r   r   r   r   r   r   r   r   rG   rG   rG   rH   r%   A   sj   %	
	
U7K#(	
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dS )TestDateOffsetc                 C  s   t tddd| _t  d S )N  rO   r[   )r	   r   dr   clearrC   methodrG   rG   rH   setup_method  s    zTestDateOffset.setup_methodc                 C  s:   t t  t td t dt   t dtdd  d S Nr[   r   )reprr   rC   rG   rG   rH   	test_repr   s    
zTestDateOffset.test_reprc                 C  s4   t ddt d kstt dt dd ks0td S )Nr[   rO   r   rK   r   rG   rG   rH   test_mul&  s    zTestDateOffset.test_mulc                 C  s   | j tdd tdddks t| j tdd tdddks@t| j td tdddks^ttd rnttd s~ttddd	}|tdd tddd
kstd S )Nr[   r   r   rQ   i     rO   r\         )r   r   r   rK   r   )rC   r   rG   rG   rH   test_constructor*  s      zTestDateOffset.test_constructorc                 C  s    t dd t ddkstd S r   )r   r   rK   r   rG   rG   rH   	test_copy7  s    zTestDateOffset.test_copyc                 C  s$   t dd}t dd}||ks td S )NrO   daysim  r   )rC   Zoffset1Zoffset2rG   rG   rH   test_eq:  s    

zTestDateOffset.test_eqN)	rl   r   r   r   r   r   r   r   r   rG   rG   rG   rH   r     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Br[   Z2BBMr   weekdayW-MONrO   W-TUEW-WEDrQ   W-THUr\   W-FRIzLWOM-SUN)r   ra   rK   r   r#   r   r   SUNr   rG   rG   rH   test_get_offset_nameB  s    z$TestOffsetNames.test_get_offset_nameN)rl   r   r   r   rG   rG   rG   rH   r   A  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 )Nr;   Z	gibberishzQS-JAN-Br   bZbmZBmr   r   r   r   rO   r   r[   r   rQ   r   r\   z	Expected z
 to yield z
 (actual: ))
r>   r?   
ValueErrorr   r   r   r   r#   rK   r   )pairsnamer_   rE   rG   rG   rH   test_get_offsetO  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@Satrf   r   r;   )r#   r>   r?   r   r   r   )r   r   r_   rG   rG   rH   test_get_offset_legacyi  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   rG   rG   rH   r   q  s    zTestOffsetAliases.setup_methodc                 C  s0   t  D ]"\}}|d krq|| kstqd S r   )r   itemsr   rK   )rC   r   vrG   rG   rH   test_alias_equalityt  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BMSDr   HTSLUrQ   MONTUEWEDTHUFRISATr   W-rf   JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECAASBABASQQSBQBQS)r   rb   rK   r   join)rC   lstr   Z
suffix_lstbaser   aliasZbase_lstrG   rG   rH   test_rule_codez  s<    z TestOffsetAliases.test_rule_codeN)rl   r   r   r   r   r   rG   rG   rG   rH   r   p  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 )NrO   r   i  )rE   zB+30MinizB-30Min)r   r   ra   rK   )rY   rG   rG   rH   test_freq_offsets  s    r   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   rG   ).0prefixr   rG   rG   rH   
<listcomp>  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-rG   )r   r   rG   rG   rH   r     s     c                   s"   g | ]} D ]}d | | qqS )zWOM-rG   )r   weekr   r   rG   rH   r     s       )1234)r   r   r   ra   rK   )rC   Zmonth_prefixesnamesr   rE   rG   r   rH   test_str_for_named_is_name  s    z(TestReprNames.test_str_for_named_is_nameN)rl   r   r   r  rG   rG   rG   rH   r     s   r   c                 C  s    |   }|jd d |j d S )N   i  g      @)	utcoffsetr   seconds)rv   orG   rG   rH   get_utc_offset_hours  s    r  c                 C  s   | }|  d S r   rG   rD   clsrG   rG   rH   test_valid_default_arguments  s    r  kwdc              	   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 ''r;   rQ   r>   r?   rV   )r  month_classesr  rF   rG   rG   rH   test_valid_month_attributes  s    r  c                 C  s$   | d}| d}|j |j ks td S )NrO   r[   )r   rK   )r  objobj2rG   rG   rH   test_month_offset_name  s    r  c                 C  s   t f | di d S )NrO   )r   )r  rG   rG   rH   test_valid_relativedelta_kwargs  s    r  c              	   C  s<   |}d|  d}t jt|d |f | di W 5 Q R X d S r  r  )r  tick_classesr  rF   rG   rG   rH   test_valid_tick_attributes  s    r  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 )NrT   r;   zDoh!rB   rO   r[   )Zdtype)
r>   r?   rV   r   r    r   r   rU   r]   Zint64rG   rG   rG   rH   test_validate_n_error  s    r  c              	   C  s,   | }t jtdd |dd W 5 Q R X d S )NrT   r;   g      ?r  r>   r?   r   r  rG   rG   rH   test_require_integers  s    r  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.r;   rQ   T)rB   rA   r  )r  r  rF   rG   rG   rH   test_tick_normalize_raises	  s    r   zoffset_kwargs, expected_argnanosecondsrO   z1970-01-01 00:00:00.000000001rf   z1970-01-01 00:00:00.000000005rP   z1969-12-31 23:59:59.999999999microsecondsz1970-01-01 00:00:00.000001z1969-12-31 23:59:59.999999r
  z1970-01-01 00:00:01z1969-12-31 23:59:59minutesz1970-01-01 00:01:00z1969-12-31 23:59:00hoursz1970-01-01 01:00:00z1969-12-31 23:00:00r   z1970-01-02 00:00:00z1969-12-31 00:00:00weeksz1970-01-08 00:00:00z1969-12-25 00:00:00r   z1970-02-01 00:00:00z1969-12-01 00:00:00Zyearsz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	   rK   )Zoffset_kwargsZexpected_argrE   rv   rM   r_   rG   rG   rH   test_dateoffset_add_sub  s    
r'  c                  C  s\   t ddd} td}||  }td}||ks0t|| 8 }||ksDt| | }||ksXtd S )Nr[   rz   )r#  r!  r\   z1970-01-01 00:02:00.000000013r&  )rE   rv   rM   r_   rG   rG   rH   +test_dataoffset_add_sub_timestamp_with_nano6  s    r(  	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 immutabler;   rf   )r   r>   r?   r@   setattr)r)  rE   rF   rG   rG   rH   test_dateoffset_immutableB  s    r+  c                  C  s,   t jddd} | j t jdddkr(td S )Nr[   r\   )r   r   r   )offsetsr   ra   rK   )ZosetrG   rG   rH   test_dateoffset_miscS  s    r-  rB   rQ   c                 C  sJ   t | }|jtdksttddd| }tddd|  }||ksFtd S )NrO   i  r[   )r   _offsetr   rK   r	   )rB   rE   rM   r_   rG   rG   rH   -test_construct_int_arg_no_kwargs_assumed_days[  s
    r/  )S__doc__
__future__r   r   r   typingr   r   r   numpyrU   r>   Zpandas._libs.tslibsr   r	   r
   r   Zpandas._libs.tslibs.offsetsZ_libsZtslibsr,  Z
liboffsetsr   r   Zpandas._libs.tslibs.periodr   Zpandas.errorsr   Zpandasr   Zpandas._testingZ_testingr^   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   r   r  r  markZparametrizesortedZ_relativedelta_kwdsr  r  r  r  r  r  r   r'  r(  r+  r-  r/  rG   rG   rG   rH   <module>   s   P   ]&/	
	

		





















