U
    NZf                     @   sR  d 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 ddl	m
Z
 ddlmZmZmZmZmZ ddlmZ ddlm  mZ ddlZddlmZmZmZmZmZmZ ddlm Z! dd	l"m#Z$ ed
ddeddd Z%Z&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Z-dd Z.G dd dZ/dS )zP
test date_range, bdate_range construction from the convenience range functions
    )datetimetime	timedeltaN)timezone)	timezones)BDayCDay
DateOffsetMonthEndprefix_mapping)OutOfBoundsDatetime)DatetimeIndex	Timedelta	Timestampbdate_range
date_rangeoffsets)_generate_range       c                 C   s   | |d k}||d k}|dkr2|r2|dd }n|dkrL|rL|dd }nt|dkrj|rj|rj|dd }nV|dkr|r|dd }n<|dkr|r|dd }n"|dkr|dd }n|dd }|S )	z8Helper to get expected range from a both inclusive ranger   leftNrightr   neitherboth )Zbegin_to_matchZend_to_match
both_rangeZinclusive_endpointsZ
left_matchZright_matchexpected_ranger   r   R/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/indexes/datetimes/test_date_range.py_get_expected_range*   s     r    c                   @   sB   e Zd Zdd Zdd Zdd Zejdd Zd	d
 Z	dd Z
dS )TestTimestampEquivDateRangec                 C   s2   t dddd}|d }tddd}||ks.td S N2009041520090519
US/Easterntzr   r   r   AssertionErrorselfrngstamptsr   r   r   test_date_range_timestamp_equivL   s    z;TestTimestampEquivDateRange.test_date_range_timestamp_equivc                 C   s2   t dddd}|d }tddd}||ks.td S )Nr#   r$   dateutil/US/Easternr&   r   r(   r*   r   r   r   (test_date_range_timestamp_equiv_dateutilS   s    zDTestTimestampEquivDateRange.test_date_range_timestamp_equiv_dateutilc                 C   s>   t ddtdd}|d }tdtdd}||ks:td S r"   )r   pytzr   r   r)   r*   r   r   r   -test_date_range_timestamp_equiv_explicit_pytzZ   s    zITestTimestampEquivDateRange.test_date_range_timestamp_equiv_explicit_pytzc                 C   sF   ddl m} tdd|dd}|d }td|dd}||ksBtd S )Nr   )dateutil_gettzr#   r$   r%   r&   )pandas._libs.tslibs.timezonesr4   r   r   r)   )r+   Zgettzr,   r-   r.   r   r   r   1test_date_range_timestamp_equiv_explicit_dateutila   s
    zMTestTimestampEquivDateRange.test_date_range_timestamp_equiv_explicit_dateutilc                 C   s6   t ddd}t|dddd }t|}||ks2td S )N        r   Dperiodsfreqr   )r   r   r   r)   )r+   Zdatetime_instancetimestamp_instancer.   r   r   r   6test_date_range_timestamp_equiv_from_datetime_instancek   s    zRTestTimestampEquivDateRange.test_date_range_timestamp_equiv_from_datetime_instancec                 C   s*   t ddddd }td}||ks&td S )Nz
2014-03-05r   r:   r;   r   r(   )r+   r>   r.   r   r   r   2test_date_range_timestamp_equiv_preserve_frequencyt   s    zNTestTimestampEquivDateRange.test_date_range_timestamp_equiv_preserve_frequencyN)__name__
__module____qualname__r/   r1   r3   tdZskip_if_windowsr6   r?   r@   r   r   r   r   r!   F   s   
		r!   c                   @   s  e Zd Zejddddddddgd	d
 Zdd Zdd Zdd Z	dd Z
dd Zejjdd Zdd Zdd Zejdddgdd Zejddd gd!d" Zejdd#d$gd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zejd3d4d5d6ged7d8d8ed7d8d9d6ged4ed5d6ged4d6d:ed5d6d:d6ged4d6d:ed5d6d:d;ggd<d= Zd>d? Zd@dA ZdBdC ZdDdE ZdFdG Z ejdHdIdJdK Z!dLdM Z"dNdO Z#dPdQ Z$dRdS Z%dTdU Z&ejdVeedWd9dXd6d:eedWd9dYd6d:geedZd[d8d6d:eedZd[dXd6d:ggd\d] Z'd^d_ Z(ejdd`dadbdcdddgdedf Z)ejdd`dadbdcdddgdgdh Z*ejdd`dadbdcdddgdidj Z+dkdl Z,dmdn Z-dodp Z.dqdr Z/dsdt Z0dudv Z1dwdx Z2dydz Z3d;S ){TestDateRangesr=   NULTSHr:   c                    s   t d|  tdt  d   |d}t fddtddD |d	}t|| td     |d}tg |d	}t|| t    |d}t  g|d	}t|| d S )
N1z
1970-01-01r9   startendr=   c                    s   g | ]}|   qS r   r   ).0nrD   r.   r   r   
<listcomp>   s     z8TestDateRanges.test_date_range_edges.<locals>.<listcomp>r      r=   )r   r   r   r   rangetmassert_index_equal)r+   r=   idxexpr   rR   r   test_date_range_edges|   s4    

z$TestDateRanges.test_date_range_edgesc              	   C   s6   t d}tjtdd ttjd|d W 5 Q R X d S )Nr   Cannot generate range withmatch   rO   r<   r=   )r   pytestraisesr   r   r   min)r+   r=   r   r   r   )test_date_range_near_implementation_bound   s    z8TestDateRanges.test_date_range_near_implementation_boundc              	   C   s\   d}t jt|d tdtjdd W 5 Q R X t jt|d ttjddd W 5 Q R X d S )Nz$Neither `start` nor `end` can be NaTr]   
2016-01-01r:   rM   )ra   rb   
ValueErrorr   pdZNaTr+   msgr   r   r   test_date_range_nat   s
    z"TestDateRanges.test_date_range_natc              	   C   sx   t d  tdddd}W 5 Q R X |d tdks8tt|dksHtd}tjt|d tdd	d
d W 5 Q R X d S )N
1677-09-22iA r:   rN   r<   r=   r   r\   r]   z
1969-05-04i Z30000Dr;   )	rW   Zassert_produces_warningr   r   r)   lenra   rb   r   )r+   dtiri   r   r   r   'test_date_range_multiplication_overflow   s    z6TestDateRanges.test_date_range_multiplication_overflowc                 C   sZ   t dddd}t |d t|dd}||s2tt |d t|dd}||sVtd S )	Nrk   z
2262-04-11r:   rM   r   rl   r   r`   )r   rm   equalsr)   )r+   rn   dti2Zdti3r   r   r   *test_date_range_unsigned_overflow_handling   s
    z9TestDateRanges.test_date_range_unsigned_overflow_handlingc              	   C   sX   d}t jt|d tdddd W 5 Q R X t jt|d tdddd W 5 Q R X d S )	Nr\   r]   
1970-02-01i ' rK   rl   
1969-11-14r`   ra   rb   r   r   rh   r   r   r   .test_date_range_int64_overflow_non_recoverable   s
    z=TestDateRanges.test_date_range_int64_overflow_non_recoverablec           	      C   s   t d}t d}t||dd}|d |ks.t|d |ks>tt|t|dd}t|| t d}t d	}t||dd}|d |kst|d |kstt|t|dd
}t|| d S )Nz
2262-02-23rt   z-1HrM   r   r   r`   rs   z
1677-10-22rl   )r   r   r)   rm   rW   rX   )	r+   rN   rO   expectedrn   Zstart2Zend2	expected2rq   r   r   r   >test_date_range_int64_overflow_stride_endpoint_different_signs   s    zMTestDateRanges.test_date_range_int64_overflow_stride_endpoint_different_signsc              	   C   sX   d}t jt|d tdddd W 5 Q R X t jt|d tdddd W 5 Q R X d S )	NzCannot generate ranger]   re   i r:   r;   z
1763-10-12r`   ru   rh   r   r   r   test_date_range_out_of_bounds   s
    z,TestDateRanges.test_date_range_out_of_boundsc                 C   s"   t dddd}t|dkstd S )Nz1/1/2000 00:00z1/1/2000 00:18Z5minrU   r9   r   rm   r)   r+   r,   r   r   r   test_date_range_gen_error   s    z(TestDateRanges.test_date_range_gen_errorZASZYSc                 C   s4   t dd|d}tdddddg|d}t|| d S )	N1/1/20137/1/2017rU   
2013-01-01z
2014-01-01z
2015-01-01re   
2017-01-01r   r   rW   rX   r+   r=   r,   rZ   r   r   r   test_begin_year_alias   s    z$TestDateRanges.test_begin_year_aliasAYc                 C   s2   t dd|d}tddddg|d}t|| d S )Nr~   r   rU   
2013-12-31
2014-12-31
2015-12-31z
2016-12-31r   r   r   r   r   test_end_year_alias  s    
 z"TestDateRanges.test_end_year_aliasZBAZBYc                 C   s2   t dd|d}tddddg|d}t|| d S )Nr~   r   rU   r   r   r   z
2016-12-30r   r   r   r   r   test_business_end_year_alias  s    
 z+TestDateRanges.test_business_end_year_aliasc                 C   sx   t dddd}tdddgdd}t|| |jdks:tt dd	dd}tdd
dgd	d}t|| |jd	ksttd S )Nz
2011-12-31z-2Ar8   )r=   r<   z
2009-12-31z
2007-12-31rU   z
2011-01-31z-2Mz
2010-11-30z
2010-09-30)r   r   rW   rX   r=   r)   )r+   r,   rZ   r   r   r   test_date_range_negative_freq  s    z,TestDateRanges.test_date_range_negative_freqc                 C   s*   t dddd}td}|d |ks&td S )N1/1/2000
   ZBMSr;   z
2000-01-03r   r(   )r+   r,   Zex_firstr   r   r   test_date_range_bms_bug   s    z&TestDateRanges.test_date_range_bms_bugc                    s   t  d}t|ddd}td t fddt|D  d}t|| td	|dd
d}tdd}|D ]}| |ksnt	qnd S )N2   FZ2D)r<   	normalizer=   r_   c                    s   g | ]}|   qS r   r   rP   ioffsetZsnapr   r   rS   .  s     z<TestDateRanges.test_date_range_normalize.<locals>.<listcomp>rU   z1/1/2000 08:15B      )
r   todayr   r   r   rV   rW   rX   r   r)   )r+   rQ   r,   valuesZthe_timevalr   r   r   test_date_range_normalize'  s     
z(TestDateRanges.test_date_range_normalizec                 C   sF   t ddtjddddd}|d td	ks.t|d td
ksBtd S )Nr   r_   r   r8   Znearest)ZstartingMonthweekdayZ	variationrl   r   z
2013-01-31z
2014-01-30)r   r   ZFY5253r   r)   r+   drr   r   r   test_date_range_fy52527  s    z%TestDateRanges.test_date_range_fy5252c              	   C   sV   t dddddd}t dddddd}d}tjt|d	 t||d
dd W 5 Q R X d S )N  r   rT   r8   (   r   	   VOf the four parameters: start, end, periods, and freq, exactly three must be specifiedr]   r   sr;   )r   ra   rb   rf   r   r+   rN   rO   ri   r   r   r   #test_date_range_ambiguous_arguments@  s    z2TestDateRanges.test_date_range_ambiguous_argumentsc                 C   sr   t dddd}tdddgd d}t|| t d	d
ddd}ttdddtdddtdddg}t|| d S )Nz
2018-04-24z
2018-04-27r8   r<   z2018-04-24 00:00:00z2018-04-25 12:00:00z2018-04-27 00:00:00rU   z2018-04-01 01:00:00z2018-04-01 04:00:00zAustralia/Sydney)r'   r<   z2018-04-01 01:00:00+1100r&   z2018-04-01 02:00:00+1000z2018-04-01 04:00:00+1000)r   r   rW   rX   r   r+   resultrw   r   r   r   #test_date_range_convenience_periodsL  s&    


z2TestDateRanges.test_date_range_convenience_periodszstart,end,result_tz20180101Z20180103r%   i  r   r8   r&   Nc                 C   s0   t ||d|d}t ddddd}t|| d S )Nr8   r<   r'   r   r:   r%   r<   r=   r'   r   rW   rX   )r+   rN   rO   Z	result_tzr   rw   r   r   r   test_date_range_linspacing_tzf  s    z,TestDateRanges.test_date_range_linspacing_tzc                 C   s   t ddddddddgd	d
}tddd	d
}t|| t ddgd	d
}tddd	d
}t|| t ddddddddddddddddddddddddgd	d
}tddd	d
}t|| d S )Nz2014-07-04 09:00z2014-07-04 10:00z2014-07-04 11:00z2014-07-04 12:00z2014-07-04 13:00z2014-07-04 14:00z2014-07-04 15:00z2014-07-04 16:00ZBHrU   z2014-07-07 09:00z2014-07-07 10:00z2014-07-07 11:00z2014-07-07 12:00z2014-07-07 13:00z2014-07-07 14:00z2014-07-07 15:00z2014-07-07 16:00z2014-07-08 09:00z2014-07-08 10:00z2014-07-08 11:00z2014-07-08 12:00z2014-07-08 13:00z2014-07-08 14:00z2014-07-08 15:00z2014-07-08 16:00)r   r   rW   rX   )r+   rY   r,   r   r   r   test_date_range_businesshour~  s^    
z+TestDateRanges.test_date_range_businesshourc                 C   s:   d}d}t ||dd}t ||tddd}t|| d S )Nz
2020-01-01z
2020-01-113DrU   r8   )days)r   r   rW   rX   )r+   rN   rO   rng1rng2r   r   r   test_date_range_timedelta  s
    z(TestDateRanges.test_date_range_timedeltac              	   C   s  d}t jt|d tdd W 5 Q R X t jt|d tdd W 5 Q R X t jt|d tdd W 5 Q R X t jt|d tddd	 W 5 Q R X t jt|d tddd
 W 5 Q R X t jt|d tddd W 5 Q R X t jt|d t  W 5 Q R X d S )Nr   r]   r   )rN   )rO   r   r   rK   )rN   r=   )rO   r=   r;   ra   rb   rf   r   rh   r   r   r   test_range_misspecified  s     z&TestDateRanges.test_range_misspecifiedc                 C   s&   t tdddd}t|dks"td S )Nz1960-04-01 00:00:00L   zQS-JANr;   )r   r   rm   r)   )r+   r   r   r   r   test_compat_replace  s    z"TestDateRanges.test_compat_replacec              	   C   sL   t jdd}d}tjt|d$ ttdddtddd|d W 5 Q R X d S )	NrT   )minutez4Offset <DateOffset: minute=5> did not increment dater]   r         rU   )r   r	   ra   rb   rf   r   r   )r+   r   ri   r   r   r   test_catch_infinite_loop  s    z'TestDateRanges.test_catch_infinite_loopr<   )r   r_   c                 C   s"   t d|dd}t||kstd S )NZ20110101zWOM-1MONrl   r{   )r+   r<   resr   r   r   test_wom_len  s    zTestDateRanges.test_wom_lenc                 C   sb   t djddd}t djddd}t ddd||g}t|dd	}td
dddd}t|| d S )Nz2010-11-07 01:00:00z
US/PacificT)Z	ambiguousFz2010-11-07 00:00:00r&   rK   rU   z	2010-11-7r8   )rN   r<   r=   r'   )r   Ztz_localizer   r   rW   rX   )r+   Zpre_dstZpst_dstZexpect_datarw   r   r   r   r   test_construct_over_dst  s      
z&TestDateRanges.test_construct_over_dstc                 C   s<   t dddd}ttdtdtdgdd}t|| d S )Nz2013-01-01 00:00:00+09:00z2013/01/01 02:00:00+09:00rK   rU   z2013-01-01 01:00:00+09:00z2013-01-01 02:00:00+09:00)r   r   r   rW   rX   r   r   r   r   5test_construct_with_different_start_end_string_format  s      zDTestDateRanges.test_construct_with_different_start_end_string_formatc              	   C   s4   d}t jt|d tddtdd W 5 Q R X d S )Nz.Offset <0 \* MonthEnds> did not increment dater]   r   z1/1/2001r   rU   )ra   rb   rf   r   r
   rh   r   r   r   test_error_with_zero_monthends	  s    z-TestDateRanges.test_error_with_zero_monthendsc                    sT   t dd tdd d}tdddt fdd	td
D  d}t|| d S )Nr8   )months2011-1-1z	2012-1-31rU   r   r   c                    s   g | ]}|   qS r   r   r   r   rN   r   r   rS     s     z1TestDateRanges.test_range_bug.<locals>.<listcomp>rT   )r	   r   r   r   rV   rW   rX   r   r   r   r   test_range_bug  s
    
 zTestDateRanges.test_range_bugc                 C   s   t d}|tddd}|tddd}t|dd}|jj|jksJt|d |ksZt|d |ksjtt|dd}|jj|jkst|d |kst|d |kstt||d	}|jj|jkst|d |kst|d |kstd S )
Nr%   r   r   r8   rN   r<   r   r_   rO   r<   rN   rO   )r   Zlocalizer   r   r'   zoner)   r+   r'   rN   rO   r   r   r   r   test_range_tz_pytz  s    z!TestDateRanges.test_range_tz_pytzz
start, endr7      r   i  r   c                 C   s   t ||dd}|d |kst|d |ks.tt|jdksBtt ||ddd}|d |ksbt|d |ksrtt|jdkstt |jd d|jd dddd}|d |kst|d |kstt|jdkstd S )Nr:   rU   r   r   r%   r=   r'   tzinfo)r   r)   npallhourreplace)r+   rN   rO   r   r   r   r   test_range_tz_dst_straddle_pytz,  s"    

z.TestDateRanges.test_range_tz_dst_straddle_pytzc                    s   ddl m   fdd}tddd|dd}tddd	|dd}t|d	d
}|j|dks^t|d |ksnt|d |ks~tt|d	d}|j|dkst|d |kst|d |kstt||d}|j|dkst|d |kst|d |kstd S )Nr   maybe_get_tzc                    s    d|  S )Nz	dateutil/r   )xr   r   r   <lambda>T      z7TestDateRanges.test_range_tz_dateutil.<locals>.<lambda>r   r   r%   r   r8   r   r_   r   r   )r5   r   r   r   r'   r)   r   r   r   r   test_range_tz_dateutilN  s     z%TestDateRanges.test_range_tz_dateutilZ1Dr   Z2MZ7WZ3Hc                 C   sV   t ddd}t ddd}t||||d}t||d|d}t||||}t|| d S )Nr   r   r7   	inclusiver=   r   )r   r   r    rW   rX   r+   r=   inclusive_endpoints_fixturebeginrO   result_ranger   r   r   r   r   test_range_closedh  s           z TestDateRanges.test_range_closedc                 C   sV   t ddd}t ddd}t||||d}t||d|d}t||||}t|| d S )N2011/1/1r%   r&   2014/1/1r   r   r   r   r    rW   rX   r   r   r   r   )test_range_closed_with_tz_aware_start_endw  s        z8TestDateRanges.test_range_closed_with_tz_aware_start_endc           
      C   sj   t d}t d}t ddd}t ddd}t||||dd}t||d|dd}t||||}	t|	| d S )Nr   r   r%   r&   )r   r=   r'   r   r   )
r+   r=   r   r   rO   ZbegintzZendtzr   r   r   r   r   r   1test_range_with_tz_closed_with_tz_aware_start_end  s2        z@TestDateRanges.test_range_with_tz_closed_with_tz_aware_start_endc           
      C   s   t ddd|d}t ddd|d}t ddd|d}t ddd|d}|}|}|}|dkrb|dd  }n6|d	krx|d d
 }n |dkr|dd  }|d d
 }|dd
 }	t|| t|| t|| t||	 d S )Nz
2015-09-12z
2015-12-01zQS-MARr=   r   z
2015-09-01z
2015-09-11r   r   r   r   r   r   )
r+   r   Zright_boundaryZleft_boundaryZboth_boundaryZneither_boundaryZexpected_rightZexpected_leftZexpected_bothZexpected_neitherr   r   r   test_range_closed_boundary  sN    z)TestDateRanges.test_range_closed_boundaryc                 C   sB   t dddd}|d tdddks&t|d	 tdd
dks>td S )NZ2014Z2015MrU   r   r7   r      r   r   )r   r   r)   r   r   r   r   test_years_only  s    zTestDateRanges.test_years_onlyc                 C   s`   t dddd}t dddd}tddgd	d
d d}tddgd	d
d d}t|| t|| d S )Nz2005-01-12 10:00z2005-01-12 16:00Z345minrU   z2005-01-13 10:00z2005-01-13 16:00z2005-01-12 10:00:00z2005-01-12 15:45:00datetime64[ns]Z345Tdtyper=   r'   z2005-01-13 10:00:00z2005-01-13 15:45:00r   )r+   Zresult_1Zresult_2Z
expected_1Z
expected_2r   r   r   test_freq_divides_end_in_nanos  s     z-TestDateRanges.test_freq_divides_end_in_nanosc                 C   sB   t ddtddd}t|dks$t|d tddd	d
ks>td S )Nz2010-09-01 05:00:00r   r   )hoursr;   r   r   r   r   rT   )r   r	   rm   r)   r   r|   r   r   r   test_cached_range_bug  s    z$TestDateRanges.test_cached_range_bugc                 C   s.   t ddd}t|ddd}t|dks*td S )N20130220 10:00r%   r&   r_   r   )r   r   rm   r)   )r+   rN   r   r   r   r   test_timezone_comparison_bug  s    z+TestDateRanges.test_timezone_comparison_bugc              	   C   s<   t ddd}d}tjt|d t|ddd W 5 Q R X d S )	Nr   r%   r&   z0Inferred time zone not equal to passed time zoner]   r_   zEurope/Berlinr   )r   ra   rb   r)   r   )r+   rN   ri   r   r   r   test_timezone_comparison_assert  s    z.TestDateRanges.test_timezone_comparison_assertc                 C   s>   |}t ddd|d}t ddd|dd d d }t|| d S )Nz
2011-06-01z
2011-01-01z-1MS)rN   rO   r=   r'   Z1MS)rO   rN   r=   r'   r   r   )r+   Ztz_aware_fixturer'   r   rw   r   r   r   1test_negative_non_tick_frequency_descending_dates   s    z@TestDateRanges.test_negative_non_tick_frequency_descending_datesc                 C   sb   d}d}t ||d|d}t ||ddd}|dkr>|dd }n|dkrR|d d  }t|| d S )	Nz
2021-09-02r:   )rN   rO   r=   r   r   r   r   r   )r   r   r   r   )r+   r   rN   rO   r   r   rw   r   r   r    test_range_where_start_equal_end	  s       z/TestDateRanges.test_range_where_start_equal_end)4rA   rB   rC   ra   markparametrizer[   rd   rj   ro   rr   rv   Zslowry   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   {   s   
"

	

	




5
	



.	rE   c                   @   sn   e Zd ZdZdd Zejdddgdd Zejdddgd	d
 Z	dd Z
ejdddgdd ZdS )TestDateRangeTZz#Tests for date_range with timezonesc                 C   s   t ddddd}|j d S )Nz
2012-01-01z
2012-01-10r:   ZHongkongr   )r   r   r   r   r   r   test_hongkong_tz_convert  s    z(TestDateRangeTZ.test_hongkong_tz_converttzstrr%   r0   c                 C   sZ   t ddddd}|jdk s"tt dd|d	}|j}tjdgd d
d}t|| d S )Nz03/06/2012 00:00   zW-FRIr%   r   r   z
2012-11-02r   r   Zint32r   )r   r   r   r)   rg   IndexrW   rX   )r+   r   r   r   rw   r   r   r   #test_date_range_span_dst_transition$  s    z3TestDateRangeTZ.test_date_range_span_dst_transitionc                 C   s6   t |}tdd|d}tdd|d}t|| d S )Nr   r   r   )r   r   r   rW   rX   )r+   r   r'   r   rw   r   r   r   %test_date_range_timezone_str_argument2  s    
z5TestDateRangeTZ.test_date_range_timezone_str_argumentc              	   C   sv   ddl m} |}tdddddd|d}tdddddd|d}t||d	}||jksVtt||g}||jksrtd S )
Nr   )fixed_off_no_namei  r8   r   rT   r   r   r   )Z-pandas.tests.indexes.datetimes.test_timezonesr  r   r   r'   r)   rg   r   )r+   r  offrN   rO   r,   rY   r   r   r   'test_date_range_with_fixedoffset_noname:  s    z7TestDateRangeTZ.test_date_range_with_fixedoffset_nonamec                 C   s>   t d|d}|jdksttddd|d}||d ks:td S )	Nz3/11/2012 05:00r&   rT   z3/11/2012 04:00r   rK   r   r   )r   r   r)   r   )r+   r   r-   r,   r   r   r   test_date_range_with_tzF  s    z'TestDateRangeTZ.test_date_range_with_tzN)rA   rB   rC   __doc__r   ra   r   r   r  r  r  r  r   r   r   r   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d\Z	Z
d\ZZejdee	edee
fee	ee
edfee	edee
edfee	edee
edfgdd ZdS )TestGenRangeGenerationc                 C   s>   t tttd t dd}t tttd ddd}||ks:td S )Nnsr<   r   unitr   )listgenerate_rangeSTARTENDr   r)   r+   r   r   r   r   r   test_generateQ  s    z$TestGenRangeGeneration.test_generatec                 C   s>   t tttd t dd}t tttd ddd}||ks:td S )Nr	  r
  C)r  r  r  r  r   r)   r  r   r   r   test_generate_cdayV  s    z)TestGenRangeGeneration.test_generate_cdayc                 C   sH   t ttdddd dt dd}tdddtdddg}||ksDtd S )Nr   r8      r_   r	  rN   rO   r<   r   r     r  r  r   r   r)   r+   r,   rw   r   r   r   test_1[  s    
	zTestGenRangeGeneration.test_1c                 C   sZ   t ttdddtdddd t dd}tdddtdddtdddg}||ksVtd S )N  r   r8   r	  r  r_   r  r  r   r   r   test_2h  s    

	"zTestGenRangeGeneration.test_2c                 C   s<   t ttdddtdddd t dd}g }||ks8td S )Nr  r   rT   r   r	  r  r  r  r   r   r   test_3u  s    

	zTestGenRangeGeneration.test_3c              
   C   s|   t dddd}t dddd}ddd	d
g}ddddddddddg
}t|ddd d}t|ddd d}t|| t|| d S )Nz2015-04-15 00:00:03z2016-04-22 00:00:00QrM   z2015-06-22 00:00:04Wz2015-06-30 00:00:03z2015-09-30 00:00:03z2015-12-31 00:00:03z2016-03-31 00:00:03z2015-04-19 00:00:03z2015-04-26 00:00:03z2015-05-03 00:00:03z2015-05-10 00:00:03z2015-05-17 00:00:03z2015-05-24 00:00:03z2015-05-31 00:00:03z2015-06-07 00:00:03z2015-06-14 00:00:03z2015-06-21 00:00:03r   zQ-DECr   zW-SUNr   )r+   Zresult1Zresult2Zexpected1_listZexpected2_listZ	expected1rx   r   r   r    test_precision_finer_than_offset  sP              z7TestGenRangeGeneration.test_precision_finer_than_offset)r   r   )r%   zEurope/Londonz	start,endr&   c              	   C   sV   d}t jt|d t|| W 5 Q R X t jt|d t||t d W 5 Q R X d S )Nz>Start and end cannot both be tz-aware with different timezonesr]   rU   )ra   rb   	TypeErrorr   r   r   r   r   r   test_mismatching_tz_raises_err  s
    z5TestGenRangeGeneration.test_mismatching_tz_raises_errN)rA   rB   rC   r  r  r  r  r  r  Zdt1Zdt2Ztz1Ztz2ra   r   r   r   r!  r   r   r   r   r  P  s"   #	r  c                   @   sZ   e Zd Zdd Zdd Zdd Zdd Zej	d	d
dddgdd Z
dd Zdd ZdS )TestBusinessDateRangec              	   C   s   t ttt d t tdt d t tdt d d}tjt|d tddd	 W 5 Q R X tjt|d t ddd	 W 5 Q R X d
}tjt|d t ttdd d W 5 Q R X d S )NrU      r;   r`   zperiods must be a number, got Br]   r   2012-1-1r   z>freq must be specified for bdate_range; use date_range insteadr   )r   r  r  r   ra   rb   r   r   rh   r   r   r   test_constructor  s    z&TestBusinessDateRange.test_constructorc                 C   sZ   t ddd}t|dd}|dt   }t|dks6t|d |ksFt|d |ksVtd S )	Nr   rT      r#  r      r   r   )r   r   r   rm   r)   r+   rO   r   Z	firstDater   r   r   	test_misc  s    zTestBusinessDateRange.test_miscc              	   C   s   d}d}t jt|d t| W 5 Q R X t jt|d t|dd W 5 Q R X t jt|d t|dd W 5 Q R X t jt|d t|| W 5 Q R X d S )Nz
2007/100/1z;Unknown datetime string format, unable to parse: 2007/100/1r]   r   r   r   )ra   rb   rf   r   r   )r+   Zbadly_formed_dateri   r   r   r   test_date_parse_failure  s    z-TestBusinessDateRange.test_date_parse_failurec                 C   sB   t dd}t dd}|jjt ks&t||}t|ts>td S )N	12/5/2011	12/2/2011)r   _datar=   r   r)   union
isinstancer   r+   r   r   r   r   r   r   test_daterange_bug_456  s
    


z,TestBusinessDateRange.test_daterange_bug_456r   r   r   r   r   c                 C   s>   d}d}t ||d|d}d}d}t ||dd}t|| d S )	Nz
2018-07-21z
2018-07-29r   r   z
2018-07-23z
2018-07-27r:   rU   r   )r+   r   rN   rO   r   Z
bday_startZbday_endrw   r   r   r   test_bdays_and_open_boundaries  s    z4TestBusinessDateRange.test_bdays_and_open_boundariesc                 C   s>   t jd }t|d ddd}t|gdd}t|| d S )Nr:   r   r   r`   rU   )r   maxfloorto_pydatetimer   r   rW   rX   )r+   rN   r,   rw   r   r   r   test_bday_near_overflow  s    z-TestBusinessDateRange.test_bday_near_overflowc              	   C   s@   d}t jd }tjt|d t|ddd W 5 Q R X d S )Nz"Out of bounds nanosecond timestampr:   r]   r_   r   r;   )r   r3  r4  r5  ra   rb   r   r   )r+   ri   rN   r   r   r   test_bday_overflow_error  s    z.TestBusinessDateRange.test_bday_overflow_errorN)rA   rB   rC   r%  r)  r*  r1  ra   r   r   r2  r6  r7  r   r   r   r   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dd Z	e
jddd eD dd Ze
jddddgdd Ze
jddddgfdddgfddddgfgd d! Zd"S )#TestCustomDateRangec              	   C   s   t ttt d t tdt d t tdt d d}tjt|d tddd	 W 5 Q R X tjt|d t ddd	 W 5 Q R X d S )
NrU   r#  r;   r`   zperiods must be a number, got Cr]   r   r$  r  )r   r  r  r   ra   rb   r   r   rh   r   r   r   r%  
  s    z$TestCustomDateRange.test_constructorc                 C   s\   t ddd}t|ddd}|dt   }t|dks8t|d |ksHt|d	 |ksXtd S )
Nr   rT   r&  r#  r  r`   r'  r   r   )r   r   r   rm   r)   r(  r   r   r   r)    s    zTestCustomDateRange.test_miscc                 C   sJ   t dddd}t dddd}|jjt ks.t||}t|tsFtd S )Nr+  r  rU   r,  )r   r-  r=   r   r)   r.  r/  r   r0  r   r   r   r1    s
    
z*TestCustomDateRange.test_daterange_bug_456c                 C   s@   t dddd}tdddgdd}t|| |j|jks<td S )N
2013-05-01r8   r  r;   
2013-05-02
2013-05-03rU   )r   r   rW   rX   r=   r)   r   r   r   r   test_cdaterange(  s    z#TestCustomDateRange.test_cdaterangec              	   C   sp   t ddddd}tdddg|jd}t|| |j|jks@td	}tjt|d
 t dddd W 5 Q R X d S )Nr9  r8   r  Sun Mon Tue Wed Thu)r<   r=   weekmaskr:  
2013-05-05rU   [a custom frequency string is required when holidays or weekmask are passed, got frequency Br]   )r<   r>  	r   r   r=   rW   rX   r)   ra   rb   rf   r+   r   rw   ri   r   r   r   test_cdaterange_weekmask.  s         z,TestCustomDateRange.test_cdaterange_weekmaskc              	   C   st   t ddddgd}tdddg|jd}t|| |j|jksBtd	}tjt|d
 t dddgd W 5 Q R X d S )Nr9  r8   r  )r<   r=   holidaysr:  r;  
2013-05-06rU   r@  r]   )r<   rD  rA  rB  r   r   r   test_cdaterange_holidays@  s     z,TestCustomDateRange.test_cdaterange_holidaysc              	   C   sx   t dddddgd}tdddg|jd	}t|| |j|jksDtd
}tjt|d t ddddgd W 5 Q R X d S )Nr9  r8   r  r=  )r<   r=   r>  rD  r:  r?  rE  rU   r@  r]   )r<   r>  rD  rA  rB  r   r   r   %test_cdaterange_weekmask_and_holidaysP  s,     z9TestCustomDateRange.test_cdaterange_weekmask_and_holidaysr=   c                 C   s   g | ]}| d r|qS )r  )
startswith)rP   r=   r   r   r   rS   l  s     
 zTestCustomDateRange.<listcomp>c              	   C   sR   t tt|ddgd |d }d| }tjt|d t tt|d W 5 Q R X d S )NzMon Wed Friz
2009-03-14)r=   r>  rD  ZFOOz!invalid custom frequency string: r]   rU   )r   r  r  ra   rb   rf   )r+   r=   Zbad_freqri   r   r   r   test_all_custom_freqk  s        
z(TestCustomDateRange.test_all_custom_freq	start_end)z2018-01-01T00:00:01.000Zz2018-01-03T00:00:01.000Z)z2018-01-01T00:00:00.010Zz2018-01-03T00:00:00.010Z)z2001-01-01T00:00:00.010Zz2001-01-03T00:00:00.010Zc                 C   s2   |\}}t ||ddd}t|g}t|| d S )Nr_   r   )rN   rO   r<   r   r   )r+   rJ  rN   rO   r   rw   r   r   r   &test_range_with_millisecond_resolutiony  s    

z:TestCustomDateRange.test_range_with_millisecond_resolutionzstart,period,expectedz2022-07-23 00:00:00+02:00r   z2022-07-25 00:00:00+02:00z2022-07-22 00:00:00+02:00r_   c                 C   s&   t ||dd}t|}t|| d S )Nr  rl   r   )r+   rN   Zperiodrw   r   r   r   r   .test_range_with_timezone_and_custombusinessday  s    zBTestCustomDateRange.test_range_with_timezone_and_custombusinessdayN)rA   rB   rC   r%  r)  r1  r<  rC  rF  rG  ra   r   r   r   rI  rK  rL  r   r   r   r   r8  	  s>   		 



r8  c                  C   sB   t jddgd} tdd| d}tddd	d
g| d}t|| d S )Nz15:00z
2020-11-26)rN   rD  z2020-11-25 15:00r9   rl   z2020-11-25 15:00:00z2020-11-25 16:00:00z2020-11-27 15:00:00z2020-11-27 16:00:00rU   )r   ZCustomBusinessHourr   r   rW   rX   )r=   r   rw   r   r   r   $test_date_range_with_custom_holidays  s    	rM  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestDateRangeNonNanoc              	   C   s2   d}t jt|d tddddd W 5 Q R X d S )Nz+'unit' must be one of 's', 'ms', 'us', 'ns'r]   re   z
2016-03-04r8   hr<   r  r   rh   r   r   r   test_date_range_reso_validation  s    z4TestDateRangeNonNano.test_date_range_reso_validationc              	   C   s2   d}t jt|d tddddd W 5 Q R X d S )Nz)Use a lower freq or a higher unit insteadr]   re   z
2016-01-02r	  msr=   r  r   rh   r   r   r   %test_date_range_freq_higher_than_reso  s    z:TestDateRangeNonNano.test_date_range_freq_higher_than_resoc                 C   s   t ddddd}tjddtjd}t|ddd	}t|| t ddd
d
d}tjddtjd}t|dd
d	}t|| t ddddd}tjddtjd}t|ddd	}t|| d S )Nre   z2016-01-01 00:00:01rR  rS  l    \tGl   _tGr   zM8[ms]rU   usl    `g ) l   A"g ) M8[us]z2016-01-01 00:00:00.001r	  l     ^cQ)! l   AB|cQ)! zM8[ns])r   r   arangeint64r   viewrW   rX   )r+   rn   r,   rw   r   r   r   !test_date_range_freq_matches_reso  s       z6TestDateRangeNonNano.test_date_range_freq_matches_resoc              	   C   s   t d}t d}tjtdd t||ddd W 5 Q R X t||dd	d}tj|d	j|d	jgtj	d
}t
|d}t|| d S )Nz2022-10-19 11:50:44.719781z2022-10-19 11:50:47.066458zCannot losslessly convert unitsr]   r8   r   rP  r_   rU  r   rV  )r   ra   rb   rf   r   r   arrayZas_unit_valuerX  r   rY  rW   rX   )r+   rN   rO   rn   r,   rw   r   r   r   )test_date_range_freq_lower_than_endpoints  s     z>TestDateRangeNonNano.test_date_range_freq_lower_than_endpointsc                 C   s   t d}t d}t||ddd}|jdks2t|jdks@tt |dd|d ddd	d}t	
| | d S )
Nz
1066-10-14z
2305-07-13r:   r   rS  zM8[s]i8r   iQ )r   Z
datetime64r   r=   r)   r   rW  ZastyperY  rW   Zassert_numpy_array_equalZto_numpy)r+   rN   rO   rn   rZ   r   r   r   test_date_range_non_nano  s    

z-TestDateRangeNonNano.test_date_range_non_nanoN)rA   rB   rC   rQ  rT  rZ  r]  r_  r   r   r   r   rN    s
   rN  )0r  r   r   r   Znumpyr   ra   r2   r   Zpandas._libs.tslibsr   Zpandas._libs.tslibs.offsetsr   r   r	   r
   r   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorsrD   Zpandasrg   r   r   r   r   r   r   Zpandas._testingZ_testingrW   Zpandas.core.arrays.datetimesr   r  r  r  r    r!   rE   r   r  r"  r8  rM  rN  r   r   r   r   <module>   s:    5     $6jO 