U
    >vf                     @   s  d dl mZm Z m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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)NaTPeriod	Timedelta	Timestampoffsetsc                   @   sj  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d$d% Zejd&d'd(d)d*gd+d, Zd-d. Zd/d0 Zd1d2 Zejdd3d4d5gejd6d7d8d9d:gejd;d<d=d>d?d@dAdBdCgdDdE Zejd6edFdGdH ZdIS )J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-vdrwu74i/pandas/tests/scalar/period/test_period.pytest_from_td64nat_raises%   s    
z/TestPeriodConstruction.test_from_td64nat_raisesc              	   C   s  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}t t dd}t t }||kst||kstt ddd}t ddd}||ks,tt ddddd}t ddd}||ksVtt ddddd}||ksttt d}t tddddddddd}||kstt ddd}||kstt d}t tddddddddd}||kstt ddd}||kst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qr   1982minZMIN        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)Minr.   )
r   AssertionErrornowr   r   Dayr   r   r   	TypeError)r   i1i2i3i4i5expectedr   r   r   r    test_construction0   s`    


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_timestampr@   Zasm8)r   tsperrtZdt64per2Zrt2r   r   r    &test_construction_from_timestamp_nanosv   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-   
   r/   )r   asfreqr@   )r   rD   rE   rF   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,   r.   r(   r0   quarterr   r"   r   r-   z9/1/2005Z2005Q1Z2005q1Z05Q1Z05q1Z1Q2005Z1q2005Z1Q05Z1q05Z4Q1984i  Z4q1984)r   r@   r0   )r   rD   rE   rF   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  r5   r.   
2007-01-012007-01-01 00:00:002007-01-01 00:00:00.000)r   r@   r0   r   r   np
datetime64r   rI   rD   rE   rF   rG   rH   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%   rR   rS   r   r,   r.      )startingMonthrY   r(      r-   r/   rU   rV   z
2005-03-013DZ3Br<   r_   r`   r5   r^   ra   rb   rc   r4   r6   r   r7   r8   r9   r:   r;   )r   r   MonthEndr@   YearEndZBusinessDayrB   
QuarterEndZBDayr0   r   r   rd   re   rf   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 bothrj   r.   )r=   valuer   z%If value is None, freq cannot be None)r1   z1^Given date string "-2000" not likely a datetime$z-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   rA   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   r5   r.   )r0   r1   r   ra   r   r%   2007)r   r@   r   )r   rI   presultexpr   r   r    test_constructor_corner9  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 )Nra   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.123r8   z2007-01-01 07:10:15.123000r;   z2007-01-01 07:10:15.123400)r   r   r@   r   rv   r   r   r    test_constructor_infer_freqE  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-DECrj   r.   )r   r=   r@   freqstrr   r   rm   )r   Zresult1Zresult2r   r   r    test_multiples]  s    z%TestPeriodConstruction.test_multiplesr1   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howrk   )r   strr@   rL   r   r1   r   rx   Zstamprv   r   r   r    test_period_cons_quarterlyk  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      )daysr.   )r   rL   r   r@   
isinstancer   r   r   r    test_period_cons_annualy  s    
z.TestPeriodConstruction.test_period_cons_annualr2   numrV      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   rW   r@   r   )r   r   r2   Zdaystrr   rw   rI   r   r   r    test_period_cons_weekly  s    

z.TestPeriodConstruction.test_period_cons_weeklyc              	   C   sZ   t d}|jjdkstt d}|jjdks0td}tjt|d t d W 5 Q R X d S )Nz2017-01-23/2017-01-29W-SUNz2017-01-24/2017-01-30zW-MONz%Could not parse as weekly-freq Periodr   z2016-01-23/2017-01-29)r   r   r   r@   r   r   r   )r   rN   r   r   r   r    test_parse_week_str_roundstrip  s    z5TestPeriodConstruction.test_parse_week_str_roundstripc                 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=   r@   r   r   rv   resr   r   r    test_period_from_ordinal  s    z/TestPeriodConstruction.test_period_from_ordinalr   r%   r#   r   rz   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   r@   r   r   rN   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natr   r   r   rk   1D1Hr   )r   r   r@   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-   r.   z;Frequency must be positive, because it represents span: -3Mr   z-3Mz:Frequency must be positive, because it represents span: 0MZ0M)
r   r=   r@   r   r   rl   r   r   r   r   )r   p1p2rw   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   1H1Drz   r.   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=   r@   r   r   Hourr   r   r   r   )r   rv   r   r   Zp3rw   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
.000000001r.   )z
.000000999  )z
.123456789i  )z
.999999999r   )z
.999999000r   )z.999999001123r.   )z.999999001123456r.   )z.999999001123456789r.   c                 C   s    t || | jj|kstd S N)r   
start_time
nanosecondr@   )r   r2   r   Z	sec_floatrI   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   r@   )r   r   rv   r   r   r    test_period_large_ordinal:  s    z0TestPeriodConstruction.test_period_large_ordinalN)__name__
__module____qualname__r!   rJ   rQ   rX   r\   rg   ro   rs   ry   r~   r   r   markparametrizer   r   r   r   ranger   r   r   r   r   r   r   r   r   r   r   r   r    r   $   sT   F#E


	

Gr   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
ddddddddddg	ej	
ddddgdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZdS )%TestPeriodMethodsc                 C   s"   t d}t|}||kstd S )NZ2000Q1)r   tmZround_trip_pickler@   )r   rv   Znew_pr   r   r    test_round_tripC  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   rt   2011-02)hashr   r@   )r   r   r   r    	test_hashH  s    $$$zTestPeriodMethods.test_hashc                 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-01r.   rK   Er   
2011-04-01)r   rL   r   r@   r   )r   rv   rI   r   r   r    test_to_timestamp_multT  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   rk   r   er   ZFINIsHr(   r#   WrS   rz   r?   c                 S   s2   | j dkr| jtddd S t| | j  jjd S )NrS   r.   r   )r   nanoseconds)r   r   r   r   _value)rv   r   r   r    _exp  s    
z0TestPeriodMethods.test_to_timestamp.<locals>._exZ1985i  r.   rK   3Hr{   Z2Ti  startZ5S)	r   rL   r@   Z	to_periodr   end_timer   r   r   )r   rv   start_tsaliasesr&   Zend_tsZfrom_lstr   Zfcoderw   rI   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-05rS   r   r   
1990-01-06r.   r   )r   rL   r   r   r@   r   rN   rw   rI   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.000001r.   )z1970-01-01 00:00:00.00001rV   )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usrK   c                 C   s"   t |j|dj}||kstd S )Nr   )r   rL   microsecondr@   )r   rM   rI   r   rw   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   reprr@   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   r@   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   strftimer@   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   B  s2   ?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
e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   rz   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_yearr@   r   bool)r   r   rv   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   r0   r@   rZ   r   r1   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*   r?   r   r{   )r   r   r   Minuter@   r   )r   rD   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Mthr1   ZmonthlyZBUSZBUSINESSZ
BUSINESSLYZWEEKDAYZbusZDAYZDLYZDAILYrB   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#   rS   r   rz   r{   r|   r8   r;   Nr   z2016-03-01 09:00r   r.   r_   )r   itemsr   r   r   r   r   r@   )r   Zcasesr   rx   freqsr   r   r   r   r   r    test_period_deprecated_freq  s*    
z0TestPeriodProperties.test_period_deprecated_freqc              	   C   s&   t | j| j| j| j| j| j| ddS )Nr   )r0   r1   r2   r   r   r   r   )r   r0   r1   r2   r   r   r   )boundoffsetr   r   r    _period_constructor  s    z(TestPeriodProperties._period_constructorzbound, offsetr   r.   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_time(  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   r.   )unit)r   r   rL   roundr   r@   r   floor)r   r   r   r   r   rI   r   r   r    $test_inner_bounds_start_and_end_time0  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   rz   r{   r|   rU   r.   2012r   rS   rj   r   i  rh      )r   r   r   r@   )r   Zfreq_lstxpfrv   r   r   r    test_start_time:  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|  djd S NrK   r.   r   r   Zas_unitr   argsr   r   r    r   F  s    z/TestPeriodProperties.test_end_time.<locals>._ex  r.   r(   rU   r   r#   rj   r   rz   rS   r-   r   Z15D   r   r   r   r   r@   )r   rv   r   r   r   r   r    test_end_timeC  s>    z"TestPeriodProperties.test_end_timec                 C   s2   t dd}|j}tdtdd }||ks.td S )Nr   rS   r   r.   r   )r   r   r   r   r@   r   r   r   r    test_end_time_business_fridayq  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|  djd S r   r   r  r   r   r    r   z  s    z;TestPeriodProperties.test_anchor_week_end_time.<locals>._exz2013-1-1zW-SATr  r.      r  )r   r   rv   r   r   r   r    test_anchor_week_end_timey  s    
z.TestPeriodProperties.test_anchor_week_end_timec                 C   s   t ddd}|jdkstd S )Nr%   r5   )r   r0   )r   r0   r@   )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   r5   r.   )r   r0   rZ   zQ-JANzQ-JUNr-   )r   r   Zqyearr@   rZ   )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#   r5   r.   )r   r0   r1   r   r-   r   r  rj      r6   rV   rh   )r   r   r0   r@   rZ   r1   )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   r5   r.   r  r   r0   r1   r2   4      rU   rj      )r   r0   r@   rZ   r1   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   r5   r.   r  r  r  r  rU   rj   r  r   ZWK)r   r0   r@   rZ   r1   r  r  r   r   r   r   )r   r  rx   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 )NrS   r5   r.   r  r   r  rU   rj   r  r   )	r   r0   r@   rZ   r1   r2   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 )Nrz   r5   r.   r   )r   r0   r1   r2   r   2Hr  rU   rj   r  )
r   r0   r@   rZ   r1   r2   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 )Nr?   r5   r.   r   )r   r0   r1   r2   r   r   r  r   rU   rj   r  )
r   rZ   r@   r1   r2   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 )
Nr?   r5   r.   r   )r   r0   r1   r2   r   r   r   r  rU   rj   r  )r   r0   r@   rZ   r1   r2   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   staticmethodr   r   r+   maxr   r   r   r  r  r	  r
  r  r  r  r  r  r  r  r  r   r   r   r    r     s6   

	.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   r.   r   )r   r   r   	libperiodZget_period_field_arrrd   emptyrr   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   r%  r   r   r   r    r"    s   r"  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   r@   )r   leftrightr   r   r    ,test_comparison_same_period_different_object  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-02r(  )r   janfebr   r   r    test_comparison_same_freq$  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   r@   r   r   r   )r   r-  r2   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#   r.   z'(Period|int)'z#not supported between instances of z and r   )r   r@   r   r   rC   )r   r-  Z
int_or_perr   r)  r*  r   r   r    test_comparison_invalid_type?  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   sortedr@   )r   r-  r.  marZperiodsZcorrectPeriodsr   r   r    test_sort_periodsQ  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   r@   )r   rv   tr)  r*  r   r   r    test_period_cmp_natY  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 r'  r(  )r   Zzerodim_arrrI   rv   r   r   r    !test_comparison_numpy_zerodim_arrk  s    
z7TestPeriodComparisons.test_comparison_numpy_zerodim_arrN)r   r   r   r+  r/  r0  r1  r4  r6  r   r   r   rd   arrayr   r7  r   r   r   r    r&    s    r&  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   rK   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   rd   timedelta64r   r@   r   r   rC   )r   r   rN   r   r   r   r    test_add_sub_td64_natw  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   ru   r   z4Input has different freq=M from Period\(freq=A-DEC\)r   r]   r#   r   r   r@   r   r   r   )r   r)  r*  rw   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     r.   r  rj   r(  )r   per1rP   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   rA  r.   r  rj   |zunsupported operand type\(s\)zcan only concatenate strzmust be str, not Periodr   r   )r   joinr   r   rC   )r   rB  rP   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SeriesrH  r   r   r    rI    rJ  c                 C   s   t | gS r   )rK  IndexrH  r   r   r    rI    rJ  identityrL  rM  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   rE  z
cannot addr;  zcan only operate on azincompatible typezufunc add cannot use operandsr   )r   r   rF  r   r   rC   )r   rQ  rO  rM   rN   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#   r?  )r   rB  rP   offr   r   r   r    test_sub  s    zTestArithmetic.test_subnr.   rj   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   baser@   )r   Ztick_classesrV  r   r   rI   r   r   r    test_sub_n_gt_1_ticks  s     z$TestArithmetic.test_sub_n_gt_1_ticks	normalizeTFzoffset, kwd_namer1   ri   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-   rW  rX  r   )r   r   rY  r@   )r   r   Zkwd_namerV  r[  kwdsZp1_dZp2_dr   r   rI   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3Ar>  r   Z2013rj   r.   m  r   z<Input has different freq|Input cannot be converted to Periodr   r#   rt   r   2011-03z2011-05z2012-03rh   rE  Input has different freq#Input cannot be converted to Periodr   Z2Drk   r   z
2011-04-06   
2011-04-02r   
2011-04-03Q r   
2011-03-30r   0   hoursr   h   rz   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   rt    r   rl  rt  )r   r   rm   r@   	YearBegin
MonthBeginr   rd   r<  r   r   r   r   rl   rF  rB   r   )r   r   rv   rx   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 )2NrE  rb  rc  r^  r>  r   rj   Z2009r.   r_  r   r   r`  ra  r   rh   z2010-03rd  r   re  z
2011-03-27r   z
2011-03-31ri  rh  r   r   rg  rj  rk  r   rm  rn  ro  rp  z2011-03-30 09:00r-   z2011-04-01 06:00rq  z2011-04-01 08:00rr  rs  z2011-04-01 07:00ru  rv  z2011-03-28 06:00rw  r   rx  )rF  r   r   rm   r@   ry  rz  r   rd   r<  r   r   r   r   rl   rB   r   )r   r   r   rv   r{  r   r   r    test_sub_offset  s    


  "" 

  "   

zTestArithmetic.test_sub_offsetr   r#   rt   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   rf  rj   ri  z-Input cannot be converted to Period\(freq=D\)r   )r   r   rB   r@   r   r   r   r   )r   rv   rw   rx   r   r   r   r    test_period_ops_offset  s    z%TestArithmetic.test_period_ops_offset)r   r   r   r   r   r   r=  r@  rC  rD  rG  ZboxesrP  rR  rU  rZ  r   rm   rn   rl   ZWeekr]  r|  r}  r~  r  r   r   r   r    r9  v  s>   
	

	 Q
r9  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   rS  rj   )r   r   r   AttributeErrorr=   r   )r   rN   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   r.   r  )r   r0   r@   r2   )rB  r   r   r    test_small_year_parsing  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   rz   r{   r|   r   r_   r   rS   r   )r   r   rW   r0   r@   )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_message  s    r  )(r   r   r   Znumpyrd   r   Zpandas._libs.tslibsr   r   r#  Zpandas._libs.tslibs.ccalendarr   r   Zpandas._libs.tslibs.np_datetimer	   Zpandas._libs.tslibs.parsingr
   Zpandas._libs.tslibs.periodr   r   ZpandasrK  r   r   r   r   r   Zpandas._testingZ_testingr   r   r   r   r"  r&  r9  r  r  r  r  r   r   r   r    <module>   s<       "   :^   