U
    f/e                     @   s8  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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)np_datetime64_compat)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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+d, Zejdd-d.d/gejd0d1d2d3d4gejd5d6d7d8d9gd:d; Zejd0ed<d=d> Zd?S )@TestPeriodConstructionc              	   C   sL  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 tddd}||kstt d}t tddddddddd}||kstt 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MfreqzJan 20052005AamQq1982minZMIN        Dyearmonthdayr   z3/1/2005d2007-01-01 09:00:00.001  	   r     L2007-01-01 09:00:00.001Z2007-01-01 09:00:00.00101  U2007-01-01 09:00:00.00101Zz"Must supply freq for ordinal valuematch )ordinalzInvalid frequency: Xz2007-1-1Xzpass as a string instead)Minr$   )	r   AssertionErrornowr   r   pytestraises
ValueError	TypeError)selfi1i2i3i4i5expectedmsg rI   J/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/scalar/period/test_period.pytest_construction+   sV    

z(TestPeriodConstruction.test_constructionc                 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;   )rA   rB   rC   rD   rI   rI   rJ   test_construction_bdayj   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   r'   quarterr   r   r   r#   z9/1/2005Z2005Q1Z2005q1Z05Q1Z05q1Z1Q2005Z1q2005Z1Q05Z1q05Z4Q1984i  Z4q1984)r   r;   r'   )rA   rB   rC   rD   lowerrI   rI   rJ   test_construction_quarter|   s6    z0TestPeriodConstruction.test_construction_quarterc                 C   s0  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 tddd}t tddd}||kst||kst||kst||ks,td S )N2007-01r   r   200701r7   r8   r   I  r,   r$   
2007-01-012007-01-01 00:00:00Z2007-01-01 00:00:00.000Z)r   r;   r'   r   r   np
datetime64r   rA   rG   rB   rC   rD   rE   rF   rI   rI   rJ   test_construction_month   s*    z.TestPeriodConstruction.test_construction_monthc              	   C   s  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 tddd}t 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 td$d#d}||ks2tt d%}t t
dd
d
d d!d!d&d'd}||ksdtt td(d'd}||kstd S ))Nr   r   r   r   r   rL   rM   r%   r"   r$      )startingMonthrS   r      r#   r&   rO   rP   z
2005-03-013DZ3Br7   rY   rZ   r,   rX   r[   r\   r]   r+   r-   r   r.   r/   r0   r1   r2   r3   r4   )r   r   MonthEndr;   YearEndZBusinessDayDay
QuarterEndZBDayr'   r   r   r^   r_   r   r`   rI   rI   rJ   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 valuer5   z2Value must be Period, string, integer, or datetimeg?r%   r   zOrdinal must be an integerrY   z?Only value or ordinal but not both should be given but not bothrd   r$   )r8   valuer   z%If value is None, freq cannot be None)r(   z'Given date string 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   r<   r   r
   rA   rH   rI   rI   rJ   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 )NrW   2Mr   r,   r$   )r'   r(   r   r[   r%   r   2007)r   r;   r   )rA   rG   presultexprI   rI   rJ   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 )Nr[   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.123000z2007-01-01 07:10:15.123400r3   )r   r   r;   rA   rq   rI   rI   rJ   test_constructor_infer_freq-  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-DECrd   r$   )r   r8   r;   freqstrr   r   rg   )rA   Zresult1Zresult2rI   rI   rJ   test_multiplesC  s    z%TestPeriodConstruction.test_multiplesr(   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howre   )r   strr;   to_timestamprA   r(   r   rs   Zstamprq   rI   rI   rJ   test_period_cons_quarterlyQ  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-rz   r   r%   r   r      )daysr$   )r   r   r   r;   
isinstancer   rI   rI   rJ   test_period_cons_annual_  s    
z.TestPeriodConstruction.test_period_cons_annualr)   numrP      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   rQ   r;   r   )rA   r   r)   Zdaystrr   rr   rG   rI   rI   rJ   test_period_cons_weeklyj  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_ordinalr8   r;   r   rA   rq   resrI   rI   rJ   test_period_from_ordinalu  s    z/TestPeriodConstruction.test_period_from_ordinalr   r   r   r%   ru   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;   rA   r   perrI   rI   rJ   '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%   re   1D1Hr   )r   r   r;   r   rx   rI   rI   rJ   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: -3Mr5   z-3Mz:Frequency must be positive, because it represents span: 0MZ0M)
r   r8   r;   r   r   rf   r}   r=   r>   r?   )rA   p1p2rr   rH   rI   rI   rJ   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   1H1Dru   r$   rY      Z25Hz<Frequency must be positive, because it represents span: -25Hr5   z-1D1Hz-1H1Dz:Frequency must be positive, because it represents span: 0DZ0D0HzInvalid frequency: 1W1DZ1W1DzInvalid frequency: 1D1WZ1D1W)
r   r8   r;   r   r   Hourr}   r=   r>   r?   )rA   rq   r   r   Zp3rr   rH   rI   rI   rJ   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   c                 C   s    t || | jj|kstd S N)r   
start_time
nanosecondr;   )rA   r)   r   Z	sec_floatrG   rI   rI   rJ   "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1HrY   )r   r   r;   )rA   r   rq   rI   rI   rJ   test_period_large_ordinal  s    z0TestPeriodConstruction.test_period_large_ordinalN)__name__
__module____qualname__rK   rR   rV   ra   rj   rn   rt   ry   r~   r=   markparametrizer   r   r   r   ranger   r   r   r   r   r   r   r   rI   rI   rI   rJ   r   *   sF   ?$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_pickler;   )rA   rq   Znew_prI   rI   rJ   test_round_trip  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   ro   2011-02)hashr   r;   )rA   rI   rI   rJ   	test_hash  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|}t|	|}||ksLt
|j|jks^t
|j|jkspt
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   z
31/12/2005)r   assert_produces_warningFutureWarningr   r   r   
tz_convertpytztimezone	normalizer;   r   tzinfo)rA   r   rq   rs   Zexp_zonerI   rI   rJ   test_to_timestamp_tz_arg(  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   /r$   r   r   )r   r   r   r   r   r   r   r   r;   r   r   split)rA   r   r   rq   rs   rI   rI   rJ   !test_to_timestamp_tz_arg_dateutilO  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   r   r   r   r;   rx   rI   rI   rJ   -test_to_timestamp_tz_arg_dateutil_from_stringc  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   rw   r   r   z
2011-02-01r$   nsEr   
2011-04-01)r   r   r   r;   r   )rA   rq   rG   rI   rI   rJ   test_to_timestamp_multh  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   rw   r   sZStarTZBEGInr%   re   r   er   ZFINIsHr   r   WrM   ru   r:   c                 S   s2   | j dkr| jtddd S t| | j  jjd S )NrM   r$   r|   )r   nanoseconds)r   r   r   r   rk   )rq   rI   rI   rJ   _ex  s    
z0TestPeriodMethods.test_to_timestamp.<locals>._exZ1985i  r$   r   r   rv   Z2Ti  startZ5S)	r   r   r;   Z	to_periodr   end_timer   r   r   )rA   rq   start_tsaliasesr   Zend_tsZfrom_lstr   Zfcoderr   rG   rI   rI   rJ   test_to_timestamps  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-05rM   r   r   
1990-01-06r$   r   )r   r   r   r   r;   rA   r   rr   rG   rI   rI   rJ   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.00001rP   )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usr   c                 C   s"   t |j|dj}||kstd S )Nr   )r   r   microsecondr;   )rA   tsrG   r   rr   rI   rI   rJ   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;   rx   rI   rI   rJ   	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;   rx   rI   rI   rJ   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   rx   rI   rI   rJ   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   rx   rI   rI   rJ   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:12rw   r   z%Y-%m-%d %H:%M:%Sz2000-01-01 12:34:12)r   strftimer;   r   r   r   rI   rI   rJ   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   rI   rI   rI   rJ   r     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%   ru   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)rA   r   rq   rI   rI   rJ   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-DECrY        r#   r      )r   r'   r;   rT   r   r(   rx   rI   rI   rJ    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   rv   )r   r   r   Minuter;   r}   )rA   rB   rI   rI   rJ   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Mthr(   ZmonthlyZBUSZBUSINESSZ
BUSINESSLYZWEEKDAYZbusZDAYZDLYZDAILYrh   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   rM   r%   ru   rv   rw   r/   r3   Nr5   z2016-03-01 09:00r   r$   rY   )r   itemsr=   r>   r?   r   r   r;   )rA   ZcasesrH   rs   freqsr   r   r   rI   rI   rJ   test_period_deprecated_freq  s*    
z0TestPeriodProperties.test_period_deprecated_freqc              	   C   s&   t | j| j| j| j| j| j| ddS )Nr   )r'   r(   r)   r   r   r   r   )r   r'   r(   r)   r   r   r   )boundoffsetrI   rI   rJ   _period_constructor0  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 nanosecondr5   )r   r  r=   r>   r	   getattr)rA   r   r   r  r   rI   rI   rJ   %test_outter_bounds_start_and_end_time;  s    z:TestPeriodProperties.test_outter_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 )Nrw   r   r$   )unit)r   r  r   roundr  r;   r   floor)rA   r   r   r  r   rG   rI   rI   rJ   $test_inner_bounds_start_and_end_timeC  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%   ru   rv   rw   rO   r$   2012r   rM   rd   r   i  rb      )r   r   r   r;   )rA   Zfreq_lstxpfrq   rI   rI   rJ   test_start_timeM  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 Nr$   r   r   rk   argsrI   rI   rJ   r   Y  s    z/TestPeriodProperties.test_end_time.<locals>._ex  r$   r   rO   r   r   rd   r%   ru   rM   r#   r   Z15D   r   r   r   r   r;   )rA   rq   r   r  rI   rI   rJ   test_end_timeV  s>    z"TestPeriodProperties.test_end_timec                 C   s2   t dd}|j}tdtdd }||ks.td S )Nr   rM   r   r$   r   )r   r   r   r   r;   r   rI   rI   rJ   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  rI   rI   rJ   r     s    z;TestPeriodProperties.test_anchor_week_end_time.<locals>._exz2013-1-1zW-SATr  r$      r  )rA   r   rq   r  rI   rI   rJ   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   r,   )r   r'   )r   r'   r;   )rA   Za_daterI   rI   rJ   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   r,   r$   )r   r'   rT   zQ-JANzQ-JUNr#   )r   r   Zqyearr;   rT   )rA   Z
qedec_dateZ
qejan_dateZ
qejun_datexZqdrI   rI   rJ   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   r,   r$   )r   r'   r(   r   r#   r   r  rd      r-   rP   rb   )r   r   r'   r;   rT   r(   )rA   Zm_dater  Zm_ival_xrI   rI   rJ   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   r,   r$   r  r   r'   r(   r)   4      rO   rd      )r   r'   r;   rT   r(   weekdays_in_month)rA   w_daterI   rI   rJ   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   r,   r$   r  r  r  r   rO   rd   r!  r5   ZWK)r   r'   r;   rT   r(   r"  r#  r   r=   r>   r?   )rA   r$  rs   rH   rI   rI   rJ   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 )NrM   r,   r$   r  r   r   rO   rd   r!  r%   )	r   r'   r;   rT   r(   r)   weekday	dayofyearr#  )rA   Zb_dateZd_daterI   rI   rJ   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 )Nru   r,   r$   r   )r   r'   r(   r)   r   2Hr   rO   rd   r!  )
r   r'   r;   rT   r(   r)   r'  r(  r   r#  )rA   Zh_date1Zh_date2Zh_daterI   rI   rJ   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:   r,   r$   r   )r   r'   r(   r)   r   r   r   r%   rO   rd   r!  )
r   rT   r;   r(   r)   r'  r(  r   r   r#  )rA   Zt_daterI   rI   rJ   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:   r,   r$   r   )r   r'   r(   r)   r   r   r   r   rO   rd   r!  )r   r'   r;   rT   r(   r)   r'  r(  r   r   r   r#  )rA   Zs_daterI   rI   rJ   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,  r-  rI   rI   rI   rJ   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'r5   r|   r$   r   )r=   r>   r?   	libperiodZget_period_field_arrr^   emptyrm   rI   rI   rJ   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   r3  rI   rI   rI   rJ   r0  $  s   r0  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )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;   )rA   leftrightrI   rI   rJ   ,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-02r5  )rA   janfebrI   rI   rJ   test_comparison_same_freq7  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\)r5   )r   r;   r=   r>   r   )rA   r:  r)   rH   rI   rI   rJ   test_comparison_mismatched_freqB  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 r5   )r   r;   r=   r>   r@   )rA   r:  Z
int_or_perrH   r6  r7  rI   rI   rJ   test_comparison_invalid_typeR  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   r9  z2000-03)r   sortedr;   )rA   r:  r;  marZperiodsZcorrectPeriodsrI   rI   rJ   test_sort_periodse  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;   )rA   rq   tr6  r7  rI   rI   rJ   test_period_cmp_natm  s    z)TestPeriodComparisons.test_period_cmp_natN)	r   r   r   r8  r<  r=  r>  rA  rC  rI   rI   rI   rJ   r4  +  s   r4  c                
   @   s0  e Z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d(d) Zd*d+ Ze	j
d,d-d.d/gd0d1 Zd2d3 Zd$S )4TestArithmeticc              	   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   rp   r   z4Input has different freq=M from Period\(freq=A-DEC\)r5   rW   r   r   r   r;   r=   r>   r   )rA   r6  r7  rr   rH   rI   rI   rJ   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  rd   r5  )rA   per1per2rI   rI   rJ   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   rx   rI   rI   rJ   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%   rH  r$   r  rd   |zunsupported operand type\(s\)zcan only concatenate strzmust be str, not Periodr5   r   )r   joinr=   r>   r@   )rA   rI  rJ  rH   rI   rI   rJ   test_add_invalid  s    zTestArithmetic.test_add_invalidc                 C   s   | S r   rI   r  rI   rI   rJ   <lambda>      zTestArithmetic.<lambda>c                 C   s   t | gS r   )pdSeriesrP  rI   rI   rJ   rQ    rR  c                 C   s   t | gS r   )rS  IndexrP  rI   rI   rJ   rQ    rR  identityrT  rU  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   rM  z
cannot addzunsupported operandzcan only operate on azincompatible typezufunc add cannot use operandsr5   )r   r   rN  r=   r>   r@   )rA   rY  rW  r   r   rH   rI   rI   rJ   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\)r5   r   r   rF  )rA   rI  rJ  offrH   rI   rI   rJ   test_sub  s    zTestArithmetic.test_subnr$   rd   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;   )rA   Ztick_classesr^  r   r   rG   rI   rI   rJ   test_sub_n_gt_1_ticks  s     z$TestArithmetic.test_sub_n_gt_1_ticksr   TFzoffset, kwd_namer(   rc   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#   r_  r`  r   )r   r   ra  r;   )rA   r   Zkwd_namer^  r   kwdsZp1_dZp2_dr   r   rG   rI   rI   rJ   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s8ttd| |ksNttdtdt tddt	dfD ]}d	}t
jt|d
 ||  W 5 Q R X t|tjrd}t
jt|d
 ||  W 5 Q R X qxdddg}t
jt|d
 ||  W 5 Q R X qxqdD ]H}t d|d}t d|d}|td |ksDttd| |ks\tt d|d}|td |ksttd| |ksttdtdt tddt	dfD ]}d	}t
jt|d
 ||  W 5 Q R X t|tjr"d}t
jt|d
 ||  W 5 Q R X n0dddg}t
jt|d
 ||  W 5 Q R X qqdD ]b}t d|d}t d|d}|td |ksttd| |kstt d|d}|td |ksttd| |kstt d|d}|tdd |kstd}t
jt|d
 tdd|  W 5 Q R X t d|d}|tdd |ksbtt
jt|d
 tdd|  W 5 Q R X t d|d}|t	d |kstt	d| |kstt d|d}|t	dd  |kstt	dd | |ks ttdtdt td!d"t	d#d fD ]}d	}t
jt|d
 ||  W 5 Q R X t|tjrd}t
jt|d
 ||  W 5 Q R X n0dddg}t
jt|d
 ||  W 5 Q R X q,q^d$D ]l}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}t d'|d}|td(d" |ks|tt
jt|d
 td(d"|  W 5 Q R X t d)|d}|td*d |kstt
jt|d
 td*d|  W 5 Q R X 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tdtdt td1dt	d#d2d3fD ]}d	}t
jt|d
 ||  W 5 Q R X t|tjr d}t
jt|d
 ||  W 5 Q R X n0dddg}t
jt|d
 ||  W 5 Q R X qqd S )4Nr   r{   Z3ArE  r   Z2013rd   r$   m  r%   <Input has different freq|Input cannot be converted to Periodr5   zcannot use operands with typesrM  zInput has different freqz#Input cannot be converted to Periodr   ro   r   2011-03z2011-05z2012-03rb   r%   Z2Dre   r   z
2011-04-06   
2011-04-02r   
2011-04-03Q r   
2011-03-30r   0   hoursr   h   ru   r*  r   2011-04-01 09:00z2011-04-03 09:00z2011-04-01 12:00r#   z2011-04-01 10:00  z2011-04-01 11:00x   minutesz2011-04-05 12:00   r   rz    r   rr  rz  )r   r   rg   r;   	YearBegin
MonthBeginr   r^   timedelta64r   r=   r>   r   r   r@   rN  rf   rh   r   )rA   r   rq   rs   orH   rI   rI   rJ   test_add_offset  s   








zTestArithmetic.test_add_offsetc                 C   s  d}dD ]}t d|d}|td t d|dks6ttdtdt tdd	t	dfD ]&}t
jt|d
 ||  W 5 Q R X q`q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sft|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 q4q4d 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st|t	d'd( t d)|dkst|t	dd*d+ t d,|dks>ttdtdt td-dt	dd.d/fD ](}t
jt|d
 ||  W 5 Q R X qlqfd S )0Nrg  re  rE  r   rd   Z2009r$   rf  r%   r5   rh  ri  r   rb   z2010-03rj  r   rk  z
2011-03-27r   z
2011-03-31ro  rn  r   r   rm  rp  rq  r   rs  rt  ru  rv  z2011-03-30 09:00r#   z2011-04-01 06:00rw  z2011-04-01 08:00rx  ry  z2011-04-01 07:00r{  r|  z2011-03-28 06:00r}  r   r~  )r   r   rg   r;   r  r  r   r^   r  r   r=   r>   r   rf   rh   r   )rA   rH   r   rq   r  rI   rI   rJ   test_sub_offset  s|    


  "" 

  "   

zTestArithmetic.test_sub_offsetr   r   ro   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   rI   rI   rJ   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   rl  rd   ro  z-Input cannot be converted to Period\(freq=D\)r5   )r   r   rh   r;   r=   r>   r   r   )rA   rq   rr   rs   rH   rI   rI   rJ   test_period_ops_offset  s    z%TestArithmetic.test_period_ops_offset)r   r   r   rG  rK  rL  rO  ZboxesrX  r=   r   r   rZ  r]  rb  r   rg   ri   rf   ZWeekrd  r  r  r  r  rI   rI   rI   rJ   rD    s:   	

	 4K
rD  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2014Q1r5   r[  rd   )r   r=   r>   AttributeErrorr8   r   )rH   r   r   rI   rI   rJ   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   r'   r;   r)   )rI  rI   rI   rJ   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%   ru   rv   rw   r|   rY   r   rM   r   )r   r   rQ   r'   r;   )r   r   r   rI   rI   rJ   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>r5   z
2012-01-02zWOM-1MONr   )r=   r>   r?   r   )rH   rI   rI   rJ   $test_invalid_frequency_error_message9  s    r  ).r   r   r   Znumpyr^   r=   r   Zpandas._libs.tslibsr   r   r1  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pandas.compatr   ZpandasrS  r   r   r   r   r   Zpandas._testingZ_testingr   r   r   r   r0  r4  rD  r  r  r  r  rI   rI   rI   rJ   <module>   s@      o X  9U   