U
    +ifO                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ G dd dZG dd	 d	ZG d
d dZdS )    N)IncompatibleFrequency)PeriodDtype)IndexNaTPeriodPeriodIndexSeries
date_rangeoffsetsperiod_range)PeriodArrayc                   @   s  e Zd Zdd Zdd Zejdee	j
eej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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*d+ Zd,d- Zejd.d/d0ge	
d/d0ggd1d2 Z d3d4 Z!d5d6 Z"d7d8 Z#ejd9d:d;d<d=d>gejd?d@dAdBdCdDgdEdF Z$dGdH Z%dIdJ Z&ejd9d;dKd:d<dLd=d>dMdNdOdPgdQdR Z'dSdT Z(dS )UTestPeriodIndexc                 C   s   t dddtt dddg}tt|t| ttt|tt| tjtt dddg}tt|t| ttt|tt| t dddtt dddg}tt|t|t	d ttt|tt|t	d d S )N2011-01Mfreq2011-03Ddtype)
r   r   tmassert_index_equalr   r   nparraynanobject)selfarr r   `/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/indexes/period/test_constructors.py"test_construction_base_constructor   s      z2TestPeriodIndex.test_construction_base_constructorc                 C   s:   t d}dddg}t||d}t||d}t|| d S )Nr   
2011-01-01z
2012-03-04z
2014-05-01r   )r   r   r   r   r   )r   r   valuesresultexpectedr   r   r   'test_base_constructor_with_period_dtype&   s
    
z7TestPeriodIndex.test_base_constructor_with_period_dtypevalues_constructorc                 C   sV   t dddtt dddg}||}t|td}t|tks>tt|jt	
| d S )Nr   r   r   r   r   )r   r   r   r   typeAssertionErrorr   assert_numpy_array_equalr"   r   r   )r   r&   periodsr"   r#   r   r   r   test_index_object_dtype.   s    

z'TestPeriodIndex.test_index_object_dtypec                 C   s6   t ddd}tdddd}t|dd}t|| d S )Nz4/2/2012Br   
   startr*   r   r/   r*   )r   r   r   r   )r   pr$   indexr   r   r   test_constructor_use_start_freq>   s    z/TestPeriodIndex.test_constructor_use_start_freqc           
   	   C   s:  t ddddd }t t ddddd }t||d	d
}tddd	d}t|| t||dd
}t|j	|j	 t||d}t|| dddg}ddg}d}t
jt|d t||dd W 5 Q R X t
jt|d t||dd W 5 Q R X dddg}dddg}t||dd}tdddd}	t||	 d S )Ni  i                 Q-DECyearquarterr   Z1990Q3Z2009Q2r   z2Q-DECr<   r=     zMismatched Period array lengthsmatchr   )r<   monthr   2M   2007-01r*   r   )r   arangerepeattiler   r   r   r   r)   asi8pytestraises
ValueError)
r   yearsquartersr2   r$   index2monthsmsgidxexpr   r   r   test_constructor_field_arraysF   s*    


z-TestPeriodIndex.test_constructor_field_arraysc              	   C   s,   t jtdd tdddd W 5 Q R X d S )NzInvalid frequency: Xr@   z2007-1-1i  XrF   rK   rL   rM   r   )r   r   r   r   test_constructor_Ue   s    z"TestPeriodIndex.test_constructor_Uc                 C   sb   t tdddtddddd}ttdddtdddtdddtdddgdd}t|| d S )	Nr7   N)Zordinalr   r4   r/   endr   r5   rD   r   )r   r   r   r   r   r   rS   rT   r   r   r   test_constructor_nanoj   s    
 
 



	z%TestPeriodIndex.test_constructor_nanoc                 C   sl   t jddt jdd}t t jddddgt jdd}t||d	}t|j	t
| t|jt
| d S )
Ni    r   r4   r7   r5   rD   (   r>   )r   rG   int64rH   rI   r   r   r   r   r<   r   r=   )r   rN   rO   Zpindexr   r   r   %test_constructor_arrays_negative_yeary   s
     z5TestPeriodIndex.test_constructor_arrays_negative_yearc              	   C   s>   d}t jt|d" ttddttddd W 5 Q R X d S )NzQuarter must be 1 <= q <= 4r@   r^   i  r4   r:   r;   )rK   rL   rM   r   rangelistr   rR   r   r   r   !test_constructor_invalid_quarters   s    z1TestPeriodIndex.test_constructor_invalid_quartersc                 C   s,   t dddd}t dddd}t|| d S )NrE   g      %@r   rF   r-   )r   r   r   )r   r#   rT   r   r   r   test_constructor_corner   s    z'TestPeriodIndex.test_constructor_cornerc              	   C   s  t dddd}tt|j| ttt|j| d}tjt|d t|j	 W 5 Q R X tjt|d tt|j	 W 5 Q R X d}tjt
|d ttdd	d
d W 5 Q R X tt|}t|| t|}t|| t|dd
}t|| t|t d
}t|| |jdks&tt|dd
}t||d |jdksTtt|tdd
}t||d |jdkstt|dd
}|dd}t|| d S )NrE   r9   r   rF   z)freq not specified and cannot be inferredr@   z'Period' object is not iterableZ2007Ar   )datarC   r5   r   e)r   r   r   r   r"   rc   rK   rL   rM   rJ   	TypeErrorr   iterr
   ZMonthEndr   r(   Zasfreq)r   rS   rR   r#   rT   r   r   r   test_constructor_fromarraylike   s:    z.TestPeriodIndex.test_constructor_fromarraylikec              	   C   sR   t jdddt jd}|t d}d}tjt|d t|dd	 W 5 Q R X d S )
Ni i d   r   zM8[us]zWrong dtype: datetime64\[us\]r@   r   r   )	r   rG   r`   viewr   rK   rL   rM   r   )r   valsrR   r   r   r   test_constructor_datetime64arr   s
    z.TestPeriodIndex.test_constructor_datetime64arrboxNseriesr2   c                 C   s^   t dddd}|d kr|j}n|dkr.t|}t|dd}tdd	d
dgdd}t|| d S )NZ2017r4   r   rF   rr   r   r   z
2017-01-31z
2017-02-28z
2017-03-31z
2017-04-30)r	   Z_valuesr   r   r   r   )r   rq   rh   r#   r$   r   r   r   !test_constructor_datetime64arr_ok   s    
 z1TestPeriodIndex.test_constructor_datetime64arr_okc              	   C   s  t ddgdd}t ddgdd}t|| |jdks:tt ddgd	d}t ddgd
d}t|| |jd	ksttt ddgdd}t |dd}t ddgdd}t|| |jdkstt |dd}t|| |jdkstd}tjt|d t dgddd W 5 Q R X d S )Nz2013-01z2013-03z	period[M]r   r   r   z
2013-01-05z
2013-03-05z
period[3D]3Dz
2013-01-01z
2013-01-02r   z&specified freq and dtype are differentr@   r   z	period[D])r   r   )r   r   r   r   r(   rK   rL   r   )r   rS   rT   resrR   r   r   r   test_constructor_dtype   s&    z&TestPeriodIndex.test_constructor_dtypec              	   C   s^   t g dd}t|t stt|dks*t|jdks8ttjtdd t g  W 5 Q R X d S )Nr   r   r   freq not specifiedr@   )r   
isinstancer(   lenr   rK   rL   rM   )r   rS   r   r   r   test_constructor_empty   s    z&TestPeriodIndex.test_constructor_emptyc              
   C   s  t tdddttdddg}t dddgdd}t|| t ttdddttdddg}t|| t tttdddtdddg}t ddddgdd}t|| t ttttdddtdddg}t|| t ttddgdd}t|| tjt	dd t ttg W 5 Q R X tjt	dd t tttg W 5 Q R X tjt	dd t ddg W 5 Q R X tjt	dd t tddg W 5 Q R X d S )Nr   r   r   r   rw   r@   )
r   r   r   r   r   r   r   rK   rL   rM   r\   r   r   r   test_constructor_pi_nat   s<    z'TestPeriodIndex.test_constructor_pi_natc              
   C   s   d}t jt|d$ ttdddttdddg W 5 Q R X t jt|d* tttdddttdddg W 5 Q R X t jt|d$ tttdddtdddg W 5 Q R X t jt|d* ttttdddtdddg W 5 Q R X d S )Nz5Input has different freq=D from PeriodIndex\(freq=M\)r@   r   r   r   r   )rK   rL   r   r   r   r   r   r   rd   r   r   r   test_constructor_incompat_freq  s"    ((z.TestPeriodIndex.test_constructor_incompat_freqc                 C   s   t dttdddg}t dddgdd}t|| t dttdddg}t dddgdd}t|| t tdddtdg}t dddgdd}t|| d S )Nr   r   r   r   r!   r   z
2012-01-01)r   r   r   r   r   r\   r   r   r   test_constructor_mixed3  s    z&TestPeriodIndex.test_constructor_mixedc              	   C   s   t ddddd}tjtdd |j|dd W 5 Q R X |j|jdd}t|| d	}tjt|d" t|jjt	|j
|jd
 W 5 Q R X t|jj|j
|jd
}|j|dd}t|| d S )NrE   r1   r5   r   )namer*   r   <class .*PeriodIndex'>r@   r~   z Should be numpy array of type i8r   )r   rK   rL   r(   _simple_new_datar   r   r'   r   rJ   r   )r   rS   r#   rR   r   r   r   r   test_constructor_simple_new@  s    &z+TestPeriodIndex.test_constructor_simple_newc              	   C   sV   t g ddd}tjtdd |j|dd W 5 Q R X |j|jdd}t|| d S )Nr   r1   )r   r~   r   r@   r   )r   rK   rL   r(   r   r   r   r   )r   rS   r#   r   r   r   !test_constructor_simple_new_emptyR  s
    z1TestPeriodIndex.test_constructor_simple_new_emptyfloatsg?g @c              	   C   sN   t jtdd t| W 5 Q R X d}t jt|d t| W 5 Q R X d S )Nz<class r@   z9PeriodIndex does not allow floating point in construction)rK   rL   r(   r   r   rj   )r   r   rR   r   r   r   test_constructor_floats[  s
    z'TestPeriodIndex.test_constructor_floatsc              	   C   sX   d}t jt|d tdddd W 5 Q R X t jt|d tdddd W 5 Q R X d S )Nzstart and end must not be NaTr@   r   r!   r   rZ   rW   rd   r   r   r   test_constructor_natd  s
    z$TestPeriodIndex.test_constructor_natc                 C   s\   t dddg}|d }t||d}dd t||D }ttt|}t|}t|| d S )Ni  i  i  r^   r>   c                 S   s&   g | ]}|d  dd|d dqS )r   dQr7   r   ).0tr   r   r   
<listcomp>o  s     zETestPeriodIndex.test_constructor_year_and_quarter.<locals>.<listcomp>)r   r   ziprc   mapr   r   r   )r   r<   r=   rS   strsZlopsr1   r   r   r   !test_constructor_year_and_quarterk  s    z1TestPeriodIndex.test_constructor_year_and_quarterc              	   C   s  t dddd}tddddgdd}t|| t d	d
dd}td	ddddgdd}t|| t dddd}tdddgdd}t|| d}tjt|d tdgdd W 5 Q R X d}tjt|d tdgdd W 5 Q R X d}tjt|d t dddd W 5 Q R X d S )Nz2014-01rC   r4   r/   r   r*   z2014-03z2014-05z2014-07r   z
2014-01-02z
2014-01-15rt   rZ   z
2014-01-05z
2014-01-08z
2014-01-11z
2014-01-14z2014-01-01 17:00Z4HrD   )r[   r   r*   z2014-01-01 09:00z2014-01-01 13:00z;Frequency must be positive, because it represents span: -1Mr@   r   z-1Mz:Frequency must be positive, because it represents span: 0MZ0MrF   )r   r   r   r   rK   rL   rM   )r   pidxr$   rR   r   r   r   test_constructor_freq_multt  s0     z*TestPeriodIndex.test_constructor_freq_multr   rg   r   r   TSmultr7   r5   rD   r4   r8   c                 C   s>   t || }td|dd}td|dd|}t|| d S )Nz
2014-04-01r-   r   )strr   r	   Z	to_periodr   r   )r   r   r   Zfreqstrr   r$   r   r   r   %test_constructor_freq_mult_dti_compat  s    z5TestPeriodIndex.test_constructor_freq_mult_dti_compatc                 C   sb   dD ]$}t ddg|d}t ddgdd}qdD ].}tdd|d	}t dd
gdd}t|| q.d S )N)Z1D1HZ1H1Dz
2016-01-01z
2016-01-02r   z2016-01-01 00:00z2016-01-02 00:00Z25Hr5   r.   z2016-01-02 01:00)r   r   r   r   )r   r   r   r$   r   r   r   test_constructor_freq_combined  s    z.TestPeriodIndex.test_constructor_freq_combinedc              	   C   s  t dddd}t|dkstt dddd}t|dks<tt dddd}t|d	ksZtt d
ddd}t|dksxtt dddd}t|dkstt dddd}t|dkstt dddd}t|dkstt dddd}t|dksttdd}t |dd}t|dkst|j|jks*t|d |ks<ttdd}t |dd}t|dksdt|j|jksvt|d  |ksttdd!}t |dd}t|t|kst||k st|j|jksttd"d}t ||d#}t|td$dg}t|d%kst|d |ks$ttt|td$dg}t|d%ksNt|d |ks`t|tdd&g}d'}t	j
t|d( t| W 5 Q R X t|}t	j
t|d( t| W 5 Q R X t	j
td)d( tdd* W 5 Q R X d S )+Nrg   z1/1/2001z	12/1/2009)r   r/   r[   	   r   $   r   l   r   z
12/31/2009i  r,   i-	  Hz12/31/2001 23:00i8"  ZMinz1/1/2001 23:59i  r   z1/1/2001 23:59:59iQ z02-Apr-2005r9   r0   r   z
2006-12-31Wr-   )r[   r*   Z1wz
2005-05-01)r/   r[   z
2005-05-05r5   wz9Input has different freq=W-SUN from PeriodIndex\(freq=B\)r@   zpass as a string instead)r   r7   )r   ry   r(   r   r   allr   r   r   rK   rL   r   rj   )r   pir/   i1Zend_intvi2ro   rR   r   r   r   test_constructor  s`    




z TestPeriodIndex.test_constructorr   r,   LUrY   r   c                 C   s,   t d|dd}t|j|d}t|| d S )Nz
2001/04/01r7   r   r   )r   r   r"   r   r   )r   r   orgrS   r   r   r   test_recreate_from_data  s    z'TestPeriodIndex.test_recreate_from_datac                 C   sf   dddg}t |dd}tdd |D }|t}t|ts@ttdd	 |D sVtt|| d S )
Ni  r?   i  rg   r   c                 S   s   g | ]}t |qS r   )r   )r   numr   r   r   r     s     zDTestPeriodIndex.test_map_with_string_constructor.<locals>.<listcomp>c                 s   s   | ]}t |tV  qd S )N)rx   r   )r   Zresir   r   r   	<genexpr>  s     zCTestPeriodIndex.test_map_with_string_constructor.<locals>.<genexpr>)	r   r   r   r   rx   r(   r   r   r   )r   rawr2   r$   ru   r   r   r    test_map_with_string_constructor  s    

z0TestPeriodIndex.test_map_with_string_constructor))__name__
__module____qualname__r    r%   rK   markZparametrizerc   r   r   r   r   Z_from_sequencer+   r3   rU   rX   r]   ra   re   rf   rl   rp   rs   rv   rz   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sR    
	*
	(	
		D 
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestShallowCopyc                 C   s(   t g dd}| }|}t|| d S )Nr   r   )r   Z_viewr   r   )r   rS   r#   r$   r   r   r   test_shallow_copy_empty  s    z'TestShallowCopy.test_shallow_copy_emptyc              	   C   s8   t dddd}tjtdd ||j W 5 Q R X d S )N
2018-01-01rD   2DrF   Zndarrayr@   )r   rK   rL   r(   _shallow_copyrJ   r   r   r   r   r   test_shallow_copy_disallow_i8  s    z-TestShallowCopy.test_shallow_copy_disallow_i8c              	   C   s6   t dddd}tjtdd || W 5 Q R X d S )Nr   rD   r   rF   r   r@   )r   rK   rL   r(   r   r   r   r   r   0test_shallow_copy_requires_disallow_period_index  s    z@TestShallowCopy.test_shallow_copy_requires_disallow_period_indexN)r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestSeriesPeriodc                 C   s   t tdddd| _d S )N
2000-01-01r-   r   rF   )r   r   rr   )r   methodr   r   r   setup_method  s    zTestSeriesPeriod.setup_methodc              	   C   s8   d}t jt|d ttddddtd W 5 Q R X d S )Nz(Cannot cast PeriodIndex to dtype float64r@   r   r-   r   rF   r   )rK   rL   rj   r   r   floatrd   r   r   r   !test_constructor_cant_cast_period  s    z2TestSeriesPeriod.test_constructor_cant_cast_periodc                 C   s8   t tdddtdd}t tddd}t|| d S )Nz1/1/2000r-   )r*   r   r   )r   r   r   r   Zassert_series_equal)r   srT   r   r   r   test_constructor_cast_object!  s    z-TestSeriesPeriod.test_constructor_cast_objectN)r   r   r   r   r   r   r   r   r   r   r     s   r   )numpyr   rK   Zpandas._libs.tslibs.periodr   Zpandas.core.dtypes.dtypesr   Zpandasr   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   r   r   r   r   r   r   <module>   s   (
   p