U
    Mfe                     @   s   d dl m Z mZ d dlZd dlZd dlmZ d dlZ	d dlm
Z
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dS )    )datetime	timedeltaN)period)DatetimeIndexPeriodPeriodIndexSeriesnotnaperiod_rangec                   @   sT   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S )TestGetItemc                 C   s6   t ddddd}|d }||s&t||k	s2td S )N
2011-01-01
2011-01-31Didxfreqname.)r
   equalsAssertionError)selfr   result r   M/tmp/pip-unpacked-wheel-izj5yhnl/pandas/tests/indexes/period/test_indexing.pytest_ellipsis   s    zTestGetItem.test_ellipsisc                 C   s  t jddddd}|fD ]}|d }|t jdddks<t|d }|t jdddksZt|dd	 }t jdd
ddd}t|| |j|jkst|jdkst|ddd }t jddd
ddgddd}t|| |j|jkst|jdkst|ddd }t jdddddgddd}t|| |j|jks:t|jdksJt|dd d }td
ddddgddd}t|| |j|jkst|jdkstqd S )Nr   r   r   r   r   r   r      
2011-01-05
      
2011-01-03z
2011-01-07z
2011-01-09i   z
2011-01-12z
2011-01-15z
2011-01-18z
2011-01-21z
2011-01-24   
2011-01-04
2011-01-02)pdr
   r   r   tmassert_index_equalr   r   r   idx1r   r   expectedr   r   r   test_getitem   sL    zTestGetItem.test_getitemc                 C   s   t ddddd}|dddg }tjd	d
dgddd}t|| |ddddddddddg
 }tjdd	ddgddd}t|| d S )N2007-01r   Mx)periodsr   r      r"   r   z2007-02z2007-04z2007-06r   TFz2007-07)r
   r&   r   r'   r(   )r   r   r   expr   r   r   test_getitem_indexD   s    
  zTestGetItem.test_getitem_indexc              	   C   sT  t dddd}ttjt||}tjtdd |d  W 5 Q R X |d }|j	j
d	k sbt|dd
 }t|dks~t|dd }t|dkst|dd }t|dkst|d d
 }t|dkst|d
d  }t|dkst|}|dd  }t|| |dd  |dd  }d}tjt|d |tdd
  W 5 Q R X d S )Nr-   2   r.   r0   r   z^'2006'$matchZ2006Z2008i  Z2009   z2008-1z2009-12Z2008Q1Z2009Q4$      r   z-left slice bound for non-unique label: '2008')r
   r   nprandomrandnlenpytestraisesKeyErrorindexyearallr   r'   assert_series_equalappendslice)r   rngtsr   r2   msgr   r   r   test_getitem_partialQ   s.    z TestGetItem.test_getitem_partialc                 C   sV   t dddd}ttt||d}tddd}tdd	d
}||| }t|| d S )N
2012-01-01r   zW-MONstartr0   r   rB   i  r   i  r#      )r
   r   ranger>   r   r'   rE   )r   rH   rI   Zdt1Zdt4rsr   r   r   test_getitem_datetimes   s    z!TestGetItem.test_getitem_datetimec                 C   s   t jdddgdd}|d t jdddks.t|d t jks@tt jdddg|d	}|t j dksftt j||d	}|t jddd t jdddkst|t j t jkstd S )
Nz2011-01NaTz2011-02r.   r   r   r1   r   rO   )r&   r   r   r   rT   r   )r   r   sr   r   r   test_getitem_nat}   s    $zTestGetItem.test_getitem_natc                 C   sL   t dddd}ttt||d}|jdg }t|tdddg | d S )	NrL   r   r   rM   rO   r1   z
2012-01-02r   )r
   r   rQ   r>   ilocr'   rE   r   )r   rH   rI   r2   r   r   r   test_getitem_list_periods   s    z%TestGetItem.test_getitem_list_periodsc                 C   s   t jdddd}tdddd}||fD ]}ddddd	g}|D ]}q<q<ttjt||d
}t	|d |dd  t	|d |d d  dD ]}t	|| | qq&d S )Nz2013/01/01 09:00:00Si  rN   r   r0   20142013/02
2013/01/022013/02/01 9H2013/02/01 09:00rO   z2013/01/01 10:00i  iL  z2013/01/01 9H)
2013/01/012013/01Z2013)
r&   
date_ranger
   r   r;   r<   randr>   r'   rE   )r   didxpidxr   valuesvrU   dr   r   r   test_getitem_seconds   s     z TestGetItem.test_getitem_secondsc                 C   s   t jdddd}tdddd}||fD ]}ddddd	g}|D ]}q<q<ttjt||d
}t	|d |dd  t	|d |dd  t	|d |dd   dd	g}|D ]&}t
jt|d ||  W 5 Q R X qq&d S )Nr`   r   i  rZ   r[   r\   r]   r^   r_   rO   ra   r      ;   im  r6   )r&   rb   r
   r   r;   r<   rc   r>   r'   rE   r?   r@   rA   )r   rd   re   r   rf   rg   rU   invalidr   r   r   test_getitem_day   s&    zTestGetItem.test_getitem_dayN)__name__
__module____qualname__r   r,   r3   rK   rS   rV   rX   ri   rm   r   r   r   r   r      s   ."
r   c                   @   s<   e Zd Zejdeeej	e
gdd Zdd Zdd ZdS )		TestWhereklassc                 C   s   t dddd}dgt| }|}|||}t|| dgdgt|d   }ttjg|dd    dd}|||}t|| d S )	N20130101r   r   r5   TFr1   r   )	r
   r>   wherer'   r(   r   r&   rT   tolist)r   rr   iZcondr+   r   r   r   r   
test_where   s     zTestWhere.test_wherec                 C   s   t dddd}tjtjfD ](}|jt|tjd}|}t|| q|	 }tj
tjtjg|dd    dd}|t||}t|| |	 }tj
tjtjg|dd    dd}|t||j}t|| d S )Nrs   r   r   r5   )otherr   r   )r
   r;   nanr&   rT   rt   r	   r'   r(   copyr   ru   rf   )r   rv   Zarrr   r+   i2r   r   r   test_where_other   s    &&zTestWhere.test_where_otherc              	   C   s   t dddd}| }tjtjtjg|dd    dd}tjtdd |	t
||j W 5 Q R X tjtdd |	t
||jd	 W 5 Q R X tjtdd |	t
||d
 W 5 Q R X d S )Nrs   r   r   r5   r   r   zWhere requires matching dtyper6   ztimedelta64[ns]rY   )r
   rz   r&   r   rT   ru   r?   r@   	TypeErrorrt   r	   Zasi8viewto_timestamp)r   pir{   r   r   r   test_where_invalid_dtypes   s    &"z#TestWhere.test_where_invalid_dtypesN)rn   ro   rp   r?   markZparametrizelisttupler;   arrayr   rw   r|   r   r   r   r   r   rq      s   
rq   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestTakec                 C   s  t jddddd}|fD ]}|dg}|t jdddks@t|dg}|t jd	ddksbt|dd
dg}t jddddd}t|| |jdkst|j|jkst|dddg}t jdddgddd}t|| |j|jkst|jdkst|ddd
g}t jdddgddd}t|| |j|jksBt|jdksRt|dddg}tddd	gddd}t|| |j|jkst|jdkst|dddg}tddd	gddd}t|| |j|jkst|jdkstqd S )Nr   r   r   r   r   r   r   r   z
2011-01-06r1   r   r    r#   r      z
2011-01-08r%   r"   r$   z
2011-01-29)	r&   r
   taker   r   r'   r(   r   r   r)   r   r   r   	test_take   s^            zTestTake.test_takec                 C   s   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d}|ddddg}|ddddg }||fD ]>}t|| t|tst|j|jkst|j	|j	ksptqpd S )Nz1/1/10z12/31/12r   r   )rN   endr   r   i  r1      r   	      r   r         )
r
   r   r   r   r'   r(   
isinstancer   r   r   )r   rB   r+   Ztaken1Ztaken2Ztakenr   r   r   test_take_misc0  s"    



zTestTake.test_take_miscc              	   C   sj  t jdddgddd}|tddd	g}t jdddgddd}t|| |jtddd	gd
d}t jdddgddd}t|| |jtddd	gdd
d}t jdddgddd}t|| d}tjt	|d  |jtdddgd
d W 5 Q R X tjt	|d  |jtdddgd
d W 5 Q R X d}tjt
|d |tddg W 5 Q R X d S )Nr   z
2011-02-01z
2011-03-01Zxxxr   )r   r   r1   r   r   T)
fill_valuerT   F)Z
allow_fillr   zJWhen allow_fill=True and fill_value is not None, all indices must be >= -1r6   r!   z3index -5 is out of bounds for( axis 0 with)? size 3)r&   r   r   r;   r   r'   r(   r?   r@   
ValueError
IndexError)r   r   r   r+   rJ   r   r   r   test_take_fill_valueF  sF            $$zTestTake.test_take_fill_valueN)rn   ro   rp   r   r   r   r   r   r   r   r      s   1r   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d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestIndexingc              
   C   s   t dddd}tdd}tjtdd || W 5 Q R X z|| W n4 tk
r~ } z|jd |ksntW 5 d }~X Y nX d S )	Nz2000-1-1Ar   )r   r0   Z2012z^Period\('2012', 'A-DEC'\)$r6   r   )r
   r   r?   r@   rA   get_locargsr   )r   r   Z
bad_periodinstr   r   r   test_get_loc_msgn  s    
zTestIndexing.test_get_loc_msgc                 C   s   t dddg}tdddgdd}||fD ]T}|tjdks@t|d dksRt|tddksht|tjdks(tq(d S )Nr   rT   r    r.   r   r1   ry   )	r   r   r   r&   rT   r   floatr;   ry   )r   rd   re   r   r   r   r   test_get_loc_naty  s    zTestIndexing.test_get_loc_natc              	   C   s`  t d}t d}t d}t |||g}d}d}|||ksHt|t||ks^t|||kspt|t||kstd}tjt|d |d W 5 Q R X tjtd	d |d
 W 5 Q R X d}tjt	|d || W 5 Q R X t |||g}t
dd}d}|||ks,t|t||ksDt|||ksXt|t||ksptd}tjt|d |d W 5 Q R X tjtd	d |d
 W 5 Q R X d}tjt	|d || W 5 Q R X t |||g}	d}
tdddg}|	||
kst|	t||
ks4tt|	|| t|	t|| d S )N
2017-09-01
2017-09-02
2017-09-03r1   r   z Cannot interpret 'foo' as periodr6   fooz^1\.1$g?zn'PeriodIndex\(\['2017-09-01', '2017-09-02', '2017-09-03'\], dtype='period\[D\]', freq='D'\)' is an invalid keyr   zn'PeriodIndex\(\['2017-09-02', '2017-09-02', '2017-09-03'\], dtype='period\[D\]', freq='D'\)' is an invalid keyTF)r&   r   r   r   r   strr?   r@   rA   r}   rG   r;   r   r'   assert_numpy_array_equal)r   p0p1p2idx0Zexpected_idx1_p1Zexpected_idx1_p2rJ   r*   idx2Zexpected_idx2_p1Zexpected_idx2_p2r   r   r   test_get_loc  sT    



zTestIndexing.test_get_locc           	      C   s   t d}t d}t d}t |||g}t |||g}t |||g}t |||g}t |||g}|jdks|t|jdkst|jdkst|jdkst|jdkstd S )Nr   r   r   TF)r&   r   r   Zis_monotonic_increasingr   	r   r   r   r   Zidx_inc0Zidx_inc1Zidx_dec0Zidx_dec1r   r   r   r   test_is_monotonic_increasing  s    


z)TestIndexing.test_is_monotonic_increasingc           	      C   s   t d}t d}t d}t |||g}t |||g}t |||g}t |||g}t |||g}|jdks|t|jdkst|jdkst|jdkst|jdkstd S )Nr   r   r   FT)r&   r   r   Zis_monotonic_decreasingr   r   r   r   r   test_is_monotonic_decreasing  s    


z)TestIndexing.test_is_monotonic_decreasingc                 C   s   t d}t d}t d}t d}|||g}t |}|D ] }||ksPtt||ks@tq@d|ksntd|kszt||kstd S )Nr   r   r   
2017-09-04z2017-09-01 00:00:01z2017-09)r&   r   r   r   r   )r   r   r   r   p3Zps0r   pr   r   r   test_contains  s    





zTestIndexing.test_containsc                 C   s   t d}t d}t d}t |||g}tdddg}d}|||}||ksZtt |||g}tdddg}	tddg}
||	|}t||
 t |||g}tdddg}tddg}|||}t|| d S )Nr   r   r   r1   r   r"   )	r&   r   r   r;   r   	get_valuer   r'   r   )r   r   r   r   r   Zinput0Z	expected0Zresult0r*   Zinput1Z	expected1Zresult1r   Zinput2Z	expected2Zresult2r   r   r   test_get_value  s$    


zTestIndexing.test_get_valuec                 C   s>  t d}t d}t d}t d}t d}t d}t d}t |||g}t||tjdd	d
gtjd t ||||g}	t||	dtjddd	d
gtjd t||	dtjdd	d
dgtjd t||	dtjddd	d
gtjd |j|	dt 	dd}
t|
tjddd	dgtjd d S )Nr   r   z
2017-09-07z
2017-08-31r   
2017-09-05z
2017-09-09r   r1   r   Zdtypepadr   backfillnearest1 day	tolerance)
r&   r   r   r'   r   get_indexerr;   r   intp	Timedelta)r   r   r   r   Ztp0Ztp1Ztp2Ztp3r   targetresr   r   r   test_get_indexer  s6    






 
 
 
 zTestIndexing.test_get_indexerc                 C   s   t jddd}|d}|d}tjdddgtjd}||}t|| ||}t|| ||}t|| |	|d }t|| |	|d }t|| |	|d }t|| d S )	Nz
2016-01-01r"   r0   r   Wr   r   r   )
r&   rb   Z	to_periodr;   r   r   r   r'   r   get_indexer_non_unique)r   Zdtir   Zpi2r+   r   r   r   r   !test_get_indexer_mismatched_dtype8  s     




z.TestIndexing.test_get_indexer_mismatched_dtypec           
      C   s   t d}t d}t d}t d}t |||g}t ||||g}||}tjdddddgtjd	}tjdd
gtjd	}	t	|d | t	|d |	 d S )Nr   r   r   r   r1   r   r   r   r   r"   )
r&   r   r   r   r;   r   r   Zint64r'   r   )
r   r   r   r   Zp4r*   r   r   Zexpected_indexerZexpected_missingr   r   r   test_get_indexer_non_uniqueU  s    




z(TestIndexing.test_get_indexer_non_uniquec              	   C   s  t jddd}dD ]}||d |dks.t||d jddd|dksPt||d  |dkslt||d   |dkst|t|d |dkstqt jdd	dd d d
 }|jdddddkst|jddt dddkst|jddt	
ddddkst|jddtdddks8td}tjt|d |jdddd W 5 Q R X d}tjt|d |jdddd W 5 Q R X tjtdd |jdddd W 5 Q R X tjtdd. |jddt d t d gd W 5 Q R X d S )N
2000-01-01r"   r   )Nr   r   r   r1   HrN   howr   r   z2000-01-02T12r   r   )methodr   Z1Dr   zunit abbreviation w/o a numberr6   z
2000-01-10r   z8Input has different freq=None from PeriodArray\(freq=D\)1 hourz^Period\('2000-01-10', 'D'\)$z5list-like tolerance size must match target index size)r&   r
   r   r   asfreqr   Zto_pydatetimer   r   r;   timedelta64r   r?   r@   r   rA   to_timedelta64)r   r   r   rJ   r   r   r   test_get_loc2g  sT    "   
 zTestIndexing.test_get_loc2c              	   C   s  t jdddjddd}t||tjddd	gtjd
 t j	dddgdd}t||dtjdddgtjd
 t||dtjddd	gtjd
 t||dtjdddgtjd
 t|j|dddtjdddgtjd
 d}t
jt|d |j|ddd W 5 Q R X t|j|dddtjdddgtjd
 t dt dtddg}t|j|ddd |D dtjdddgtjd
 t d t d tddg}t
jtjdd |j|d|d W 5 Q R X d S )Nr   r"   r   r   rN   r   r   r1   r   r   z1999-12-31T23z2000-01-01T12z2000-01-02T01r   r   r   r   r   r   r   z8Input has different freq=None from PeriodArray\(freq=H\)r6   z1 minuter   r   c                 S   s   g | ]}t |qS r   )r;   r   ).0r/   r   r   r   
<listcomp>  s     z2TestIndexing.test_get_indexer2.<locals>.<listcomp>z2 hourr.   z"Input has different freq=None from)r&   r
   r   r'   r   r   r;   r   r   r   r?   r@   r   r   r   r   	libperiodZIncompatibleFrequency)r   r   r   rJ   Ztol_rawZtol_badr   r   r   test_get_indexer2  sj      
 
 
 
  
 zTestIndexing.test_get_indexer2c                 C   sF   t ddd}ttjd|d}||d  }|jd }||ksBtd S )Nz1/1/2001r   r   rO   r   )r
   r   r;   r<   r=   Ziatr   )r   rB   rU   r+   r   r   r   r   test_indexing  s
    
zTestIndexing.test_indexingc                 C   s   t jdddd}t jtjdd|d}t||j|  t||jt	|  t||jt	|  t|j
dd	 |j|dd	   t||jt	|  d S )
Nz2002-01z2003-12r.   r   r8   r   rO   r   r   )r&   r
   Z	DataFramer;   r<   r=   r'   Zassert_frame_equallocr   rW   )r   r   Zdfr   r   r   test_period_index_indexer  s    $z&TestIndexing.test_period_index_indexerN)rn   ro   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   m  s   B04r   )r   r   Znumpyr;   r?   Zpandas._libs.tslibsr   r   Zpandasr&   r   r   r   r   r	   r
   Zpandas._testingZ_testingr'   r   rq   r   r   r   r   r   r   <module>   s     C/o