U
    >vfl                     @   s  d dl m Z  d dlZd dlZd dlZd dlm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mZmZmZ d dlmZ edddZedd	 Zeed
Zejeededeed   eeddd
gedddgejdddgddej !e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'G d#d$ d$Z(G d%d& d&Z)G d'd( d(Z*dS ))    )datetimeN)period)InvalidIndexError)	DatetimeIndexNaTPeriodPeriodIndexSeries	Timedelta
date_rangenotnaperiod_range
2016-01-01   periods   UTCW      g       @g      @g      @      u8dtype)paramsc                 C   s   | j S )N)param)request r    M/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/indexes/period/test_indexing.pynon_comparable_idx   s    r"   c                   @   sn   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	e
jjdd Ze
jdeegdd ZdS )TestGetItemc                 C   s,   t ddddd}|j|dd  jks(td S )NZ20010101
   DZbobr   freqnamer   )r   r(   AssertionErrorselfidxr    r    r!   test_getitem_slice_keeps_name0   s    z)TestGetItem.test_getitem_slice_keeps_namec                 C   s  t ddddd}|fD ]x}|d }|tdddks8t|d }|tdddksTt|dd	 }t dd
ddd}t|| |j|jkst|jdkst|ddd }tddd
ddgddd}t|| |j|jkst|jdkst|ddd }tdddddgddd}t|| |j|jks.t|jdks>t|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 )N
2011-01-01
2011-01-31r%   r,   r'   r(   r   r'   r   r   
2011-01-05r$   r   
2011-01-03z
2011-01-07z
2011-01-09ir   z
2011-01-12z
2011-01-15z
2011-01-18z
2011-01-21z
2011-01-24r   
2011-01-04
2011-01-02)r   r   r)   tmassert_index_equalr'   r   r+   idx1r,   resultexpectedr    r    r!   test_getitem4   sL    zTestGetItem.test_getitemc                 C   s   t ddddd}|dddg }td	d
dgddd}t|| |ddddddddddg
 }tdd	ddgddd}t|| d S )N2007-01r$   Mxr&   r   r   r   z2007-02z2007-04z2007-06r0   TFz2007-07)r   r   r7   r8   )r+   r,   r;   expr    r    r!   test_getitem_indexb   s    
  zTestGetItem.test_getitem_indexc              	   C   sX  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|| t|dd  |dd  g}d}tjt|d |tdd
  W 5 Q R X d S )Nr>   2   r?   r   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randomZrandnlenpytestraisesKeyErrorindexyearallr)   r7   assert_series_equalpdconcatslice)r+   rngtsr;   rA   msgr    r    r!   test_getitem_partialo   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startr   r'   rP   i  r   i  r      )r   r	   rangerL   r   r7   rS   )r+   rW   rX   Zdt1Zdt4rsr    r    r!   test_getitem_datetime   s    z!TestGetItem.test_getitem_datetimec                 C   s   t dddgdd}|d tdddks*t|d tks:ttdddg|d	}|t dks\tt||d	}|tddd tdddkst|t tkstd S )
N2011-01r   2011-02r?   r1   r   r   r   r^   )r   r   r)   r   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 )	Nr[   r$   r%   r\   r^   r   z
2012-01-02r1   )r   r	   r`   rL   Zilocr7   rS   r   )r+   rW   rX   rA   r    r    r!   test_getitem_list_periods   s    z%TestGetItem.test_getitem_list_periodsc                 C   s   t dddd}tdddd}||fD ]}ddddd	g}|D ]&}tjtd
d ||  W 5 Q R X 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  r]   r'   r   20142013/02
2013/01/022013/02/01 9H2013/02/01 09:00only integers, slicesrE   r^   z2013/01/01 10:00i  iL  z2013/01/01 9H)
2013/01/012013/01Z2013)r   r   rM   rN   
IndexErrorr	   rJ   rK   randrL   r7   rS   )r+   didxpidxr,   valuesvalserdr    r    r!   test_getitem_seconds   s"    z TestGetItem.test_getitem_seconds	idx_rangec              
   C   s   |dddd}ddddd	g}|D ]&}t jtd
d ||  W 5 Q R X 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 qd S )Nrp   r%   i  ri   rj   rk   rl   rm   rn   ro   rE   r^   rq   r      ;   im  )rM   rN   rr   r	   rJ   rK   rs   rL   r7   rS   rO   )r+   r{   r,   rv   rw   rx   invalidr    r    r!   test_getitem_day   s$    zTestGetItem.test_getitem_dayN)__name__
__module____qualname__r-   r=   rB   rZ   rb   rf   rg   rM   markZarm_slowrz   parametrizer   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d Zd	d
 Zdd ZdS )
TestGetLocc              
   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'   r   Z2012z^Period\('2012', 'A-DEC'\)$rE   r   )r   r   rM   rN   rO   get_locargsr)   )r+   r,   Z
bad_periodinstr    r    r!   test_get_loc_msg   s    
zTestGetLoc.test_get_loc_msgc                 C   s   t dddg}tdddgdd}||fD ]R}|tdks>t|d dksPt|tddksft|tjdks(tq(d S )Nr.   r   r3   r?   r1   r   nan)r   r   r   r   r)   floatrJ   r   )r+   rt   ru   r,   r    r    r!   test_get_loc_nat   s    zTestGetLoc.test_get_loc_natc              	   C   s`  t d}t d}t d}t|||g}d}d}|||ks@t|t||ksVt|||ksht|t||ks~td}tjt|d |d W 5 Q R X tjtd	d |d
 W 5 Q R X tjtt	
t|d || W 5 Q R X t|||g}tdd}d}|||ks(t|t||ks@t|||ksTt|t||ksltd}tjt|d |d W 5 Q R X tjtd	d |d
 W 5 Q R X tjtt	
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-03r   r   z Cannot interpret 'foo' as periodrE   Zfooz^1\.1$g?r   TF)r   r   r   r)   strrM   rN   rO   r   reescaperV   rJ   arrayr7   assert_numpy_array_equal)r+   p0p1p2idx0Zexpected_idx1_p1Zexpected_idx1_p2rY   r:   idx2Zexpected_idx2_p1Zexpected_idx2_p2r    r    r!   test_get_loc  sL    
zTestGetLoc.test_get_locc              	   C   sl   t ddd}|d}tjtdd |d W 5 Q R X |d}tjtd	d |d
 W 5 Q R X d S )Nr   r   r   r%   Z16801rE   iA  YZ46.   )r   	to_periodrM   rN   rO   r   )r+   dtipipi2r    r    r!   test_get_loc_integer@  s    

zTestGetLoc.test_get_loc_integerc              	   C   s   t dddd}tjtdd |d W 5 Q R X tdddg|d}tjtdd |jd  W 5 Q R X tjtdd |d  W 5 Q R X d|kstd|kstd S )	N2000r   r   )r   r(   rE   r   r   r^   )r   rM   rN   rO   r   r	   locr)   )r+   r   rx   r    r    r!   +test_get_loc_invalid_string_raises_keyerrorJ  s    z6TestGetLoc.test_get_loc_invalid_string_raises_keyerrorc              	   C   s   t ddd}|d}|d}||j}tjtdd ||d  W 5 Q R X tjtdd ||d  W 5 Q R X d S )	Nr   r   r   r%   r   zW-SUNrE   r   )r   r   viewr   rM   rN   rO   r   )r+   r   r   r   Zpi3r    r    r!   test_get_loc_mismatched_freqZ  s    

z'TestGetLoc.test_get_loc_mismatched_freqN)	r   r   r   r   r   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ejddd	d
gdd Z	dd Z
dd ZdS )TestGetIndexerc                 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   
2017-09-04z
2017-09-07z
2017-08-31r   
2017-09-05z
2017-09-09r   r   r   r   padr   backfillnearest1 dayZ	tolerance)	r   r   r7   r   get_indexerrJ   r   intpr
   )r+   r   r   p3Ztp0Ztp1Ztp2Ztp3r,   targetresr    r    r!   test_get_indexerk  s6     
 
 
 zTestGetIndexer.test_get_indexerc                 C   s   t 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 )	Nr   r   r   r%   r   r   r   r   )	r   r   rJ   r   r   r   r7   r   get_indexer_non_unique)r+   r   r   r   r<   r;   r    r    r!   !test_get_indexer_mismatched_dtype  s     




z0TestGetIndexer.test_get_indexer_mismatched_dtypec                 C   sP   t ddd}|d}|}|d d |}tj|jtjd }t|| d S )Nr   r   r   r%   r   r   )	r   r   r   rJ   Zonesshaper   r7   r   )r+   r"   r   r   otherr   r<   r    r    r!   2test_get_indexer_mismatched_dtype_different_length  s    
zATestGetIndexer.test_get_indexer_mismatched_dtype_different_lengthmethodr   r   r   c           	   
   C   s   t ddd}|d}|}td|j d|j }tjt|d |j||d W 5 Q R X d	D ]r}|	|}|d
krt
|trq`ddd d|j d|j dfD }tjt|d |j||d W 5 Q R X q`d S )Nr   r   r   r%   zCannot compare dtypes z and rE   )r   )objectcategoryr   |c                 S   s   g | ]}t |qS r    )r   r   ).0rY   r    r    r!   
<listcomp>  s   zPTestGetIndexer.test_get_indexer_mismatched_dtype_with_method.<locals>.<listcomp>z$ not supported between instances of )r   r   r   r   r   rM   rN   	TypeErrorr   Zastype
isinstancer   join)	r+   r"   r   r   r   r   rY   r   Zother2r    r    r!   -test_get_indexer_mismatched_dtype_with_method  s&    

	z<TestGetIndexer.test_get_indexer_mismatched_dtype_with_methodc           
      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   r   r   r   r   r   r   )r   r   r   rJ   r   r   r7   r   )
r+   r   r   r   Zp4r:   r   r;   Zexpected_indexerZexpected_missingr    r    r!   test_get_indexer_non_unique  s    
z*TestGetIndexer.test_get_indexer_non_uniquec              	   C   s  t dddjddd}t||tjddd	gtjd
 t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 )Nz
2000-01-01r   r   Hr]   )howr   r   r   r   z1999-12-31T23z2000-01-01T12z2000-01-02T01r1   r   r   r   r   z1 hourr   z8Input has different freq=None from PeriodArray\(freq=H\)rE   z1 minuter   r%   c                 S   s   g | ]}t |qS r    )rJ   timedelta64)r   r@   r    r    r!   r     s     z4TestGetIndexer.test_get_indexer2.<locals>.<listcomp>z2 hourr?   z"Input has different freq=None from)r   Zasfreqr7   r   r   rJ   r   r   r   rM   rN   
ValueErrorr
   r   Zto_timedelta64	libperiodIncompatibleFrequency)r+   r,   r   rY   Ztol_rawZtol_badr    r    r!   test_get_indexer2  sj      
 
 
 
  


 z TestGetIndexer.test_get_indexer2N)r   r   r   r   r   r   rM   r   r   r   r   r   r    r    r    r!   r   j  s   
r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	TestWherec                 C   s   t dddd}dgt| }|}|||}t|| dgdgt|d   }ttg|dd    dd}|||}t|| d S )	N20130101r   r%   rD   TFr   r1   )r   rL   wherer7   r8   r   r   tolist)r+   Zlistlike_boxicondr<   r;   r    r    r!   
test_where  s    zTestWhere.test_wherec                 C   s   t dddd}tjtfD ]&}|jt||d}|}t|| q| }t	ttg|dd  
  dd}|t||}t|| | }t	ttg|dd  
  dd}|t||j}t|| d S )Nr   r   r%   rD   )r   r   r1   )r   rJ   r   r   r   r   r7   r8   copyr   r   rv   )r+   r   Zarrr;   r<   i2r    r    r!   test_where_other#  s      zTestWhere.test_where_otherc           
      C   sv  t dddd}|dd   }tttg| dd}t|}|||j}tjtj	tj	g| t
d}t|d tsttt|| |jd	}tj|d |d
 g| t
d}t|d tjst|||}t|| |d}tj|d |d
 g| t
d}|d tkst|||}t|| tdd}	tj|	|	g| t
d}|d |	ksZt|||	}t|| d S )Nr   r   r%   rD   r   r1   r   r   ztimedelta64[ns]r   rh   r   )days)r   r   r   r   r   r   asi8rT   Index_valuer   r   intr)   r7   r8   r   rJ   r   Zto_timestampr
   )
r+   r   tailr   maskr;   r<   Ztdir   tdr    r    r!   test_where_invalid_dtypes4  s.    

z#TestWhere.test_where_invalid_dtypesc                 C   s~   t dddd}tdddddg}tdd}tj|d	 ||d
 |d |gtd}|d |ksbt|||}t	
|| d S )Nr   r   r%   rD   TFr   nsr   r   r   r   r   )r   rJ   r   r   rT   r   r   r)   r   r7   r8   )r+   r   r   Ztdnatr<   r;   r    r    r!   test_where_mismatched_natR  s    $z#TestWhere.test_where_mismatched_natN)r   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 )TestTakec                 C   s  t ddddd}|fD ]}|dg}|tdddks<t|dg}|td	ddks\t|dd
dg}t ddddd}t|| |jdkst|j|jkst|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s6t|jdksFt|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,   r0   r   r1   r   z
2011-01-06r   r   r3   r   r2      z
2011-01-08r6   r   r5   z
2011-01-29)r   taker   r)   r7   r8   r'   r   r9   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,   )r]   endr'   r(   i  r   r   r   	      r0   r         )
r   r   r   r   r7   r8   r   r)   r'   r(   )r+   rP   r<   Ztaken1Ztaken2Ztakenr    r    r!   test_take_misc  s"    



zTestTake.test_take_miscc              	   C   sb  t dddgddd}|tddd	g}t dddgddd}t|| |jtddd	gd
d}t dddgddd}t|| |jtddd	gdd
d}t 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'   r   r   r   T)
fill_valuer   F)Z
allow_fillr   zJWhen allow_fill=True and fill_value is not None, all indices must be >= -1rE   r4   z3index -5 is out of bounds for( axis 0 with)? size 3)
r   r   rJ   r   r7   r8   rM   rN   r   rr   )r+   r,   r;   r<   rY   r    r    r!   test_take_fill_value  sF            $$zTestTake.test_take_fill_valueN)r   r   r   r   r   r   r    r    r    r!   r   ]  s   1r   c                   @   s&   e Zd Zejdddgdd ZdS )TestGetValuer'   r   r%   c              	   C   s$  t dddd}||}ttdd|d}|d }||dksDt|| dksTt|j| dksft|tdd	 }|d
krtj	t
dd || W 5 Q R X tj	t
dd ||  W 5 Q R X tj	t
dd |j|  W 5 Q R X n8||dkst|| dkst|j| dks td S )Nr   r   ZMSrD   r   r$   r^   r   )hoursr   z2016-01-01 03:00rE   )r   r   r	   r`   r   r)   r   r
   rM   rN   rO   )r+   r'   r   r   rx   rX   Zts2r    r    r!   test_get_value_datetime_hourly  s$    
z+TestGetValue.test_get_value_datetime_hourlyN)r   r   r   rM   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 )TestContainsc           	   	   C   s   t d}t d}t d}t d}|||g}t|}|D ] }||ksFtt||ks6tq6d}||kshttjt|d || W 5 Q R X d|kst||kstd S )Nr   r   r   r   z2017-09-01 00:00:01rE   z2017-09)r   r   r)   r   rM   rN   rO   r   )	r+   r   r   r   r   Zps0r   pkeyr    r    r!   test_contains  s    
zTestContains.test_containsc                 C   sN   t dddd}tddd|ks"ttddd|ks6ttddd|ksJtd S )Nr>   r?   r$   r   r1   r%   Z2M)r   r   r)   )r+   rW   r    r    r!   test_contains_freq_mismatch  s    z(TestContains.test_contains_freq_mismatchc                 C   s   t dddd}t|kstd |ks&ttd|ks6ttj|ksDttdddgdd	}t|ksbtd |ksnttd|ks~ttj|kstd S )
Nr>   r?   r$   r   r   rc   r   rd   r1   )r   r   r)   r   rJ   r   r   r*   r    r    r!   test_contains_nat  s    zTestContains.test_contains_natN)r   r   r   r   r   r   r    r    r    r!   r     s   r   c                   @   s   e Zd Zdd ZdS )TestAsOfLocsc              	   C   s   t ddd}|d}|d}tjdddgtd}d	}tjt|d
  |t	j
|jtjd| W 5 Q R X tjt|d
  |t	j
|jtjd| W 5 Q R X tjt|d
 ||| | W 5 Q R X d}tjtj|d
 ||| W 5 Q R X d S )Nr   r   r   r%   r   r   r   r   z$must be DatetimeIndex or PeriodIndexrE   zInput has different freq=H)r   r   rJ   r   boolrM   rN   r   Z	asof_locsrT   r   r   Zint64Zfloat64r   r   )r+   r   r   r   r   rY   r    r    r!   test_asof_locs_mismatched_type  s    

$$z+TestAsOfLocs.test_asof_locs_mismatched_typeN)r   r   r   r   r    r    r    r!   r     s   r   )+r   r   ZnumpyrJ   rM   Zpandas._libs.tslibsr   r   Zpandas.errorsr   ZpandasrT   r   r   r   r   r	   r
   r   r   r   Zpandas._testingZ_testingr7   Zdti4r   r   r`   rW   ZfixtureZtz_localizer   ZIntervalIndexZfrom_breaksr"   r#   r   r   r   r   r   r   r   r    r    r    r!   <module>   sD   ,


 A{ -Go0