U
    sVc                     @   s,  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
 d dlmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d dlZd d	lmZmZmZmZmZ d dl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'dd Z(dd Z)dd Z*dd Z+dS )    )datedatetime	timedeltaN)iNaTperiod)DAYSMONTHS)OutOfBoundsDatetime)DateParseError)INVALID_FREQ_ERR_MSGIncompatibleFrequency)dateutil_gettzmaybe_get_tz)NaTPeriod	Timedelta	Timestampoffsetsc                	   @   sZ  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	dd Z
dd Zdd Zdd Zejdedd Zejdedd Zejdeejdeddd d! Zd"d# Zejd$d%d&d'd(gd)d* Zd+d, Zd-d. Zd/d0 Zejdd1d2d3gejd4d5d6d7d8gejd9d:d;d<d=gd>d? Zejd4ed@dAdB ZdCS )DTestPeriodConstructionc              	   C   sZ   t d}d}tjt|d t| W 5 Q R X tjt|d t|dd W 5 Q R X d S )Nzm8[ns]2Value must be Period, string, integer, or datetimematchDfreq)r   Zto_numpypytestraises
ValueErrorr   )selftdmsg r!   J/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/scalar/period/test_period.pytest_from_td64nat_raises*   s    
z/TestPeriodConstruction.test_from_td64nat_raisesc              	   C   sD  t ddd}t d}||ks tt ddd}t d}t ddd}||ksLt||ksXtt ddd}t ddd}||ks|t||kstt d	}t t d	d}t d
}||kst||kstt ddd}t ddd}||kstt ddddd}t ddd}||kstt ddddd}||ks0tt d}t tddddddddd}||ksbtt ddd}||ks|tt d}t tddddddddd}||kstt ddd}||kstd}tjt|d t d d! W 5 Q R X d"}tjt|d t d#d$d W 5 Q R X tjtd%d t dd&d W 5 Q R X d S )'N1/1/2005Mr   zJan 20052005AamQq1982minZMIN        r   yearmonthdayr   z3/1/2005d2007-01-01 09:00:00.001  	   r     L2007-01-01 09:00:00.00101  Uz"Must supply freq for ordinal valuer    )ordinalzInvalid frequency: Xz2007-1-1Xzpass as a string instead)Minr0   )r   AssertionErrornowr   r   r   r   	TypeError)r   i1i2i3i4i5expectedr    r!   r!   r"   test_construction5   sV    

z(TestPeriodConstruction.test_constructionc                 C   sT   t d}t|dd}| }||ks(t|j}t|dd}| }|j|ksPtd S )Nz2022-04-20 09:23:24.123456789nsr   )r   r   to_timestamprB   Zasm8)r   tsperrtZdt64per2Zrt2r!   r!   r"   &test_construction_from_timestamp_nanost   s    z=TestPeriodConstruction.test_construction_from_timestamp_nanosc                 C   s   t ddd}t ddd}||dks*tt ddd}||dksHtt ddd}||dksftt ddd}||ks~tt dd	d
dd}t ddd}||kstd S )N3/10/12Br   r   z3/11/12z3/12/12b  r/   
   r1   )r   asfreqrB   )r   rE   rF   rG   r!   r!   r"   test_construction_bday   s    z-TestPeriodConstruction.test_construction_bdayc                 C   s,  t dddd}t ddd}||ks&tt dddd}t ddd}||ksLtt d	}t dddd}t d
}||ksvt||kstt d}||kstt d}||kstt d}||kstt d}||kstt d}||kstt d}||kstt d}|jdkstt d}||ks(td S )Nr.   r0   r*   r2   quarterr   r$   r   r/   z9/1/2005Z2005Q1Z2005q1Z05Q1Z05q1Z1Q2005Z1q2005Z1Q05Z1q05Z4Q1984i  Z4q1984)r   rB   r2   )r   rE   rF   rG   lowerr!   r!   r"   test_construction_quarter   s6    z0TestPeriodConstruction.test_construction_quarterc                 C   s&  t ddd}t ddd}||ks$tt ddd}||ks<tt ddd}||ksTtt ddd}|jdksntt tdd	d	dd}t ddd}||kstt tdd	d	dd}t tdd	d	dd}t td
dd}t ddd}t ddd}||kst||kst||kst||ks"td S )N2007-01r%   r   200701r>   r?   r   I  r7   r0   
2007-01-012007-01-01 00:00:002007-01-01 00:00:00.000)r   rB   r2   r   r   np
datetime64r   rJ   rE   rF   rG   rH   rI   r!   r!   r"   test_construction_month   s*    z.TestPeriodConstruction.test_construction_monthc              	   C   sv  t dt dt dddks tt dt dt dddks@tt dt dt dddks`tt dt dt dddkstt dt dt dddkstt d	d
tjdddt d	d
ddkstt d	dtjdddt d	dddkstt d	dd
t dt d	dd
ddkstt dddt dt dddddksDtt ddd}t d	dd
tdd|ksptt d	dd
dd|kstt dddtddt dddddkstt dt dt dddkstt dt d}t ddd}||kst|j	dkst|j	dks"tt t
dd
d
dd}t ddd}||ksPtt tdd
d
dd}t t
dd
d
dd}t tddd}t ddd}t ddd}||kst||kst||kst||kstt d}t t
dd
d
d d!d!d"d#d}||kstt dd#d}||ks&tt d$}t t
dd
d
d d!d!d%d&d}||ksXtt d$d&d}||ksrtd S )'Nr$   r   r%   r&   r'   rS   rT   r   r.   r0      )startingMonthrZ   r*      r/   r1   rV   rW   z
2005-03-013DZ3Br>   r`   ra   r7   r_   rb   rc   rd   r6   r8   r   r9   r:   r;   r<   r=   )r   r   MonthEndrB   YearEndZBusinessDayDay
QuarterEndZBDayr2   r   r   re   rf   rg   r!   r!   r"   test_period_constructor_offsets   s           
  
          "z6TestPeriodConstruction.test_period_constructor_offsetsc              	   C   sx  d}t jt|d tt  W 5 Q R X t jt|d tt   W 5 Q R X d}t jt|d tddd W 5 Q R X d}t jt|d tddd W 5 Q R X d	}t jt|d td
ddd W 5 Q R X d}t jt|d tdd W 5 Q R X d}t jt|d tdd W 5 Q R X d}t jt|d tdd W 5 Q R X d}t jt|d tdd W 5 Q R X d S )Nz#Must supply freq for datetime valuer   r   g?r   r   zOrdinal must be an integerr`   z?Only value or ordinal but not both should be given but not bothrk   r0   )r?   valuer   z%If value is None, freq cannot be None)r3   z-Given date string -2000 not likely a datetimez-2000r'   zday is out of range for month0z/Unknown datetime string format, unable to parsez	1/1/-2000)r   r   r   r   r   rC   r   r
   r   r    r!   r!   r"   test_invalid_arguments  s4    z-TestPeriodConstruction.test_invalid_argumentsc                 C   sf   t ddd}t dddd|ks"tt d tks2tt ddd}t |d	d}t d
d	d}||ksbtd S )Nr^   2Mr   r7   r0   )r2   r3   r   rb   r   r'   2007)r   rB   r   )r   rJ   presultexpr!   r!   r"   test_constructor_corner:  s    z.TestPeriodConstruction.test_constructor_cornerc                 C   s   t d}|jdkstt d}|jdks,tt d}|jdksBtt d}|jdksXtt d	}|jd
ksntt d}|jdkstt d}|jdkstd S )Nrb   r   z2007-01-01 07Hz2007-01-01 07:10Tz2007-01-01 07:10:15Sz2007-01-01 07:10:15.123r:   z2007-01-01 07:10:15.123000r=   z2007-01-01 07:10:15.123400)r   r   rB   r   rx   r!   r!   r"   test_constructor_infer_freqF  s    z2TestPeriodConstruction.test_constructor_infer_freqc                 C   s   t ddd}t ddd}|j|jks(t|jdks6t|jdksDt|jtdksXt|jt ksjt|d j|jd kstd| j|jd kst|d j|jd kstd	| j|jd kstd S )
N19892Ar   r'   z2A-DECzA-DECrk   r0   )r   r?   rB   freqstrr   r   rn   )r   Zresult1Zresult2r!   r!   r"   test_multiples^  s    z%TestPeriodConstruction.test_multiplesr3   c                 C   sv   d| }t d|d}dt|ks&t|jddd}t ||d}||ksLt|jddd}t ||d}||ksrtd S )NzQ-Z1989Q3r   r   endhowrl   )r   strrB   rM   r   r3   r   rz   Zstamprx   r!   r!   r"   test_period_cons_quarterlyl  s    
z1TestPeriodConstruction.test_period_cons_quarterlyc                 C   s\   d| }t d|d}|jdddtdd }t ||d}||d	 ksJtt|t sXtd S )
NzA-r   r   r   r   r      )daysr0   )r   rM   r   rB   
isinstancer   r!   r!   r"   test_period_cons_annualz  s    
z.TestPeriodConstruction.test_period_cons_annualr4   numrW      c                 C   sP   d| }d| }t ||d}t |dd|}||ks>tt|t sLtd S )Nz2011-02-zW-r   r   )r   rX   rB   r   )r   r   r4   Zdaystrr   ry   rJ   r!   r!   r"   test_period_cons_weekly  s    

z.TestPeriodConstruction.test_period_cons_weeklyc                 C   s:   t ddd}t j|jdd}||ks(tt|t s6td S N2011-01r%   r   )r   Z_from_ordinalr?   rB   r   r   rx   resr!   r!   r"   test_period_from_ordinal  s    z/TestPeriodConstruction.test_period_from_ordinalr   r'   r%   r   r|   c                 C   sT   t d|d}|tkstt dd| d}|tks4tt dd| d}|tksPtd S )Nr   r   23r   r   rB   r   r   rO   r!   r!   r"   'test_construct_from_nat_string_and_freq  s    z>TestPeriodConstruction.test_construct_from_nat_string_and_freqc                 C   s   t ddd}|tkstt tdd}|tks0tt tdd}|tksHtt tdd}|tks`tt d}|tksttt t}|tkstd S )NnatzW-SUNr   r   rl   1D1Hr   )r   r   rB   r   r   r!   r!   r"   test_period_cons_nat  s    z+TestPeriodConstruction.test_period_cons_natc              	   C   s6  t ddd}t ddd}|j|jks(t|jtdks<t|jdksJt|jt ks\t|jdksjt|d }|j|d jkst|j|jkst|jdkst|d }|j|d jkst|j|jkst|jdkstd}tjt	|d t dd	d W 5 Q R X d
}tjt	|d t ddd W 5 Q R X d S )Nr   3Mr   r%   r/   r0   z;Frequency must be positive, because it represents span: -3Mr   z-3Mz:Frequency must be positive, because it represents span: 0MZ0M)
r   r?   rB   r   r   rm   r   r   r   r   )r   p1p2ry   r    r!   r!   r"   test_period_cons_mult  s*    z,TestPeriodConstruction.test_period_cons_multc              	   C   s  t dddt dddt dddft dddt dddt dddfg}|D ]\}}}|j|jksdt|j|jkstt|jtdkst|jd	kst|jtdkst|jd	kst|jt kst|jdkst|d }|j|d jkst|j|jkst|jd	kst|d }|j|d jks4t|j|jksFt|jd	ksVt|d }|j|d jkstt|j|jkst|jd	kst|d }|j|d jkst|j|jkst|jd	ksHtqHd
}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 ddd W 5 Q R X 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 ddd W 5 Q R X d}tjt	|d t ddd W 5 Q R X d S )Nr   r   r   1H1Dr|   r0   r`      Z25Hz<Frequency must be positive, because it represents span: -25Hr   z-1D1Hz-1H1Dz:Frequency must be positive, because it represents span: 0DZ0D0HzInvalid frequency: 1W1DZ1W1DzInvalid frequency: 1D1WZ1D1W)
r   r?   rB   r   r   Hourr   r   r   r   )r   rx   r   r   Zp3ry   r    r!   r!   r"   test_period_cons_combined  sl    





z0TestPeriodConstruction.test_period_cons_combinedz1970/01/01 z2020-12-31 z1981/09/13 hourz00:00:00z00:00:01z23:59:59z12:00:59zsec_float, expected)z
.000000001r0   )z
.000000999  )z
.123456789i  )z
.999999999r   c                 C   s    t || | jj|kstd S N)r   
start_time
nanosecondrB   )r   r4   r   Z	sec_floatrJ   r!   r!   r"   "test_period_constructor_nanosecond  s    z9TestPeriodConstruction.test_period_constructor_nanosecond   c                 C   s"   t d| dd}|j|kstd S )Ni ' Z1Hr`   )r   r   rB   )r   r   rx   r!   r!   r"   test_period_large_ordinal)  s    z0TestPeriodConstruction.test_period_large_ordinalN)__name__
__module____qualname__r#   rK   rR   rY   r]   rh   rq   ru   r{   r   r   r   markparametrizer   r   r   r   ranger   r   r   r   r   r   r   r   r!   r!   r!   r"   r   )   sJ   ?$E


	

G	r   c                   @   s   e Zd Zdd Zdd Zejddddgd	d
 Zejddddg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 d!g	ejd"d#d$d%gd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd#S )2TestPeriodMethodsc                 C   s"   t d}t|}||kstd S )NZ2000Q1)r   tmZround_trip_picklerB   )r   rx   Znew_pr!   r!   r"   test_round_trip2  s    
z!TestPeriodMethods.test_round_tripc                 C   s   t tdddt tdddks$tt tdddt tdddksHtt tdddt tdddksltt tdddt tdddkstd S )	Nr   r%   r   
2011-01-01r   r   rv   2011-02)hashr   rB   )r   r!   r!   r"   	test_hash7  s    $$$zTestPeriodMethods.test_hashtzstrEurope/Brusselsz
Asia/Tokyoz
US/Pacificc              	   C   s  t t tdddj|d}W 5 Q R X tddd|}t|	|}||ksXt
|j|jksht
|j|jksxt
t t tdddj|d}W 5 Q R X tddd|}t|	|}||kst
|j|jkst
|j|jkst
t t tdddjd|d}W 5 Q R X td	d
ddd|}t|	|}||ksPt
|j|jksbt
|j|jkstt
t t tdddjd|d}W 5 Q R X tddd|}t|	|}||kst
|j|jkst
|j|jkst
d S )Nr$   r%   r   tzUTC3Hr'   r   r      ri   r.   )r4   r3   r2   r   )r   assert_produces_warningFutureWarningr   rM   r   
tz_convertpytztimezone	normalizerB   r   tzinfo)r   r   rx   rz   Zexp_zoner!   r!   r"   test_to_timestamp_tz_argC  s8      z*TestPeriodMethods.test_to_timestamp_tz_argdateutil/Europe/Brusselszdateutil/Asia/Tokyozdateutil/US/Pacificc              	   C   s   t |}tt tdddj|d}W 5 Q R X tddd|}||ksPt|j	t
|ddd ksnt|j	|j	ks~ttt tdddjd|d	}W 5 Q R X tddd|}||kst|j	t
|ddd kst|j	|j	kstd S )
Nr$   r%   r   r   r   /r0   r   r   )r   r   r   r   r   rM   r   r   rB   r   r   split)r   r   r   rx   rz   r!   r!   r"   !test_to_timestamp_tz_arg_dateutilj  s     z3TestPeriodMethods.test_to_timestamp_tz_arg_dateutilc              	   C   s@   t t tdddjdd}W 5 Q R X |jtdks<td S )Nr$   r%   r   r   r   r   )r   r   r   r   rM   r   r   rB   r   r!   r!   r"   -test_to_timestamp_tz_arg_dateutil_from_string~  s    z?TestPeriodMethods.test_to_timestamp_tz_arg_dateutil_from_stringc                 C   s   t ddd}|jddtdks$ttdtdd	 }|jd
d|ksJtt ddd}|jddtdksnttdtdd	 }|jd
d|kstd S )Nr   r%   r   r~   r   r   z
2011-02-01r0   rL   Er   
2011-04-01)r   rM   r   rB   r   )r   rx   rJ   r!   r!   r"   test_to_timestamp_mult  s    z(TestPeriodMethods.test_to_timestamp_multc              	   C   s  t ddd}|jdd}dddg}|D ]0}||jd	|dks@t||jd
|dks&tq&|jdd}dddg}|D ]0}||jd	|dkst||jd
|dksrtqrdddddd	dddg	}dd }|D ]T}t d|d}| |}	|	|kst|j|jddkst|j||kstqt ddd}|jddd}	tdddtdd }
|	|
ksZt|jddd}	|	|
ksvt|jddd}	tdddtdd }
|	|
kst|jddd}	|	|
kst|jdd}	tdddtdd }
|	|
ksttddd}
|jddd}	|	|
kst|jddd}	|	|
ks8t|jddd}	|	|
ksTt|jddd}	|	|
kspt|jd dd}	|	|
kstd S )!Nr,   r'   r   r~   r   sZStarTZBEGInr   rl   r   er   ZFINIsHr*   r%   WrT   r|   rA   c                 S   s2   | j dkr| jtddd S t| | j  jjd S )NrT   r0   r   )r   nanoseconds)r   r   r   r   rr   )rx   r!   r!   r"   _ex  s    
z0TestPeriodMethods.test_to_timestamp.<locals>._exZ1985i  r0   rL   r   r}   Z2Ti  startZ5S)	r   rM   rB   Z	to_periodr   end_timer   r   r   )r   rx   start_tsaliasesr(   Zend_tsZfrom_lstr   Zfcodery   rJ   r!   r!   r"   test_to_timestamp  sX    

z#TestPeriodMethods.test_to_timestampc                 C   s:   t dd}|jddd}tdtdd }||ks6td S )N
1990-01-05rT   r   r   
1990-01-06r0   r   )r   rM   r   r   rB   r   rO   ry   rJ   r!   r!   r"   test_to_timestamp_business_end  s    
z0TestPeriodMethods.test_to_timestamp_business_endzts, expected)z1970-01-01 00:00:00r   )z1970-01-01 00:00:00.000001r0   )z1970-01-01 00:00:00.00001rW   )z1970-01-01 00:00:00.499i8 )z1999-12-31 23:59:59.999iX> )z1999-12-31 23:59:59.999999i?B )z2050-12-31 23:59:59.5i  )z2050-12-31 23:59:59.500001i! )z2050-12-31 23:59:59.123456i@ r   NusrL   c                 C   s"   t |j|dj}||kstd S )Nr   )r   rM   microsecondrB   )r   rN   rJ   r   ry   r!   r!   r"   test_to_timestamp_microsecond  s    z/TestPeriodMethods.test_to_timestamp_microsecondc                 C   s4   t d}dt|kstt d}dt|ks0td S )NzJan-20002000-01z
2000-12-15r   reprrB   r   r!   r!   r"   	test_repr  s    zTestPeriodMethods.test_reprc                 C   s$   t ddd}ttt|ks td S )Nr   r%   r   )r   r   r   rB   r   r!   r!   r"   test_repr_nat  s    zTestPeriodMethods.test_repr_natc                 C   s   t d}t|dkstd S )Nz2000-01-01 12:15:02.123z&Period('2000-01-01 12:15:02.123', 'L')r   r   r!   r!   r"   test_millisecond_repr  s    z'TestPeriodMethods.test_millisecond_reprc                 C   s   t d}t|dkstd S )Nz2000-01-01 12:15:02.123567z)Period('2000-01-01 12:15:02.123567', 'U')r   r   r!   r!   r"   test_microsecond_repr  s    z'TestPeriodMethods.test_microsecond_reprc                 C   s4   t ddd}|d}|dks"tt|ts0td S )Nz2000-1-1 12:34:12r~   r   z%Y-%m-%d %H:%M:%Sz2000-01-01 12:34:12)r   strftimerB   r   r   r   r!   r!   r"   test_strftime   s    
zTestPeriodMethods.test_strftime)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   1  sB   
&
?r   c                   @   s&  e Zd ZdZejdddddgdd Zd	d
 Zdd Z	dd Z
dd Zejdejdfejdfgejdddgdd Zejdejdfejdfgejdddgdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6TestPeriodPropertiesz5Test properties such as year, month, weekday, etc....r   r'   r%   r   r|   c                 C   sl   t d|d}|jstt|jts&tt d|d}|jr<tt d|d}|jsRtt d|d}|jrhtd S )Nz2000-01-01 00:00:00r   z1999-01-01 00:00:00z2004-01-01 00:00:00z2100-01-01 00:00:00)r   Zis_leap_yearrB   r   bool)r   r   rx   r!   r!   r"   test_is_leap_year  s    


z&TestPeriodProperties.test_is_leap_yearc                 C   s   t ddd}|jdkst|jdks(tt|t s6tt ddd}|jdksPt|jdks^tt|t sltt ddd}|jdkst|jd	kstt|t std S )
Nr   Q-DECr`        r/   r%      )r   r2   rB   r[   r   r3   r   r!   r!   r"    test_quarterly_negative_ordinals  s    z5TestPeriodProperties.test_quarterly_negative_ordinalsc                 C   s0   t ddd}|jt kst|jdks,td S )Nr,   rA   r   r}   )r   r   r   MinuterB   r   )r   rE   r!   r!   r"   test_freq_str+  s    z"TestPeriodProperties.test_freq_strc                 C   s  ddddddgddd	d
dgddddddgdddddddgddddgdddd d!gd"d#d$gd%d&d'gd(d)d*gd+	}t }| D ]\}}|D ]P}tjt|d, td-|d. W 5 Q R X tjt|d, td/|d0 W 5 Q R X qtd-|d.}td/|d0}t|tstt|tsxtqxd S )1NZMTHZMONTHZMONTHLYZMthr3   ZmonthlyZBUSZBUSINESSZ
BUSINESSLYZWEEKDAYZbusZDAYZDLYZDAILYro   ZDlyZDailyZHRZHOURZHRLYZHOURLYhrr   ZHRlyminuteZMINUTEZMINUTELYZminutelysecZSECZSECONDZSECONDLYsecondZMILLISECONDZMILLISECONDLYZmillisecondZMICROSECONDZMICROSECONDLYr   Z
NANOSECONDZNANOSECONDLYr   )	r%   rT   r   r|   r}   r~   r:   r=   Nr   z2016-03-01 09:00r   r0   r`   )r   itemsr   r   r   r   r   rB   )r   Zcasesr    rz   freqsr   r   r   r!   r!   r"   test_period_deprecated_freq0  s*    
z0TestPeriodProperties.test_period_deprecated_freqc              	   C   s&   t | j| j| j| j| j| j| ddS )Nr   )r2   r3   r4   r   r   r   r   )r   r2   r3   r4   r   r   r   )boundoffsetr!   r!   r"   _period_constructorK  s    z(TestPeriodProperties._period_constructorzbound, offsetr   r0   period_propertyr   r   c              	   C   s4   t ||}tjtdd t|| W 5 Q R X d S )NzOut of bounds nanosecondr   )r   r  r   r   r	   getattr)r   r  r  r  r   r!   r!   r"   $test_outer_bounds_start_and_end_timeV  s    z9TestPeriodProperties.test_outer_bounds_start_and_end_timec                 C   sn   t || }| jdd}t||jdd|ks8t||tddd  d}t||d|ksjtd S )Nr~   r   r0   )unit)r   r  rM   roundr  rB   r   floor)r   r  r  r  r   rJ   r!   r!   r"   $test_inner_bounds_start_and_end_time^  s
    z9TestPeriodProperties.test_inner_bounds_start_and_end_timec                 C   s   dddddddg}t dd	d	}|D ]}td
|d}|j|ks"tq"td
ddjt dd	dks`ttd
ddjt dddks~td S )Nr'   r*   r%   r   r|   r}   r~   rV   r0   2012r   rT   rk   r   i  ri      )r   r   r   rB   )r   Zfreq_lstxpfrx   r!   r!   r"   test_start_timeh  s    z$TestPeriodProperties.test_start_timec                 C   s  t ddd}dd }|ddd}||jks.tt ddd}|d	d
d}||jksTtt ddd}|d	dd}||jksztt ddd}|d	dd}||jkstt ddd}|d	ddd}||jkstt ddd}|d	dd}||jkstt ddd}|d	dd}||jkstt ddd}|d	dd}||jks>tt ddd}|d	ddd}||jkshtt ddd}|d	ddd}||jkstd S )Nr  r'   r   c                  W   s   t t t|  jd S Nr0   r   r   rr   argsr!   r!   r"   r   t  s    z/TestPeriodProperties.test_end_time.<locals>._ex  r0   r*   rV   r   r%   rk   r   r|   rT   r/   r   Z15D   r   r   r   r   rB   )r   rx   r   r  r!   r!   r"   test_end_timeq  s>    z"TestPeriodProperties.test_end_timec                 C   s2   t dd}|j}tdtdd }||ks.td S )Nr   rT   r   r0   r   )r   r   r   r   rB   r   r!   r!   r"   test_end_time_business_friday  s    
z2TestPeriodProperties.test_end_time_business_fridayc                 C   s0   dd }t dd}|ddd}|j|ks,td S )Nc                  W   s   t t t|  jd S r  r  r  r!   r!   r"   r     s    z;TestPeriodProperties.test_anchor_week_end_time.<locals>._exz2013-1-1zW-SATr  r0      r  )r   r   rx   r  r!   r!   r"   test_anchor_week_end_time  s    
z.TestPeriodProperties.test_anchor_week_end_timec                 C   s   t ddd}|jdkstd S )Nr'   r7   )r   r2   )r   r2   rB   )r   Za_dater!   r!   r"   test_properties_annually  s    z-TestPeriodProperties.test_properties_annuallyc                 C   st   t dddd}t dddd}t dddd}tdD ]<}|||fD ],}|| jdksVt|| j|d ks@tq@q2d S )Nr   r7   r0   )r   r2   r[   zQ-JANzQ-JUNr/   )r   r   ZqyearrB   r[   )r   Z
qedec_dateZ
qejan_dateZ
qejun_datexZqdr!   r!   r"   test_properties_quarterly  s    z.TestPeriodProperties.test_properties_quarterlyc                 C   s   t dddd}tdD ]}|| }|jdks0td|d   krHdkr\n n|jdkstnd|d   krtdkrn n|jd	kstnVd
|d   krdkrn n|jdkstn*d|d   krdkrn n|jdkst|j|d kstqd S )Nr%   r7   r0   )r   r2   r3   r   r/   r   r  rk      r8   rW   ri   )r   r   r2   rB   r[   r3   )r   Zm_dater  Zm_ival_xr!   r!   r"   test_properties_monthly  s    z,TestPeriodProperties.test_properties_monthlyc                 C   s   t ddddd}|jdkst|jdks,t|jdks:t|jdksHt|d jdksZt|jdkshtt ddd	ddjd
kstd S )Nr   r7   r0   r   r   r2   r3   r4   4   r   rV   rk      )r   r2   rB   r[   r3   weekdays_in_month)r   w_dater!   r!   r"   test_properties_weekly  s    z+TestPeriodProperties.test_properties_weeklyc              	   C   s   t ddddd}|jdkst|jdks,t|jdks:t|jdksHt|d jdksZt|jdkshtt ddd	dd}|jd
kstt}tj	t
|d t ddddd W 5 Q R X d S )Nr   r7   r0   r   r"  r#  r   rV   rk   r$  r   ZWK)r   r2   rB   r[   r3   r%  r&  r   r   r   r   )r   r'  rz   r    r!   r!   r"   test_properties_weekly_legacy  s    z2TestPeriodProperties.test_properties_weekly_legacyc                 C   s  t ddddd}|jdkst|jdks,t|jdks:t|jdksHt|jdksVt|jdksdt|jdksrtt dddddjd	kstt d
dddd}|jdkst|jdkst|jdkst|jdkst|jdkst|jdkst|jdkstt d
ddddjd	kstd S )NrT   r7   r0   r"  r   r   rV   rk   r$  r   )	r   r2   rB   r[   r3   r4   weekday	dayofyearr&  )r   Zb_dateZd_dater!   r!   r"   test_properties_daily  s$    z*TestPeriodProperties.test_properties_dailyc                 C   s   t dddddd}t dddddd}||fD ]}|jdks>t|jdksLt|jdksZt|jdksht|jdksvt|jdkst|jdkst|j	dkstt ddd	dddj	d
ks,tq,d S )Nr|   r7   r0   r   )r   r2   r3   r4   r   2Hr   rV   rk   r$  )
r   r2   rB   r[   r3   r4   r*  r+  r   r&  )r   Zh_date1Zh_date2Zh_dater!   r!   r"   test_properties_hourly  s    z+TestPeriodProperties.test_properties_hourlyc                 C   s   t ddddddd}|jdks"t|jdks0t|jdks>t|jdksLt|jdksZt|jdksht|jdksvt|j	dkstt ddd	ddddj	d
kstd S )NrA   r7   r0   r   )r   r2   r3   r4   r   r   r   r   rV   rk   r$  )
r   r[   rB   r3   r4   r*  r+  r   r   r&  )r   Zt_dater!   r!   r"   test_properties_minutely  s    z-TestPeriodProperties.test_properties_minutelyc              	   C   s   t dddddddd}|jdks$t|jdks2t|jdks@t|jdksNt|jdks\t|jdksjt|jdksxt|j	dkst|j
dkst|jdkstt ddddddddjd	kstd S )
NrA   r7   r0   r   )r   r2   r3   r4   r   r   r   r   rV   rk   r$  )r   r2   rB   r[   r3   r4   r*  r+  r   r   r   r&  )r   Zs_dater!   r!   r"   test_properties_secondly'  s>                z-TestPeriodProperties.test_properties_secondlyN)r   r   r   __doc__r   r   r   r   r   r   r  r  r   r-   maxr  r  r  r  r  r  r  r  r!  r(  r)  r,  r.  r/  r0  r!   r!   r!   r"   r     s4   
	.r   c                   @   s   e Zd Zdd ZdS )TestPeriodFieldc              	   C   s6   d}t jt|d tdtdd W 5 Q R X d S )Nz@Buffer dtype mismatch, expected 'const int64_t' but got 'double'r   r   r0   r   )r   r   r   	libperiodZget_period_field_arrre   emptyrt   r!   r!   r"   2test_get_period_field_array_raises_on_out_of_range@  s    zBTestPeriodField.test_get_period_field_array_raises_on_out_of_rangeN)r   r   r   r6  r!   r!   r!   r"   r3  ?  s   r3  c                	   @   sp   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ddfeedddffdd ZdS )TestPeriodComparisonsc                 C   sT   t dd}t dd}||ks t||ks,t||ks8t||k rDt||krPtd S Nr   r%   r   rB   )r   leftrightr!   r!   r"   ,test_comparison_same_period_different_objectG  s    

zBTestPeriodComparisons.test_comparison_same_period_different_objectc                 C   s`   t dd}t dd}||kr t||ks,t||k s8t||ksDt||krPt||kr\td S )Nr   r%   2000-02r9  )r   janfebr!   r!   r"   test_comparison_same_freqR  s    

z/TestPeriodComparisons.test_comparison_same_freqc              	   C   s   t dd}t dd}||kr t||ks,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 )Nr   r%   z
2012-01-01r   z0Input has different freq=D from Period\(freq=M\)r   )r   rB   r   r   r   )r   r>  r4   r    r!   r!   r"   test_comparison_mismatched_freq]  s    

z5TestPeriodComparisons.test_comparison_mismatched_freqc              
   C   s   t dd}|dkrt|dks"td}d| d| }|dfd|ff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 qFd S )Nr   r%   r0   z'(Period|int)'z#not supported between instances of z and r   )r   rB   r   r   rD   )r   r>  Z
int_or_perr    r:  r;  r!   r!   r"   test_comparison_invalid_typem  s    
z2TestPeriodComparisons.test_comparison_invalid_typec                 C   sF   t dd}t dd}t dd}|||g}|||g}t||ksBtd S )Nr   r%   r=  z2000-03)r   sortedrB   )r   r>  r?  marZperiodsZcorrectPeriodsr!   r!   r"   test_sort_periods  s    




z'TestPeriodComparisons.test_sort_periodsc                 C   s   t ddd}td}t|f|tft|f|tffD ]P\}}||k rDt||krPt||kr\t||ksht||krtt||kr0tq0d S )Nr   r   r   )r   r   r   rB   )r   rx   tr:  r;  r!   r!   r"   test_period_cmp_nat  s    z)TestPeriodComparisons.test_period_cmp_natzzerodim_arr, expectedr   Fr   r%   Tc                 C   s.   t dd}||k|kst||k|ks*td S r8  r9  )r   Zzerodim_arrrJ   rx   r!   r!   r"   !test_comparison_numpy_zerodim_arr  s    
z7TestPeriodComparisons.test_comparison_numpy_zerodim_arrN)r   r   r   r<  r@  rA  rB  rE  rG  r   r   r   re   arrayr   rH  r!   r!   r!   r"   r7  F  s    r7  c                
   @   sP  e Zd Zejddddddgdd Zd	d
 Zdd Zdd Z	dd Z
dd dd dd gZdddgZejjdeedejjdeeddd Zdd Zejdd d!d"d#gd$d% Zejd&d'd(gejdd d!d"d#gejd)ejd*fejd+fejd,fejd-fgd.d/ Zd0d1 Zd2d3 Zejd4d5d6d7gd8d9 Zd:d; Zd,S )<TestArithmeticr	  rL   r   msr   r)   c              	   C   sl   t dd}td|}|| tks&t|| tks6t|| tksFttjtdd ||  W 5 Q R X d S )Nz
2022-06-01r   r   unsupported operandr   )r   re   timedelta64r   rB   r   r   rD   )r   r	  rO   r   r!   r!   r"   test_add_sub_td64_nat  s    
z$TestArithmetic.test_add_sub_td64_natc              	   C   sf   t dddt ddd }}|| }|d|j ks4td}tjt|d |t dd	d  W 5 Q R X d S )
N2011r'   r   rw   r   z4Input has different freq=M from Period\(freq=A-DEC\)r   r^   r%   r   r   rB   r   r   r   )r   r:  r;  ry   r    r!   r!   r"   test_sub_delta  s    zTestArithmetic.test_sub_deltac                 C   sD   t ddddd}t ddddd}|d |ks0td| |ks@td S )Nr     r0   r"  rk   r9  )r   per1rQ   r!   r!   r"   test_add_integer  s    zTestArithmetic.test_add_integerc                 C   sP   t ddd}|t tkstt| tks,t|t tks<tt| tksLtd S r   r   r   r!   r!   r"   test_add_sub_nat  s
    zTestArithmetic.test_add_sub_natc              	   C   s   t ddddd}t ddddd}dddd	g}tjt|d
 |d  W 5 Q R X tjt|d
 d|  W 5 Q R X tjt|d
 ||  W 5 Q R X d S )Nr   rR  r0   r"  rk   |zunsupported operand type\(s\)zcan only concatenate strzmust be str, not Periodr   r   )r   joinr   r   rD   )r   rS  rQ   r    r!   r!   r"   test_add_invalid  s    zTestArithmetic.test_add_invalidc                 C   s   | S r   r!   r  r!   r!   r"   <lambda>      zTestArithmetic.<lambda>c                 C   s   t | gS r   )pdSeriesrY  r!   r!   r"   rZ    r[  c                 C   s   t | gS r   )r\  IndexrY  r!   r!   r"   rZ    r[  identityr]  r^  lbox)idsrboxc              	   C   s   t d}tddd}dddddd	g}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2017r%   r   rV  z
cannot addrL  zcan only operate on azincompatible typezufunc add cannot use operandsr   )r   r   rW  r   r   rD   )r   rb  r`  rN   rO   r    r!   r!   r"   test_add_timestamp_raises  s     	z(TestArithmetic.test_add_timestamp_raisesc              	   C   sx   t ddd}t ddd}|j}|| d| ks2t|| d| ksFtd}tjt|d |t d	d
d  W 5 Q R X d S )Nr   r   r   z
2011-01-15i   z0Input has different freq=M from Period\(freq=D\)r   r   r%   rP  )r   rS  rQ   offr    r!   r!   r"   test_sub  s    zTestArithmetic.test_subnr0   rk   r/   r   c                 C   s\   t d||d}t d||d}t t||jjdt t||jjd }|| |ksXtd S )N19910905r   19920406)r   r   r   baserB   )r   Ztick_classesrg  r   r   rJ   r!   r!   r"   test_sub_n_gt_1_ticks  s     z$TestArithmetic.test_sub_n_gt_1_ticksr   TFzoffset, kwd_namer3   rj   Nr*  c                 C   s|   |d k	r|dini }d}d}t ||||f|d}t ||||f|d}	t ||	jjdt ||jjd }
|	| |
ksxtd S )Nr/   rh  ri  r   )r   r   rj  rB   )r   r  Zkwd_namerg  r   kwdsZp1_dZp2_dr   r   rJ   r!   r!   r"   test_sub_n_gt_1_offsets  s     z&TestArithmetic.test_sub_n_gt_1_offsetsc                 C   s  dD ]}t d|d}t d|d}|td |ks6ttd| |ksLttdtdt tddt	dfD ]L}d	}t
jt|d
 ||  W 5 Q R X t
jt|d
 ||  W 5 Q R X qvqdD ]
}t d|d}t d|d}|td |ksttd| |kstt d|d}|td |ks:ttd| |ksRtdddg}tdtdt tddt	dfD ]J}t
jt|d
 ||  W 5 Q R X t
jt|d
 ||  W 5 Q R X qqdD ]}t d|d}t d|d}|td |ksttd| |ks*tt d|d}|td |ksNttd| |ksftt d|d}|tdd |ksttdd| |kstt d|d}|tdd |ksttdd| |kstt d|d}|t	d |kstt	d| |kstt d|d}|t	dd |ksBtt	dd| |ksZtdddg}tdtdt td d!t	d"dfD ]J}t
jt|d
 ||  W 5 Q R X t
jt|d
 ||  W 5 Q R X qqd#D ]}t d$|d}t d%|d}|td |ksttd| |ks6tt d&|d}|td' |ksZttd'| |ksrtd(}t d&|d}|td'd! |ksttd'd!| |kstt d)|d}|td*d |ksttd*d| |kstt d+|d}|t	d,d- |kstt	d,d-| |ks2tt d.|d}|t	d d/d0 |ksXtt	d d/d0| |ksrtdddg}tdtdt td1dt	d"d2d3fD ]J}t
jt|d
 ||  W 5 Q R X t
jt|d
 ||  W 5 Q R X qqd S )4Nr'   r   Z3ArO  r   Z2013rk   r0   m  r   z<Input has different freq|Input cannot be converted to Periodr   r%   rv   r   2011-03z2011-05z2012-03ri   rV  Input has different freq#Input cannot be converted to Periodr   Z2Drl   r   z
2011-04-06   
2011-04-02r   
2011-04-03Q r   
2011-03-30r   0   hoursr   h   r|   r-  r   2011-04-01 09:00z2011-04-03 09:00z2011-04-01 12:00r/   zcannot use operands with typesz2011-04-01 10:00  z2011-04-01 11:00x   minutesz2011-04-05 12:00   r   r    r   r|  r  )r   r   rn   rB   	YearBegin
MonthBeginr   re   rM  r   r   r   r   rm   rW  ro   r   )r   r   rx   rz   or    r!   r!   r"   test_add_offset*  s    







zTestArithmetic.test_add_offsetc                 C   s  d ddg}dD ]}td|d}|td td|dks@ttdtd	t t	d
dt
d
fD ]&}tjt|d ||  W 5 Q R X qjqdD ]}td|d}|td td|dkst|td td|dksttdtd	t t	d
dt
d
fD ](}tjt|d ||  W 5 Q R X qqdD ]*}td|d}|td td|dkspt|td td|dkst|t	dd td|dkst|t	dd td|dkst|t
d td|dkst|t
dd td|dksttdtd	t t	dd t
d!dfD ](}tjt|d ||  W 5 Q R X q>q>d"D ]0}td#|d}|td td$|dkst|td% td&|dkst|t	d%d  td&|dkst|t	d'd td(|dkst|t
d)d* td+|dks&t|t
dd,d- td.|dksHttdtd	t t	d/dt
d!d0d1fD ](}tjt|d ||  W 5 Q R X qvqpd S )2NrV  rr  rs  rn  rO  r   rk   Z2009r0   ro  r   r   rp  rq  r   ri   z2010-03rt  r   ru  z
2011-03-27r   z
2011-03-31ry  rx  r   r   rw  rz  r{  r   r}  r~  r  r  z2011-03-30 09:00r/   z2011-04-01 06:00r  z2011-04-01 08:00r  r  z2011-04-01 07:00r  r  z2011-03-28 06:00r  r   r  )rW  r   r   rn   rB   r  r  r   re   rM  r   r   r   r   rm   ro   r   )r   r    r   rx   r  r!   r!   r"   test_sub_offset  s    


  "" 

  "   

zTestArithmetic.test_sub_offsetr   r%   rv   r   c                 C   sP   t d|d}t| tkst|t tks,tt| tks<t|t tksLtd S )Nr   r   r   r   r!   r!   r"   test_period_addsub_nat  s
    z%TestArithmetic.test_period_addsub_natc              	   C   s   t ddd}|t  }t ddd}||ks0t|td }t ddd}||ksVtd}tjt|d |td  W 5 Q R X tjt|d |td  W 5 Q R X d S )	Nr   r   r   rv  rk   ry  z-Input cannot be converted to Period\(freq=D\)r   )r   r   ro   rB   r   r   r   r   )r   rx   ry   rz   r    r!   r!   r"   test_period_ops_offset  s    z%TestArithmetic.test_period_ops_offset)r   r   r   r   r   r   rN  rQ  rT  rU  rX  Zboxesra  rc  rf  rk  r   rn   rp   rm   ZWeekrm  r  r  r  r  r!   r!   r!   r"   rJ    s>   
	

	 Q
rJ  c               	   C   sZ   d} t d}tjt| d d|_W 5 Q R X |j}tjt| d d| |_W 5 Q R X d S )Nznot writableZ2014Q1r   rd  rk   )r   r   r   AttributeErrorr?   r   )r    rO   r   r!   r!   r"   test_period_immutable*  s    r  c                  C   s*   t dd} | jdkst| jdks&td S )Nz
0001-01-07r   r0   r   )r   r2   rB   r4   )rS  r!   r!   r"   test_small_year_parsing7  s    
r  c                  C   s   dddddddg} t ddd	}| D ]}t|| q"| D ]&}t d|d	}t| |jd
ks:tq:t ddd	}t| t ddd	}t| d S )Nr'   r%   r*   r   r|   r}   r~   r   r`   r   rT   r   )r   r   rX   r2   rB   )r  r   r   r!   r!   r"   test_negone_ordinals=  s    r  c               	   C   s.   d} t jt| d tddd W 5 Q R X d S )Nz3Invalid frequency: <WeekOfMonth: week=0, weekday=0>r   z
2012-01-02zWOM-1MONr   )r   r   r   r   )r    r!   r!   r"   $test_invalid_frequency_error_messageO  s    r  ),r   r   r   Znumpyre   r   r   Zpandas._libs.tslibsr   r   r4  Zpandas._libs.tslibs.ccalendarr   r   Zpandas._libs.tslibs.np_datetimer	   Zpandas._libs.tslibs.parsingr
   Zpandas._libs.tslibs.periodr   r   Zpandas._libs.tslibs.timezonesr   r   Zpandasr\  r   r   r   r   r   Zpandas._testingZ_testingr   r   r   r   r3  r7  rJ  r  r  r  r  r!   r!   r!   r"   <module>   s@        X  9_   