o
    ҷh*                     @   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 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%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offsetsz#Period with BDay freq is deprecatedc                   @   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	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(g d)d*d+ Zd,d- Zd.d/ Zd0d1 Zejdg d2ejd3g d4ejd5g d6d7d8 Zejd3ed9d:d; Zd<S )=TestPeriodConstructionc                 C   s   d}t jt|d tddd W d    n1 sw   Y  t jt|d tdt d W d    d S 1 s:w   Y  d S )Nz;CustomBusinessDay cannot be used with Period or PeriodDtypematchz
2023-04-10Cfreq)pytestraises	TypeErrorr   r   CustomBusinessDayselfmsg r   Y/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/scalar/period/test_period.py$test_custom_business_day_freq_raises'   s   "z;TestPeriodConstruction.test_custom_business_day_freq_raisesc                 C   s   t d}d}tjt|d t| W d    n1 sw   Y  tjt|d t|dd W d    d S 1 s;w   Y  d S )Nzm8[ns]2Value must be Period, string, integer, or datetimer   Dr   )r   to_numpyr   r   
ValueErrorr   )r   tdr   r   r   r    test_from_td64nat_raises/   s   

"z/TestPeriodConstruction.test_from_td64nat_raisesc              	   C   s  t ddd}t d}||ksJ t ddd}t d}t ddd}||ks&J ||ks,J t ddd}t ddd}||ks>J ||ksDJ t jd	d}t t d	d}t d
}||ks]J ||kscJ t jdd}t t dd}t t }||ks~J ||ksJ t ddd}t ddd}||ksJ t ddddd}t ddd}||ksJ t ddddd}||ksJ t d}t tddddddddd}||ksJ t ddd}||ksJ t d}t tddddddddd}||ksJ t ddd}||ksJ d}tjt|d t d d! W d    n	1 sw   Y  d"}tjt|d t d#d$d W d    n	1 s;w   Y  tjtd%d t dd&d W d    d S 1 sZw   Y  d S )'N1/1/2005Mr   zJan 20052005AamQqr#   1982min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)Minr5   )	r   nowr   r   Dayr   r   r%   r   )r   i1i2i3i4i5expectedr   r   r   r    test_construction:   sf   
$z(TestPeriodConstruction.test_constructionc                 C   sT   t d}t|dd}| }||ksJ |j}t|dd}| }|j|ks(J d S )Nz2022-04-20 09:23:24.123456789nsr   )r   r   to_timestampasm8)r   tsperrtdt64per2rt2r   r   r    &test_construction_from_timestamp_nanos   s   z=TestPeriodConstruction.test_construction_from_timestamp_nanosc                 C   s   t jttd\ tddd}tddd}||dksJ tddd}||dks,J tddd}||dks;J tddd}||ksGJ td	d
ddd}tddd}||ks[J W d    d S 1 sfw   Y  d S )Nr   3/10/12Br   r#   z3/11/12z3/12/12b  r4   
   r6   )tmassert_produces_warningFutureWarningbday_msgr   asfreq)r   rI   rJ   rK   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J t dddd}t ddd}||ks&J t d	}t dddd}t d
}||ks;J ||ksAJ t d}||ksKJ t d}||ksUJ t d}||ks_J t d}||ksiJ t d}||kssJ t d}||ks}J t d}|jdksJ t d}||ksJ d S )Nr3   r5   r.   r7   quarterr   r(   r   r4   z9/1/20052005Q12005q105Q105q11Q20051q20051Q051q054Q1984i  4q1984r   r7   )r   rI   rJ   rK   lowerr   r   r    test_construction_quarter   s6   z0TestPeriodConstruction.test_construction_quarterc                 C   s   t ddd}t ddd}||ksJ t ddd}||ksJ t ddd}||ks*J t ddd}|jdks7J t tdd	d	dd}t ddd}||ksMJ 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s|J ||ksJ ||ksJ ||ksJ d S )N2007-01r)   r   200701rC   rD   r   I  r<   r5   
2007-01-012007-01-01 00:00:002007-01-01 00:00:00.000)r   r7   r   r   np
datetime64r   rN   rI   rJ   rK   rL   rM   r   r   r    test_construction_month   s*   z.TestPeriodConstruction.test_construction_monthc              	   C   s  t dt dt dddksJ t dt dt dddks J t dt dt dddks0J tjttd t dt dt dddksHJ W d    n1 sRw   Y  t dt	 dt dd	dksgJ t d
dtj
dddt d
dddks{J t d
dtj
dddt d
dddksJ t d
ddt	 dt d
ddd	dksJ tjttd t dddt dt dddddksJ W d    n1 sw   Y  t ddd}t d
ddt	dd|ksJ t d
dddd|ksJ tjttd t dddtddt dddddksJ W d    n	1 sw   Y  t dt dt dddks.J t dt d}t ddd}||ksCJ |jdksKJ |jdksSJ t tddddd}t ddd}||ksjJ 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sJ ||ksJ ||ksJ ||ksJ t d }t tdddd!d"d"d#d$d}||ksJ t d d$d}||ksJ t d%}t tdddd!d"d"d&d'd}||ksJ t d%d'd}||ksJ d S )(Nr(   r   r)   r*   r+   r   rZ   r[   r#   r3   r5      )startingMonthre   r.      r4   r6   r]   r^   z
2005-03-013D3BrC   rv   rw   r<   ru   rx   ry   rz   r;   r=   r   r>   r?   r@   rA   rB   )r   r   MonthEndYearEndr_   r`   ra   rb   BusinessDayrH   
QuarterEndBDayr7   r   r   r{   r|   r}   r   r   r    test_period_constructor_offsets   s      "z6TestPeriodConstruction.test_period_constructor_offsetsc                 C   s0  d}t jt|d tt  W d    n1 sw   Y  t jt|d tt   W d    n1 s9w   Y  d}t jt|d tddd W d    n1 sXw   Y  d}t jt|d tddd W d    n1 sww   Y  d	}t jt|d td
ddd W d    n1 sw   Y  d}t jt|d tdd W d    n1 sw   Y  d}t jt|d tdd W d    n1 sw   Y  d}t jt|d tdd W d    n1 sw   Y  d}t jt|d tdd W d    d S 1 sw   Y  d S )Nz#Must supply freq for datetime valuer   r"   g?r#   r   zOrdinal must be an integerrv   z?Only value or ordinal but not both should be given but not bothr   r5   )rD   valuer   z%If value is None, freq cannot be None)r8   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   rG   r   r
   r   r   r   r    test_invalid_arguments*  sF   $z-TestPeriodConstruction.test_invalid_argumentsc                 C   sf   t ddd}t dddd|ksJ t d tu sJ t ddd}t |d	d}t d
d	d}||ks1J d S )Nrt   2Mr   r<   r5   )r7   r8   r   rx   r#   r+   2007r   r   )r   rN   presultexpr   r   r    test_constructor_cornerI  s   z.TestPeriodConstruction.test_constructor_cornerc                 C   s   t d}|jdksJ t d}|jdksJ t d}|jdks!J t d}|jdks,J t d	}|jd
ks7J t d}|jdksBJ t d}|jdksMJ d S )Nrx   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.123000rB   z2007-01-01 07:10:15.123400)r   r   r   r   r   r   r    test_constructor_infer_freqU  s   z2TestPeriodConstruction.test_constructor_infer_freqc                 C   s   t ddd}t ddd}|j|jksJ |jdksJ |jdks"J |jtdks,J |jt ks5J |d j|jd ksAJ d| j|jd ksMJ |d j|jd ksYJ d	| j|jd kseJ d S )
N19892Ar   r+   z2A-DECA-DECr   r5   )r   rD   freqstrr   r   r   )r   result1result2r   r   r    test_multiplesm  s   z%TestPeriodConstruction.test_multiplesr8   c                 C   sv   d| }t d|d}dt|v sJ |jddd}t ||d}||ks&J |jddd}t ||d}||ks9J d S )NzQ-1989Q3r   r#   endhowr   )r   strrQ   r   r8   r   r   stampr   r   r   r    test_period_cons_quarterly{  s   
z1TestPeriodConstruction.test_period_cons_quarterlyc                 C   s\   d| }t d|d}|jdddtdd }t ||d}||d	 ks%J t|t s,J d S )
NzA-r   r   r#   r   r      )daysr5   )r   rQ   r   
isinstancer   r   r   r    test_period_cons_annual  s   
z.TestPeriodConstruction.test_period_cons_annualr9   numr^      c                 C   sP   d| }d| }t ||d}t |dd|}||ksJ t|t s&J d S )Nz2011-02-zW-r   r#   )r   rc   r   )r   r   r9   daystrr   r   rN   r   r   r    test_period_cons_weekly  s   

z.TestPeriodConstruction.test_period_cons_weeklyc                 C   sp   t d}|jjdksJ t d}|jjdksJ d}tjt|d t d W d    d S 1 s1w   Y  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   rT   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J t|t sJ d S N2011-01r)   r   )r   _from_ordinalrD   r   r   r   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u sJ t dd| d}|tu sJ t dd| d}|tu s(J d S )Nr   r   23r   r   r   rT   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u sJ t tdd}|tu sJ t tdd}|tu s$J t tdd}|tu s0J t d}|tu s:J t t}|tu sDJ d S )Nnatr   r   r#   r   1D1Hr   )r   r   r   r   r   r   r    test_period_cons_nat  s   z+TestPeriodConstruction.test_period_cons_natc                 C   s`  t ddd}t ddd}|j|jksJ |jtdksJ |jdks%J |jt ks.J |jdks5J |d }|j|d jksCJ |j|jksKJ |jdksRJ |d }|j|d jks`J |j|jkshJ |jdksoJ d}tjt|d t dd	d W d    n1 sw   Y  d
}tjt|d t ddd W d    d S 1 sw   Y  d S )Nr   3Mr   r)   r4   r5   z;Frequency must be positive, because it represents span: -3Mr   z-3Mz:Frequency must be positive, because it represents span: 0M0M)	r   rD   r   r   r   r   r   r   r%   )r   p1p2r   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s1J |j|jks9J |jtdksCJ |jd	ksJJ |jtdksTJ |jd	ks[J |jt ksdJ |jdkskJ |d }|j|d jksyJ |j|jksJ |jd	ksJ |d }|j|d jksJ |j|jksJ |jd	ksJ |d }|j|d jksJ |j|jksJ |jd	ksJ |d }|j|d jksJ |j|jksJ |jd	ksJ q$d
}tjt|d t ddd W d    n1 sw   Y  tjt|d t ddd W d    n	1 sw   Y  tjt|d t ddd W d    n	1 s6w   Y  tjt|d t ddd W d    n	1 sTw   Y  d}tjt|d t ddd W d    n	1 stw   Y  tjt|d t ddd W d    n	1 sw   Y  d}tjt|d t ddd W d    n	1 sw   Y  d}tjt|d t ddd W d    d S 1 sw   Y  d S )Nr   r   r   1H1Dr   r5   rv      25Hz<Frequency must be positive, because it represents span: -25Hr   z-1D1Hz-1H1Dz:Frequency must be positive, because it represents span: 0D0D0HzInvalid frequency: 1W1D1W1DzInvalid frequency: 1D1W1D1W)	r   rD   r   r   Hourr   r   r   r%   )r   r   r   r   p3r   r   r   r   r    test_period_cons_combined  s|   





$z0TestPeriodConstruction.test_period_cons_combined)z1970/01/01 z2020-12-31 z1981/09/13 hour)z00:00:00z00:00:01z23:59:59z12:00:59zsec_float, expected))z
.000000001r5   )z
.000000999  )z
.123456789i  )z
.999999999r   )z
.999999000r   )z.999999001123r5   )z.999999001123456r5   )z.999999001123456789r5   c                 C   s    t || | jj|ksJ d S N)r   
start_time
nanosecond)r   r9   r   	sec_floatrN   r   r   r    "test_period_constructor_nanosecond5  s    z9TestPeriodConstruction.test_period_constructor_nanosecond   c                 C   s"   t d| dd}|j|ksJ d S )Ni ' 1Hrv   )r   r   )r   r   r   r   r   r    test_period_large_ordinalJ  s   z0TestPeriodConstruction.test_period_large_ordinalN) __name__
__module____qualname__r!   r'   rO   rY   rd   rs   r~   r   r   r   r   r   r   markparametrizer   r   r   r   ranger   r   r   r   r   r   r   r   r   r   r   r   r    r   &   sH    H#H


	

Gr   c                   @   s   e Zd Zdd Zdd Zdd Zejddd	 Z	d
d Z
ejdg dejdg ddd Zejddejddd Zdd Zdd ZdS )TestPeriodMethodsc                 C   s"   t d}t|}||ksJ d S )N2000Q1)r   r_   round_trip_pickle)r   r   new_pr   r   r    test_round_tripS  s   
z!TestPeriodMethods.test_round_tripc                 C   s   t tdddt tdddksJ t tdddt tdddks$J t tdddt tdddks6J t tdddt tdddksHJ d S )	Nr   r)   r   
2011-01-01r#   r   r   2011-02)hashr   )r   r   r   r    	test_hashX  s   $$$(zTestPeriodMethods.test_hashc                 C   s   t ddd}|jddtdksJ tdtdd	 }|jd
d|ks%J t ddd}|jddtdks7J tdtdd	 }|jd
d|ksJJ d S )Nr   r)   r   r   r   r   z
2011-02-01r5   rP   Er   
2011-04-01)r   rQ   r   r   )r   r   rN   r   r   r    test_to_timestamp_multd  s   z(TestPeriodMethods.test_to_timestamp_mult8ignore:Period with BDay freq is deprecated:FutureWarningc                 C   sp  t ddd}|jdd}g d}|D ]}||jd|dksJ ||jd|dks*J q|jd	d}g d
}|D ]}||jd|dksDJ ||jd|dksOJ q7g d}dd }|D ])}t d|d}| |}	|	|ksoJ |j|jddkszJ |j||ksJ qZt ddd}|jddd}	tdddtdd }
|	|
ksJ |jddd}	|	|
ksJ |jddd}	tdddtdd }
|	|
ksJ |jddd}	|	|
ksJ |jdd}	tdddtdd }
|	|
ksJ tddd}
|jddd}	|	|
ksJ |jddd}	|	|
ksJ |jddd}	|	|
ksJ |jddd}	|	|
ks(J |jddd}	|	|
ks6J d S )Nr0   r+   r   r   r   )sStarTBEGInr#   r   r   )er   FINIsH)	r+   r.   r)   Wr[   r#   r   rF   r   c                 S   s2   | j dkr| jtddd S t| | j  jjd S )Nr[   r5   r   )r   nanoseconds)r   r   r   r   _value)r   r   r   r    _ex  s   
z0TestPeriodMethods.test_to_timestamp.<locals>._ex1985r   r   i  r5   rP   3Hr   2Ti  start5S)r   rQ   	to_periodr   end_timer   r   r   )r   r   start_tsaliasesr,   end_tsfrom_lstr   fcoder   rN   r   r   r    test_to_timestampo  sX   z#TestPeriodMethods.test_to_timestampc                 C   sh   t jttd tdd}|jddd}W d    n1 sw   Y  tdtdd }||ks2J d S )	Nr   
1990-01-05r[   r   r   
1990-01-06r5   r   )r_   r`   ra   rb   r   rQ   r   r   r   rT   r   rN   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.000001r5   )z1970-01-01 00:00:00.00001r^   )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usrP   c                 C   s"   t |j|dj}||ksJ d S )Nr   )r   rQ   microsecond)r   rS   rN   r   r   r   r   r    test_to_timestamp_microsecond  s   z/TestPeriodMethods.test_to_timestamp_microsecondzstr_ts,freq,str_res,str_freq))zJan-2000N2000-01r)   )
2000-12-15Nr  r#   )2000-12-15 13:45:26.123456789Nr  r  )r  rB   2000-12-15 13:45:26.123456rB   )r  Nr  rB   )r  r?   2000-12-15 13:45:26.123r?   )r  Nr  r?   )2000-12-15 13:45:26r   r  r   )r  r   z2000-12-15 13:45r   )r  r   z2000-12-15 13:00r   )r  Y2000r   )r  r.   2000Q4Q-DEC)r  r)   z2000-12r)   )r  r   z2000-12-11/2000-12-17r   )r  r#   r  r#   )r  r[   r  r[   c                 C   s>   t ||d}t||ksJ t|d| d| dksJ d S )Nr   zPeriod('z', 'z'))r   r   repr)r   str_tsr   str_resstr_freqr   r   r   r    	test_repr  s   "zTestPeriodMethods.test_reprc                 C   s$   t ddd}ttt|v sJ d S )Nr   r)   r   )r   r  r   r   r   r   r    test_repr_nat  s   zTestPeriodMethods.test_repr_natc                 C   s4   t ddd}|d}|dksJ t|tsJ 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    test_strftime  s   
zTestPeriodMethods.test_strftimeN)r   r   r   r   r   r   r   r   filterwarningsr  r  r   r	  r  r  r  r   r   r   r    r   R  s2    
?r   c                   @   s2  e Zd ZdZejdg ddd Zdd Zdd	 Z	ej
d
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-d. Zd/d0 Zd1d2 Zd3S )4TestPeriodPropertiesz5Test properties such as year, month, weekday, etc....r   r   c                 C   sl   t d|d}|jsJ t|jtsJ t d|d}|jrJ t d|d}|js)J t d|d}|jr4J 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   is_leap_yearr   bool)r   r   r   r   r   r    test_is_leap_year  s   


z&TestPeriodProperties.test_is_leap_yearc                 C   s   t ddd}|jdksJ |jdksJ t|t sJ t ddd}|jdks(J |jdks/J t|t s6J t ddd}|jdksCJ |jd	ksJJ t|t sQJ d S )
Nr   r  rv        r4   r)      )r   r7   rf   r   r8   r   r   r   r     test_quarterly_negative_ordinals  s   z5TestPeriodProperties.test_quarterly_negative_ordinalsc                 C   s0   t ddd}|jt ksJ |jdksJ d S )Nr0   rF   r   r   )r   r   r   Minuter   )r   rI   r   r   r    test_freq_str!  s   z"TestPeriodProperties.test_freq_strr   c              
   C   s  g dg dg dg dg dg dg dg dg d	d
	}t }| D ]]\}}|D ]<}tjt|d td|d W d    n1 sDw   Y  tjt|d td|d W d    n1 saw   Y  q*td|d}td|d}t|tszJ t|tsJ q$d S )N)MTHMONTHMONTHLYMthr8   monthly)BUSBUSINESS
BUSINESSLYWEEKDAYbus)DAYDLYDAILYrH   DlyDaily)HRHOURHRLYHOURLYhrr   HRly)minuteMINUTEMINUTELYminutely)secSECSECONDSECONDLYsecond)MILLISECONDMILLISECONDLYmillisecond)MICROSECONDMICROSECONDLYr  )
NANOSECONDNANOSECONDLYr   )	r)   r[   r#   r   r   r   r?   rB   r  r   z2016-03-01 09:00r   r5   rv   )r   itemsr   r   r%   r   r   )r   casesr   r   freqsr   r   r   r   r   r    test_period_deprecated_freq&  s2   z0TestPeriodProperties.test_period_deprecated_freqc              	   C   s&   t | j| j| j| j| j| j| ddS )Nr  )r7   r8   r9   r   r>  rF  r   )r   r7   r8   r9   r   r>  rF  )boundoffsetr   r   r    _period_constructorD  s   z(TestPeriodProperties._period_constructorzbound, offsetr   r5   period_propertyr   r   c                 C   sJ   t ||}tjtdd t|| W d    d S 1 sw   Y  d S )NzOut of bounds nanosecondr   )r  rT  r   r   r	   getattr)r   rR  rS  rU  r   r   r   r    $test_outer_bounds_start_and_end_timeP  s   "z9TestPeriodProperties.test_outer_bounds_start_and_end_timec                 C   sn   t || }| jdd}t||jdd|ksJ ||tddd  d}t||d|ks5J d S )Nr   r   r5   )unit)r  rT  rQ   roundrV  r   floor)r   rR  rS  rU  r   rN   r   r   r    $test_inner_bounds_start_and_end_timeX  s
   z9TestPeriodProperties.test_inner_bounds_start_and_end_timec                 C   s   g d}t ddd}|D ]}td|d}|j|ksJ qtjttd tdddjt dddks3J W d    n1 s=w   Y  tdd	djt d
ddksQJ d S )N)r+   r.   r)   r#   r   r   r   r]   r5   2012r   r   r[   r   r   i  r      )r   r   r   r_   r`   ra   rb   )r   freq_lstxpfr   r   r   r    test_start_timeb  s    "z$TestPeriodProperties.test_start_timec                 C   s  t ddd}dd }|ddd}||jksJ t ddd}|d	d
d}||jks*J t ddd}|d	dd}||jks=J t ddd}|d	dd}||jksPJ t ddd}|d	ddd}||jksdJ tjttd t ddd}|d	dd}||jksJ W d    n1 sw   Y  t ddd}|d	dd}||jksJ t ddd}|d	dd}||jksJ t ddd}|d	ddd}||jksJ t ddd}|d	ddd}||jksJ d S )Nr\  r+   r   c                  W      t t t|  djd S NrP   r5   r   r   as_unitr   argsr   r   r    r   o     z/TestPeriodProperties.test_end_time.<locals>._ex  r5   r.   r]   r#  r)   r   r#   r   r   r[   r4   r   15D   r   r   )r   r   r_   r`   ra   rb   )r   r   r   r_  r   r   r    test_end_timel  sB   z"TestPeriodProperties.test_end_timec                 C   s`   t jttd tdd}|j}W d    n1 sw   Y  tdtdd }||ks.J d S )Nr   r  r[   r  r5   r  )r_   r`   ra   rb   r   r   r   r   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J d S )Nc                  W   rb  rc  rd  rf  r   r   r    r     rh  z;TestPeriodProperties.test_anchor_week_end_time.<locals>._exz2013-1-1zW-SATri  r5      )r   r   )r   r   r   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J d S )Nr+   r<   )r   r7   rq   )r   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s+J || j|d ks6J q qd S )Nr  r<   r5   )r   r7   rf   zQ-JANzQ-JUNr4   )r   r   qyearrf   )r   
qedec_date
qejan_date
qejun_datexqdr   r   r    test_properties_quarterly  s   z.TestPeriodProperties.test_properties_quarterlyc                 C   s   t dddd}tdD ]m}|| }|jdksJ d|d   kr$dkr.n n|jdks-J nAd|d   kr:dkrDn n|jd	ksCJ n+d
|d   krPdkrZn n|jdksYJ nd|d   krfdkron n|jdksoJ |j|d ksxJ qd S )Nr)   r<   r5   )r   r7   r8   r%  r4   r#  rn  r      r=   r^   r   )r   r   r7   rf   r8   )r   m_daterv  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J |jdksJ |jdksJ |jdks$J |d jdks-J |jdks4J t ddd	ddjd
ksAJ d S )Nr   r<   r5   ry  r   r7   r8   r9   4      r]   r      )r   r7   rf   r8   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J |jdksJ |jdksJ |jdks$J |d jdks-J |jdks4J t ddd	dd}|jd
ksCJ t}tjt	|d t ddddd W d    d S 1 s`w   Y  d S )Nr   r<   r5   ry  r}  r~  r  r]   r   r  r   WK)
r   r7   rf   r8   r  r  r   r   r   r%   )r   r  r   r   r   r   r    test_properties_weekly_legacy  s   "z2TestPeriodProperties.test_properties_weekly_legacyc                 C   sx  t jttd tddddd}W d    n1 sw   Y  |jdks&J |jdks-J |jdks4J |jdks;J |j	dksBJ |j
dksIJ |jdksPJ t jttd tddd	ddjd
kseJ W d    n1 sow   Y  tddddd}|jdksJ |jdksJ |jdksJ |jdksJ |j	dksJ |j
dksJ |jdksJ tddd	ddjd
ksJ d S )Nr   r[   r<   r5   r}  r   r  r]   r   r  r#   )r_   r`   ra   rb   r   r7   rf   r8   r9   weekday	dayofyearr  )r   b_date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 ]H}|jdksJ |jdks&J |jdks-J |jdks4J |jdks;J |jdksBJ |jdksIJ |jdksPJ t ddd	dddjd
ks^J qd S )Nr   r<   r5   r   )r   r7   r8   r9   r   2Hr  r]   r   r  )	r   r7   rf   r8   r9   r  r  r   r  )r   h_date1h_date2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J |jdksJ |jdksJ |jdks&J |jdks-J |jdks4J |jdks;J |jdksBJ t ddd	ddddjd
ksQJ d S )NrF   r<   r5   r   )r   r7   r8   r9   r   r>  r  r#   r]   r   r  )	r   rf   r8   r9   r  r  r   r>  r  )r   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J |jdksJ |jdks J |jdks'J |jdks.J |jdks5J |jdks<J |jdksCJ |j	dksJJ |j
dksQJ t ddddddddj
d	ksaJ d S )
NrF   r<   r5   r   )r   r7   r8   r9   r   r>  rF  r  r]   r   r  )r   r7   rf   r8   r9   r  r  r   r>  rF  r  )r   s_dater   r   r    test_properties_secondly&  s&   z-TestPeriodProperties.test_properties_secondlyN) r   r   r   __doc__r   r   r   r!  r&  r(  r  rQ  staticmethodrT  r   r1   maxrW  r[  ra  rl  rm  ro  rq  rx  r|  r  r  r  r  r  r  r   r   r   r    r    s>    



/	r  c                   @   s   e Zd Zdd ZdS )TestPeriodFieldc                 C   sL   d}t jt|d tdtdd W d    d S 1 sw   Y  d S )Nz@Buffer dtype mismatch, expected 'const int64_t' but got 'double'r   r   r5   r   )r   r   r%   	libperiodget_period_field_arrr{   emptyr   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J ||ksJ ||ksJ ||k r"J ||kr(J d S Nr
  r)   r   )r   leftrightr   r   r    ,test_comparison_same_period_different_objectF  s   

zBTestPeriodComparisons.test_comparison_same_period_different_objectc                 C   s`   t dd}t dd}||krJ ||ksJ ||k sJ ||ks"J ||kr(J ||kr.J d S )Nr
  r)   2000-02r  )r   janfebr   r   r    test_comparison_same_freqQ  s   

z/TestPeriodComparisons.test_comparison_same_freqc                 C   s  t dd}t dd}||krJ ||ksJ d}tjt|d ||k  W d    n1 s.w   Y  tjt|d ||k W d    n1 sIw   Y  tjt|d ||k W d    n1 sdw   Y  tjt|d ||k W d    d S 1 sw   Y  d S )Nr
  r)   z
2012-01-01r#   z0Input has different freq=D from Period\(freq=M\)r   )r   r   r   r   )r   r  r9   r   r   r   r    test_comparison_mismatched_freq\  s"   





"z5TestPeriodComparisons.test_comparison_mismatched_freqc              	   C   s,  t dd}|dkrJ |dksJ d}d| d| }|dfd|ffD ]p\}}tjt|d ||k W d    n1 s=w   Y  tjt|d ||k W d    n1 sXw   Y  tjt|d ||k  W d    n1 ssw   Y  tjt|d ||k W d    n1 sw   Y  q#d S )Nr
  r)   r5   z'(Period|int)'z#not supported between instances of z and r   )r   r   r   r   )r   r  
int_or_perr   r  r  r   r   r    test_comparison_invalid_typel  s(   




z2TestPeriodComparisons.test_comparison_invalid_typec                 C   sF   t dd}t dd}t dd}|||g}|||g}t||ks!J d S )Nr
  r)   r  z2000-03)r   sorted)r   r  r  marperiods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 ](\}}||k r"J ||kr(J ||kr.J ||ks4J ||kr:J ||kr@J qd S )Nr   r#   r   )r   r   r   )r   r   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|u sJ ||k|u sJ d S r  r  )r   zerodim_arrrN   r   r   r   r    !test_comparison_numpy_zerodim_arr  s   
z7TestPeriodComparisons.test_comparison_numpy_zerodim_arrN)r   r   r   r  r  r  r  r  r  r   r   r   r{   arrayr   r  r   r   r   r    r  E  s     r  c                
   @   s>  e Zd Zejdg ddd Zdd Zdd Zd	d
 Z	dd Z
dd dd dd gZg dZejjdeedejjdeeddd Zdd Zejdg ddd Zejdddgejdg dejd ejd!fejd"fejd#fejd$fgd%d& Zd'd( Zd)d* Zejd+g d,d-d. Zd/d0 Zd#S )1TestArithmeticrX  )rP   r  msr   r-   c                 C   s   t dd}td|}|| tu sJ || tu sJ || tu s#J tjtdd ||  W d    d S 1 s:w   Y  d S )Nz
2022-06-01r#   r   unsupported operandr   )r   r{   timedelta64r   r   r   r   )r   rX  rT   r   r   r   r    test_add_sub_td64_nat  s   

"z$TestArithmetic.test_add_sub_td64_natc                 C   s|   t dddt ddd}}|| }|d|j ksJ d}tjt|d |t dd	d  W d    d S 1 s7w   Y  d S )
N2011r+   r   r   r#  z4Input has different freq=M from Period\(freq=A-DEC\)r   rt   r)   r   r   r   r   r   )r   r  r  r   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sJ d| |ks J d S )Nr#     r5   r}  r   r  )r   per1rW   r   r   r    test_add_integer  s   zTestArithmetic.test_add_integerc                 C   sP   t ddd}|t tu sJ t| tu sJ |t tu sJ t| tu s&J 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g d}tjt|d |d	  W d    n1 s-w   Y  tjt|d d	|  W d    n1 sHw   Y  tjt|d ||  W d    d S 1 sdw   Y  d S )
Nr#   r  r5   r}  r   |)zunsupported operand type\(s\)zcan only concatenate strzmust be str, not Periodr   r   )r   joinr   r   r   )r   r  rW   r   r   r   r    test_add_invalid  s   


"zTestArithmetic.test_add_invalidc                 C   s   | S r   r   rv  r   r   r    <lambda>  s    zTestArithmetic.<lambda>c                 C      t | gS r   )pdSeriesr  r   r   r    r        c                 C   r  r   )r  Indexr  r   r   r    r    r  )identityr  r  lbox)idsrboxc                 C   s   t d}tddd}dg d}tjt|d ||||  W d    n1 s+w   Y  tjt|d ||||  W d    n1 sJw   Y  tjt|d ||||  W d    d S 1 sjw   Y  d S )N2017r)   r   r  )z
cannot addr  zcan only operate on azincompatible typezufunc add cannot use operandsr   )r   r   r  r   r   r   )r   r  r  rS   rT   r   r   r   r    test_add_timestamp_raises  s   	"z(TestArithmetic.test_add_timestamp_raisesc                 C   s   t ddd}t ddd}|j}|| d| ksJ || d| ks#J d}tjt|d |t d	d
d  W d    d S 1 s@w   Y  d S )Nr   r#   r   z
2011-01-15i   z0Input has different freq=M from Period\(freq=D\)r   r   r)   r  )r   r  rW   offr   r   r   r    test_sub  s   "zTestArithmetic.test_subn)r5   r   r4   r#  c                 C   s\   t d||d}t d||d}t t||jjdt t||jjd }|| |ks,J d S )N19910905r   19920406)r   r   r   base)r   tick_classesr  r   r   rN   r   r   r    test_sub_n_gt_1_ticks  s   z$TestArithmetic.test_sub_n_gt_1_ticks	normalizeTFzoffset, kwd_namer8   r   Nr  c                 C   s   |d ur|dini }d}d}t ||||fi |d}t ||||fi |d}	t ||	jjdt ||jjd }
|	| |
ks@J d S )Nr4   r  r  r   )r   r   r  )r   rS  kwd_namer  r  kwdsp1_dp2_dr   r   rN   r   r   r    test_sub_n_gt_1_offsets  s    z&TestArithmetic.test_sub_n_gt_1_offsetsc              
   C   s  dD ]t}t d|d}t d|d}|td |ksJ td| |ks&J tdtdt tddtdfD ]:}d	}t	j
t|d
 ||  W d    n1 sUw   Y  t	j
t|d
 ||  W d    n1 spw   Y  q;qdD ]}t d|d}t d|d}|td |ksJ td| |ksJ t d|d}|td |ksJ td| |ksJ dddg}tdtdt tddtdfD ]9}t	j
t|d
 ||  W d    n1 sw   Y  t	j
t|d
 ||  W d    n	1 s	w   Y  qqydD ]}t d|d}t d|d}|td |ks-J td| |ks9J t d|d}|td |ksKJ td| |ksWJ t d|d}|tdd |ksjJ tdd| |kswJ t d|d}|tdd |ksJ tdd| |ksJ t d|d}|td |ksJ td| |ksJ t d|d}|tdd |ksJ tdd| |ksJ dddg}tdtdt td d!td"dfD ];}t	j
t|d
 ||  W d    n	1 sw   Y  t	j
t|d
 ||  W d    n	1 s#w   Y  qqd#D ]}t d$|d}t d%|d}|td |ksIJ td| |ksUJ t d&|d}|td' |ksgJ td'| |kssJ d(}t d&|d}|td'd! |ksJ td'd!| |ksJ t d)|d}|td*d |ksJ td*d| |ksJ t d+|d}|td,d- |ksJ td,d-| |ksJ t d.|d}|td d/d0 |ksJ td d/d0| |ksJ dddg}tdtdt td1dtd"d2d3fD ];}t	j
t|d
 ||  W d    n	1 s*w   Y  t	j
t|d
 ||  W d    n	1 sFw   Y  qq.d S )4Nr+   r   3Ar  r   2013r   r5   m  r#   z<Input has different freq|Input cannot be converted to Periodr   r)   r   r   2011-03z2011-05z2012-03r   r  Input has different freq#Input cannot be converted to Periodr#   2Dr   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:00r4   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   r   	YearBegin
MonthBeginr'  r{   r  r   r   r   r   r   r  rH   r   )r   r   r   r   or   r   r   r    test_add_offset(  s   














zTestArithmetic.test_add_offsetc              
   C   s  d ddg}dD ]J}td|d}|td td|dks J tdtd	t td
dt	d
fD ]}t
jt|d ||  W d    n1 sMw   Y  q5q	dD ]Y}td|d}|td td|dksmJ |td td|dks|J tdtd	t td
dt	d
fD ]}t
jt|d ||  W d    n1 sw   Y  qqVdD ]}td|d}|td td|dksJ |td td|dksJ |tdd td|dksJ |tdd td|dksJ |t	d td|dksJ |t	dd td|dksJ tdtd	t tdd t	d!dfD ]}t
jt|d ||  W d    n	1 sFw   Y  q-qd"D ]}td#|d}|td td$|dkshJ |td% td&|dksxJ |td%d  td&|dksJ |td'd td(|dksJ |t	d)d* td+|dksJ |t	dd,d- td.|dksJ tdtd	t td/dt	d!d0d1fD ]}t
jt|d ||  W d    n	1 sw   Y  qҐqPd S )2Nr  r  r  r  r  r   r   2009r5   r  r#   r   r  r  r   r   z2010-03r  r   r  z
2011-03-27r   z
2011-03-31r  r  r   r$  r  r  r  r#  r  r  r  r  z2011-03-30 09:00r4   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  )r  r   r   r   r  r  r'  r{   r  r   r   r   r   r   rH   r   )r   r   r   r   r  r   r   r    test_sub_offset  s   




   


  " 


zTestArithmetic.test_sub_offsetr   r  c                 C   sP   t d|d}t| tu sJ |t tu sJ t| tu sJ |t tu s&J 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sJ |td }t ddd}||ks+J d}tjt|d |td  W d    n1 sFw   Y  tjt|d |td  W d    d S 1 sew   Y  d S )	Nr   r#   r   r  r   r  z-Input cannot be converted to Period\(freq=D\)r   )r   r   rH   r   r   r   r   )r   r   r   r   r   r   r   r    test_period_ops_offset  s   "z%TestArithmetic.test_period_ops_offset)r   r   r   r   r   r   r  r  r  r  r  boxesr  r  r  r  r   r   r   r   Weekr  r   r  r  r  r   r   r   r    r    s@    
	
	 Q
r  c                  C   s   d} t d}tjt| d d|_W d    n1 sw   Y  |j}tjt| d d| |_W d    d S 1 s;w   Y  d S )Nznot writable2014Q1r   r  r   )r   r   r   AttributeErrorrD   r   )r   rT   r   r   r   r    test_period_immutable'  s   "r	  c                  C   s*   t dd} | jdksJ | jdksJ d S )Nz
0001-01-07r#   r5   ry  )r   r7   r9   )r  r   r   r    test_small_year_parsing4  s   
r
  c                  C   s   g d} t ddd}| D ]	}t|| q| D ]}t d|d}t| |jdks+J qtjttd t ddd}W d    n1 sDw   Y  t| t ddd}t| d S )	N)r+   r)   r.   r#   r   r   r   r   r#   rv   r"  r   r[   r   )r   r  rc   r7   r_   r`   ra   rb   )rP  r   r   r   r   r    test_negone_ordinals:  s   r  c                  C   sD   d} t jt| d tddd W d    d S 1 sw   Y  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_messageM  s   "r  ))r   r   r   numpyr{   r   pandas._libs.tslibsr   r   r  pandas._libs.tslibs.ccalendarr   r   pandas._libs.tslibs.np_datetimer	   pandas._libs.tslibs.parsingr
   pandas._libs.tslibs.periodr   r   pandasr  r   r   r   r   r   pandas._testing_testingr_   rb   r   r   r  r  r  r  r	  r
  r  r  r   r   r   r    <module>   s@        0 -  B^   