U
    f/eT                     @   s  d Z ddlmZmZmZ ddlZddlZddlmZm	Z	 ddl
mZ 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 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 G dd dZ!G dd dZ"dd Z#ej$%deddgeedddee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-d,d- Z.d.d/ Z/d0d1 Z0d2d3 Z1d4d5 Z2d6d7 Z3d8d9 Z4ej$%d:d;d<gd=d> Z5dS )?zJ
Series.__getitem__ test classes are organized by the type of key passed.
    )datedatetimetimeN)
conversion	timezones)	is_scalar)	Categorical	DataFrameDatetimeIndexIndexSeries	Timestamp
date_rangeperiod_rangetimedelta_range)IndexingError)BDayc                   @   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
ejdddgdd Zejdddgdd Zdd Zdd Zdd  Zd!S )"TestSeriesGetitemScalarsc                 C   sv   t dddgdddgdd}|d }|dks.tt ddgddgdd}t dddgdddgdd}|d }t|| d S )	N)   r   )   r   )   r   g        g?g?Zfoo)indexname)r   AssertionErrortmassert_series_equalselfserresultexpected r!   M/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/series/indexing/test_getitem.py$test_getitem_float_keys_tuple_values'   s    z=TestSeriesGetitemScalars.test_getitem_float_keys_tuple_valuesc                 C   sB   t ddgtdtdgd}|jd }|| }|dks>td S )Nr   r   Oi8r   )r   npdtyper   r   )r   r   keyr   r!   r!   r"    test_getitem_unrecognized_scalar6   s     
z9TestSeriesGetitemScalars.test_getitem_unrecognized_scalarc              	   C   sF   t tddtddd}d}tjt|d |d  W 5 Q R X d S )N   
   r&   z2index -11 is out of bounds for axis 0 with size 10matchi)r   r   Zrands_arraypytestraises
IndexError)r   r   msgr!   r!   r"   #test_getitem_negative_out_of_boundsA   s    z<TestSeriesGetitemScalars.test_getitem_negative_out_of_boundsc              	   C   s.   d}t jt|d |t|  W 5 Q R X d S )Nz3index \d+ is out of bounds for axis 0 with size \d+r-   )r/   r0   r1   lenr   datetime_seriesr2   r!   r!   r"   %test_getitem_out_of_bounds_indexerrorH   s    z>TestSeriesGetitemScalars.test_getitem_out_of_bounds_indexerrorc              	   C   s2   t g td}tjtdd |d  W 5 Q R X d S )Nr(   z-1r-   r   objectr/   r0   KeyErrorr   r   r!   r!   r"   4test_getitem_out_of_bounds_empty_rangeindex_keyerrorN   s    zMTestSeriesGetitemScalars.test_getitem_out_of_bounds_empty_rangeindex_keyerrorc              	   C   s   t tjdddddddgd}tjtdd |d  W 5 Q R X tjtd	d |d
  W 5 Q R X t tjdddddddgd}tjtdd |d  W 5 Q R X tjtd	d |d
  W 5 Q R X d S )N   r   r   r   r&   z^5$r-   r+   z^'c'$c)r   r'   randomrandnr/   r0   r<   r=   r!   r!   r"   %test_getitem_keyerror_with_int64indexU   s      z>TestSeriesGetitemScalars.test_getitem_keyerror_with_int64indexc                 C   s"   t d}|| |d kstd S Nr+   )r'   int64r   )r   r6   idxr!   r!   r"   test_getitem_int64g   s    
z+TestSeriesGetitemScalars.test_getitem_int64c                 C   s8   t tdttdd}|ttd }t|| d S )Nr+   r&   r   rangelistr   r   r   r   r   r!   r!   r"   test_getitem_regressionl   s    z0TestSeriesGetitemScalars.test_getitem_regressiontzstrzEurope/Berlinzdateutil/Europe/Berlinc                 C   sh   t |}tddd|d}t||jd}td|d}tdd	d
dd}t||}|| || ksdt	d S )Nz2012-12-24 16:00z2012-12-24 18:00H)startendfreqtz)r   dataz2012-12-24 17:00)rR   i           r   )
r   Zmaybe_get_tzr   r   hourr   r   r   Zlocalize_pydatetimer   )r   rM   rR   r   tsZtime_pandasdtZtime_datetimer!   r!   r"   test_getitem_pydatetime_tzt   s    
   z3TestSeriesGetitemScalars.test_getitem_pydatetime_tzrR   z
US/Easternzdateutil/US/Easternc                 C   sB   t dd|d}ttjt||d}|d }t||d  d S )N1/1/2000r,   periodsrR   r&   1/3/2000r   )r   r   r'   rA   rB   r4   r   assert_almost_equal)r   rR   rngr   r   r!   r!   r"    test_string_index_alias_tz_aware   s    z9TestSeriesGetitemScalars.test_string_index_alias_tz_awarec                 C   sn   t dddd}ttjt||d}|jdk|jdk@ }|tdd }|| }|j	
d |_	t|| d S )Nr[   z1/5/2000Z5minrQ   r&   	      )r   r   r'   rA   rB   r4   rW   minuter   r   
_with_freqr   r   )r   r`   rX   maskr   r    r!   r!   r"   test_getitem_time_object   s    z1TestSeriesGetitemScalars.test_getitem_time_objectc                 C   sJ   t tdtdg}tddg|d}|jd }||d  }||ksFtd S )Nz
12-31-1999z
12-31-2000r   r   r&   r   )r   r   r   ilocr   )r   Zcatsr   r    r   r!   r!   r"   %test_getitem_scalar_categorical_index   s
    
z>TestSeriesGetitemScalars.test_getitem_scalar_categorical_indexc              	   C   s   t dddd}ttt||d}d}||}|dks>t|| }||jd ksXtd}tj	t
|d	 |d
 W 5 Q R X tj	t
|d	 |d
  W 5 Q R X d S )N1 day 10:11:12h  rQ   r]   r&   z6 days, 23:11:12   z!^Timedelta\('50 days 00:00:00'\)$r-   z50 days)r   r   r'   aranger4   get_locr   ri   r/   r0   r<   )r   r`   r   r)   indexerr   r2   r!   r!   r"   $test_getitem_str_with_timedeltaindex   s    
z=TestSeriesGetitemScalars.test_getitem_str_with_timedeltaindexN)__name__
__module____qualname__r#   r*   r3   r7   r>   rC   rG   rL   r/   markparametrizerZ   ra   rh   rj   rs   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ej	
ddd Zej	deedddddddggeedddddggeeddddg gededdddddggededdddgggdd Zdd Zdd Zdd ZdS )TestSeriesGetitemSlicesc                 C   sB   t dd}| }|d }t ddd}t||d}t|| d S )Nz1/1/2008z1/1/2009Z2008z
2008-01-01z
2008-12-31)rO   rP   r&   )r   Z	to_seriesr   r   r   )r   Zarrr   r   r`   r    r!   r!   r"   1test_getitem_partial_str_slice_with_datetimeindex   s    
zITestSeriesGetitemSlices.test_getitem_partial_str_slice_with_datetimeindexc                 C   sv   t dddddg}ttjt||d}|dd  }|dd  }t|| |dd }|dd }t|| d S )Nr[   z1/2/2000r^   z1/4/2000r&   r      )r
   r   r'   rA   rB   r4   r   r   )r   rF   rX   r   r    r!   r!   r"   -test_getitem_slice_strings_with_datetimeindex   s    zETestSeriesGetitemSlices.test_getitem_slice_strings_with_datetimeindexc                 C   s   t dddd}ttt||d}|dd }|jdd	 }t|| |dd  }|jdd  }t|| |d d }|jd d	 }t|| d S )
Nrk   rl   rm   rn   r&   z5 dayz6 dayV      )r   r   r'   rp   r4   ri   r   r   r   r`   r   r   r    r!   r!   r"   2test_getitem_partial_str_slice_with_timedeltaindex   s    zJTestSeriesGetitemSlices.test_getitem_partial_str_slice_with_timedeltaindexc                 C   s   t dddd}ttt||d}|dd  }|jdd  }t|| |dd  }|jdd  }t|| |d	 }||jd
 kstd S )Nrk   us  rn   r&   r   z1 day 10:11:12.001i  z1 days, 10:11:12.001001i  )	r   r   r'   rp   r4   ri   r   r   r   r   r!   r!   r"   <test_getitem_partial_str_slice_high_reso_with_timedeltaindex   s    zTTestSeriesGetitemSlices.test_getitem_partial_str_slice_high_reso_with_timedeltaindexc              	   C   sR   t jt| d |d d tjf }W 5 Q R X |jd d tjf }t || d S )N)check_stacklevel)r   assert_produces_warningFutureWarningr'   Znewaxisvaluesr_   )r   r6   using_array_managerr   r    r!   r!   r"   test_getitem_slice_2d   s     z-TestSeriesGetitemSlices.test_getitem_slice_2dz&ignore:Using a non-tuple:FutureWarningc              	   C   sj   t dddd}ttjd|d}tddd g}tt || }W 5 Q R X ||d	  }t	|| d S )
NZ20090415Z20090519Z2Brb      r&   r?      r   )
r   r   r'   rA   rB   slicer   r   r   r   )r   r   srr   r   r    r!   r!   r"   test_getitem_median_slice_bug   s    z5TestSeriesGetitemSlices.test_getitem_median_slice_bugzslc, positionsi  r   Nr   r   i  i  c                 C   s<   t dddgtdddg}|| }||}t|| d S )Nr   r   r   z
2019-01-01z2019-01-01T06:00:00z
2019-01-02)r   r
   Ztaker   r   )r   ZslcZ	positionsr   r   r    r!   r!   r"   test_getitem_slice_date  s    
z/TestSeriesGetitemSlices.test_getitem_slice_datec              	   C   sd   d}t jt|jddd |dd  W 5 Q R X t jt|jddd |dd  W 5 Q R X d S )	NzUcannot do slice indexing on DatetimeIndex with these indexers \[{key}\] of type floatz4\.0)r)   r-         @g      $@z4\.5g      @)r/   r0   	TypeErrorformatr5   r!   r!   r"   test_getitem_slice_float_raises  s    z7TestSeriesGetitemSlices.test_getitem_slice_float_raisesc                 C   st   t tdttdd}|dd  }t|| |dd  }t||dd   |d d }t||d d  d S )Nr,   r&   iir   r   rH   rK   r!   r!   r"   test_getitem_slice_bug&  s    z.TestSeriesGetitemSlices.test_getitem_slice_bugc              
   C   s^   t tjdddddddddgd	}|d d }t |jd d ddddgd	}t|| d S )
N   r   r{   r?   r,   rT         r&   )r   r'   rA   rB   r   r   r   r   r!   r!   r"   test_getitem_slice_integers1  s    $z3TestSeriesGetitemSlices.test_getitem_slice_integers)rt   ru   rv   rz   r|   r   r   r   r/   rw   filterwarningsr   rx   r   r   r   r   r   r   r!   r!   r!   r"   ry      s(   




ry   c                   @   s   e Zd Zejdeeje	e
gdd Zdd Zejdeeje	gdd Zejdeeje	gejdejejejgd	d
 Zdd ZdS )TestSeriesGetitemListLikeboxc              	   C   sL   t ddg}t dgtd}||}d}tjt|d ||  W 5 Q R X d S )NABCr8   zANone of \[Index\(\['C'\], dtype='object'\)\] are in the \[index\]r-   r:   )r   r   r   r)   r2   r!   r!   r"   test_getitem_no_matches:  s    z1TestSeriesGetitemListLike.test_getitem_no_matchesc                 C   sf   t tdddd}|ddg }t tjdddtjd	ddgddgd
d}t|| |jd
ksbtd S )Nz
2000-01-01r,   D)r]   rQ   r   r{   
2000-01-03rb   z
2000-01-05z	Period[D]r   r(   )r   r   pdZPeriodr   r   r(   r   )r   r   r   expr!   r!   r"   *test_getitem_intlist_intindex_periodvaluesF  s    zDTestSeriesGetitemListLike.test_getitem_intlist_intindex_periodvaluesc                 C   sb   t dddd }tj|}ttt||d}|jd d }|dg}|| }t	
|| d S )Nr   r   r]   r&   r   r   )r   rf   r   ZIntervalIndexZfrom_breaksr   rI   r4   ri   r   r   )r   r   dtiiir   r    r)   r   r!   r!   r"   *test_getitem_intlist_intervalindex_non_intR  s    
zDTestSeriesGetitemListLike.test_getitem_intlist_intervalindex_non_intr(   c              	   C   s|   t td|}tddd}tj||g}ttt|d d d |d}|dg}t	j
tdd	 ||  W 5 Q R X d S )
Nr{   r   r   r   r9   r&   r+   5r-   )r   rI   astyper   r   Z
MultiIndexZfrom_productr   r4   r/   r0   r<   )r   r(   r   rF   r   mir   r)   r!   r!   r"   -test_getitem_intlist_multiindex_numeric_level^  s    
zGTestSeriesGetitemListLike.test_getitem_intlist_multiindex_numeric_levelc              	   C   sh   t dddg}tjdg|d}tjtdd ||  W 5 Q R X tjtdd |j|  W 5 Q R X d S )Nr   r   r   r{   r8   4r-   )r   r'   arrayr/   r0   r<   loc)r   Z
uint_dtyper   r)   r!   r!   r"   test_getitem_uint_array_keyk  s    z5TestSeriesGetitemListLike.test_getitem_uint_array_keyN)rt   ru   rv   r/   rw   rx   rJ   r'   r   r   r   r   r   r   rE   float64Zuint64r   r   r!   r!   r!   r"   r   9  s   

r   c                   @   sD   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S )TestGetitemBooleanMaskc                 C   sH   |}||  k}|t| }|| }t|| t|j|j|  d S )N)medianrJ   r   r   assert_index_equalr   )r   string_seriesr   rg   r   r    r!   r!   r"   test_getitem_booleanw  s    z+TestGetitemBooleanMask.test_getitem_booleanc              	   C   s   t g tjd}d|j_||  }|jjdks2t|jtjksBtt ddg}t tt	g ddd}|t g td }t
|| d}tjt|d |t g td  W 5 Q R X tjt|d |t d	gtd  W 5 Q R X d S )
Nr8   Z
index_namer   r   rE   )r(   r   sUnalignable boolean Series provided as indexer \(index of the boolean Series and of the indexed object do not matchr-   T)r   r'   rE   r   r   Zisnar   r(   r;   r   r   r   r/   r0   r   bool)r   r   r    r   r2   r!   r!   r"   test_getitem_boolean_empty  s    z1TestGetitemBooleanMask.test_getitem_boolean_emptyc           
   	   C   s   |}||  k}|t}|| }|| }t|| | }| }d||< d||< t|| tj|dd< d}	tj	t
|	d ||  W 5 Q R X tj	t
|	d d||< W 5 Q R X d S )Nr+   r,   z=Cannot mask with non-boolean array containing NA / NaN valuesr-   )r   r   r;   r   r   copyr'   nanr/   r0   
ValueError)
r   r   r   rg   Zomaskr   r    s2Zcopr2   r!   r!   r"   test_getitem_boolean_object  s"    
z2TestGetitemBooleanMask.test_getitem_boolean_objectc                 C   sl   t dddd}tddddg}t|j}|| }|jjjd ksDtttd}|| }|jjd kshtd S )Nz
2016-01-01r{   z
US/Pacificr\   TF)	r   r'   r   r   _dataZ_valuesbaser   rI   )r   r   r)   r   resZser2Zres2r!   r!   r"    test_getitem_boolean_dt64_copies  s    
z7TestGetitemBooleanMask.test_getitem_boolean_dt64_copiesc              	   C   sj   |}|j dt d| k}d}tjt|d ||  W 5 Q R X tjt|d |j|  W 5 Q R X d S )Nr   rb   r   r-   )shiftr   r   r/   r0   r   r   )r   r6   rX   Zmask_shiftedr2   r!   r!   r"   test_getitem_boolean_corner  s    z2TestGetitemBooleanMask.test_getitem_boolean_cornerc                 C   s0   |  }||dk }||dk }t|| d S )Nr   )Zsort_valuesr   r   )r   r   Zorderedselr   r!   r!   r"   $test_getitem_boolean_different_order  s    z;TestGetitemBooleanMask.test_getitem_boolean_different_orderc                 C   s~   t dddd}tjt|td}d|dd< || }|dd }|j|jksPtt|| d|d	< || }|jd ksztd S )
Nr[   z3/1/2000r   rb   r8   Tr,         )	r   r'   zerosr4   r   rQ   r   r   r   )r   r`   rg   Zmaskedr    r!   r!   r"   -test_getitem_boolean_contiguous_preserve_freq  s    zDTestGetitemBooleanMask.test_getitem_boolean_contiguous_preserve_freqN)
rt   ru   rv   r   r   r   r   r   r   r   r!   r!   r!   r"   r   v  s   
r   c                   @   s   e Zd Zdd ZdS )TestGetitemCallablec                 C   s   t dtdd}|dd  }||jd ks.t|dd  }|jddg }t|| |d	d  }|jd
ddg }t|| d S )Nr{   ABCDr&   c                 S   s   dS )Nr   r!   xr!   r!   r"   <lambda>      z;TestGetitemCallable.test_getitem_callable.<locals>.<lambda>r   c                 S   s   ddgS )Nr   r   r!   r   r!   r!   r"   r     r   r   c                 S   s   ddddgS )NTFr!   r   r!   r!   r"   r     r   r   r   r   )r   rJ   r   r   r   r   ri   r   r!   r!   r"   test_getitem_callable  s    z)TestGetitemCallable.test_getitem_callableN)rt   ru   rv   r   r!   r!   r!   r"   r     s   r   c                 C   sN   dd | D }| | }| t | dk }| | dk }t|| t|| d S )Nc                 s   s   | ]}|d kV  qdS )r   Nr!   ).0r   r!   r!   r"   	<genexpr>  s     z)test_getitem_generator.<locals>.<genexpr>r   )iterr   r   )r   genr   Zresult2r    r!   r!   r"   test_getitem_generator  s    r   seriesr   z
2012-01-01r   r   ZCETr\   c              	   C   sT   t jtd| d | d d d f }W 5 Q R X t| d d d f }t || d S )Nz&Support for multi-dimensional indexing)r.   r   )r   r   r   r'   ZasarrayZassert_numpy_array_equal)r   r   r   r    r!   r!   r"   test_getitem_ndim_deprecated  s    	r   c              	   C   s>   | }|d }d}t jt|d |dddf  W 5 Q R X d S )Nr   z\(2000, slice\(3, 4, None\)\)r-   r   r   r{   )r/   r0   r   )Z/multiindex_year_month_day_dataframe_random_datadfr   r2   r!   r!   r"   4test_getitem_multilevel_scalar_slice_not_implemented  s
    r   c               	   C   sR   t td} td| d}t| | d}d}tjt|d ||dk  W 5 Q R X d S )Nr,   r&   zWIndexing a Series with DataFrame is not supported, use the appropriate DataFrame columnr-   r+   )rJ   rI   r   r	   r/   r0   r   )r`   r   r   r2   r!   r!   r"   test_getitem_dataframe_raises#  s    r   c                  C   sZ   t td} tdddg}t dddg| |< t dddd	dd
ddddg
}t| | d S )Nr,   r   r{   rc      rT   r   r   r   r+   r?   r   r   )r   rI   r'   r   r   r   )r   rF   r    r!   r!   r"   'test_getitem_assignment_series_aligment/  s
    r   c               	   C   s   t ddddgddddgd} tjtd	d
 | d   W 5 Q R X tjtd	d
 | jd  W 5 Q R X tjtd	d
 | jjd  W 5 Q R X d S )Nr   r+   r?   r   g       @r   g      @r&   Noner-   )r   r/   r0   r<   r   rq   Z_enginer   r!   r!   r"   9test_getitem_duplicate_index_mistyped_key_raises_keyerror9  s    r   c                  C   s:   t td} tdf}| | }| |d  }t|| d S )Nr+   r   r   )r   rI   r   r   r   )r   r)   r   r    r!   r!   r"   ,test_getitem_1tuple_slice_without_multiindexF  s
    
r   c                 C   sZ   | | dk }|j | j kst| dddg }|j | j ks:t| dd }|j | j ksVtd S )Nr   r   r{   r+   r,   )r   r   )r6   r   r!   r!   r"   test_getitem_preserve_nameO  s    r   c               	   C   s   t tjdttdddd} dddddg}t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 d S )Nr,   r   r   r   r&   r+   r   r   znot in indexr-   )
r   r'   rA   rB   rJ   rI   r   r/   r0   r<   )r   ZindsZarr_indsr!   r!   r"    test_getitem_with_integer_labelsZ  s     r   c              	   C   s:   | j d t  }d}tjt|d | |  W 5 Q R X d S )Nr   z,Timestamp\('1999-12-31 00:00:00', freq='B'\)r-   )r   r   r/   r0   r<   )r6   dr2   r!   r!   r"   test_getitem_missingf  s    r   c                 C   sx   | dddg }|dddg }| j d |j d ks4t|j d |j d ksLt| d |d ks`t|d |d ksttd S )Nr   r   r   )r   r   )r   Zobject_seriesZslice1Zslice2r!   r!   r"   test_getitem_fancyn  s    r   c                 C   s   | d }t |tjstd S rD   )
isinstancer'   r   r   )r6   valuer!   r!   r"   test_getitem_box_float64w  s    r   c                  C   s>   t tddddddgd} t| d s*t| d dks:td S )Nr+   r@   abr&   r   )r   rI   r   r   )objr!   r!   r"   test_getitem_unordered_dup|  s    r   c                  C   sN   t tddddddgtjd} t ddgddgtjd}| d }t|| d S )Nr+   r   r   r   r   r   r{   )r   rI   r'   rE   r   r   )r   r    r   r!   r!   r"   test_getitem_dups  s    r   c               	   C   st   t tdtdddddgd} | d }| jddg }t|| tt | j	| d}W 5 Q R X t|| d S )Nr+   r   r   r@   r&   r   r   )
r   rI   r   ri   r   r   r   r   r   	get_value)r   r   r    r!   r!   r"   test_getitem_categorical_str  s    r   c                  C   s(   t ddddddgd} | d d d  d S )Nr   r   r   r@   r&   r9   )r   r   r!   r!   r"   +test_slice_can_reorder_not_uniquely_indexed  s    r   
index_valsZaabcdZaadcbc                 C   s,   t tdt| d}|d }|dks(td S )Nr+   r&   r   )r   rI   rJ   r   )r   r   r   r!   r!   r"   0test_duplicated_index_getitem_positional_indexer  s    r   )6__doc__r   r   r   Znumpyr'   r/   Zpandas._libs.tslibsr   r   Zpandas.core.dtypes.commonr   Zpandasr   r   r	   r
   r   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.indexingr   Zpandas.tseries.offsetsr   r   ry   r   r   r   r   rw   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   <module>   sT   ,  =t	


		