U
    sVcA1                     @   sT  d dl Zd dlZd dlmZmZmZmZ d dlm	Z
 d dlmZ ejddd dd dd gejd	d ed
gd gdfd
eddgd
dgdfgdd Zejdddgdd Zdd Zdd Zejddd edfdd edfdd edfdd edfd d ed!fd"d ed!fd#d ed$fgd%d& Zd'd( Zd)d* Zejd+d,d d-fd.d d/fgd0d1 Zd2d3 Zejd4d5d edfd6d edd7fd8d edd7fgd9d: Zd;d< Zd=d> Zejd?d@gdAejgfeddgd7dBggedCd@ejfgdDdEfdFd@ged
ddgdGd7dBggedHdCd@ejfgdDdEfd@geddgd7dBggedCd@ejfgdDdEfd@gdAgfedgd7ggedCgdDdEfd@gejgfedgdBgged
gdIggdFd@gdAdJggdKdDdEfd@ejfeddBgdDd@ejfdLfgdMdN Z ej!dOdP Z"ejdQdRd dSd gdTdU Z#dVdW Z$dXdY Z%dZd[ Z&d\d] Z'dS )^    N)	DataFrameIndex
MultiIndexSeries)IndexingErroraccess_methodc                 C   s   | d d |f S N sxr	   r	   Q/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/indexing/multiindex/test_getitem.py<lambda>       r   c                 C   s   | j d d |f S r   locr
   r	   r	   r   r      r   c                 C   s   | j |ddS )N   )level)xsr
   r	   r	   r   r      r   zlevel1_value, expectedr   index      c                 C   sL   t jdddgddgd}tddd	g|d
}d|j_| ||}t|| d S )N)r   r   )r   r   )r   r   ABnamesr   r   r   r   )r   from_tuplesr   r   nametmassert_series_equal)r   Zlevel1_valueexpectedmiZserresultr	   r	   r   test_series_getitem_multiindex   s
    
r$   level0_valueDr   c                 C   s  t | ddgddddddd	d
ggddddddddddg
ddddddddddg
gddgd}tjt|d}t||dgd}| dkrtjtdd |j	d  W 5 Q R X tjtdd |j	d  W 5 Q R X |j	|  }t
| dd dtdddgddd}t|| d S )Nr   Cr         %   9   C   K   R   r   r   r               tagdaylevelscodesr   valr   columnsr   z^'A'$matchz^'X'$Xr   )r   r   )r   nprandomrandnlenr   pytestraisesKeyErrorr8   r   Zravelr   r   r    )r%   r   Zarrdfr#   r!   r	   r	   r   )test_series_getitem_duplicates_multiindex'   s&    .
  rG   c                 C   sL   | d }| |jdd }|jdd|_||d }t|| d S )Nr   *   A   r   )  r   )reindexr   	droplevelr   r    /multiindex_year_month_day_dataframe_random_dataZ
indexer_slr   r!   r#   r	   r	   r   test_series_getitemC   s
    rO   c                 C   s.   | d }|j d }||d }||ks*td S )Nr   1   )rJ   r   
   )ilocAssertionErrorrM   r	   r	   r   "test_series_getitem_returns_scalarL   s    
rT   z)indexer,expected_error,expected_error_msgc                 C   s
   |  dS N)rJ   r   r/   )__getitem__r   r	   r	   r   r   Y   r   z^\(2000, 3, 4\)$c                 C   s   | d S rU   r	   rW   r	   r	   r   r   Z   r   c                 C   s
   | j d S rU   r   rW   r	   r	   r   r   [   r   c                 C   s
   | j d S )N)rJ   r   r/   r1   r   rW   r	   r	   r   r   \   r   zToo many indexersc                 C   s   |  t| S r   )rV   rB   rW   r	   r	   r   r   ]   r    c                 C   s   | t |  S r   )rB   rW   r	   r	   r   r   ^   r   c                 C   s   | j t|  S r   )rR   rB   rW   r	   r	   r   r   `   r   z*single positional indexer is out-of-boundsc              	   C   s.   | d }t j||d || W 5 Q R X d S )Nr   r;   )rC   rD   )rN   indexerZexpected_errorexpected_error_msgr   r	   r	   r   #test_series_getitem_indexing_errorsV   s    r[   c                 C   s6   | d }|dd |D  }||dk }t || d S )Nr   c                 s   s   | ]}|d kV  qdS )r   Nr	   ).0r   r	   r	   r   	<genexpr>u   s     z7test_series_getitem_corner_generator.<locals>.<genexpr>r   )r   r    )rN   r   r#   r!   r	   r	   r   $test_series_getitem_corner_generatorq   s    r^   c                 C   s2   | j }|jd d df }|d j}t|| d S )Nr   )fooZone)Tvaluesr   Zassert_almost_equal) multiindex_dataframe_random_datarF   r!   r#   r	   r	   r   test_getitem_simple   s    
rc   zindexer,expected_error_msgc                 C   s   | d S )N)r_   Zfourr	   rF   r	   r	   r   r      r   z^\('foo', 'four'\)$c                 C   s   | d S )NZfoobarr	   rd   r	   r	   r   r      r   z
^'foobar'$c              	   C   s,   | j }tjt|d || W 5 Q R X d S )Nr;   )r`   rC   rD   rE   )rb   rY   rZ   rF   r	   r	   r   #test_frame_getitem_simple_key_error   s    
re   c                  C   sh   t dddgdddgd} ddgdd	gd
dgg| _| d }t dgdgdgg| jd
gd}t|| d S )N1234)abzlevel1 item1zlevel1 item2rX   zlevel2 item2zlevel3 item1zlevel3 item2r9   )r   r:   r   r   assert_frame_equalrF   r#   r!   r	   r	   r   *test_frame_getitem_multicolumn_empty_level   s      rn   zindexer,expected_slicec                 C   s   | d S )Nr_   r	   rd   r	   r	   r   r      r   c                 C   s   | d S Nbarr	   rd   r	   r	   r   r      r   r1   c                 C   s   | j d d df S ro   r   rd   r	   r	   r   r      r   c                 C   s>   | j }|j|j| d}|jd|_||}t|| d S )Nr:   r   )r`   rK   r:   rL   r   rl   )rb   rY   Zexpected_slicerF   r!   r#   r	   r	   r   test_frame_getitem_toplevel   s
    rr   c                  C   s   ddddddgddddddgdd	d
dddgg} t t|  }t|}ttjdd|d}|d }|d d}t	
|| |d }|d }|d}t	
|| d S )Nrj   toproutine1Zroutine2rX   ZODresult1Zresult2ZwxZwyr/   r0   rq   )rj   rX   rX   )rt   ru   )rt   ru   rX   )sortedzipr   r   r   r?   r@   rA   renamer   r    )arraysZtuplesr   rF   r#   r!   r	   r	   r   test_frame_mixed_depth_get   s    

rz   c           	      C   sr  | }dddg}t d|dgd|dgd|d	gd
|dgg|dddg}|d d|d< d|f}|jd | }t d|dgd|dgg|dddg}|d d|d< t|| |j|d  }t d|dgd|d	gd
|dgg|dddg}|d d|d< t|| d|fd|f }}|j|| }t d|dgd|d	gg|dddg}|d d|d< t|| d S )Nrj   rk   c               !   )   +   rq   int64)r   Z	set_indexZastyper   r   rl   )	nulls_fixturencolsrF   idxr#   r!   idx1idx2r	   r	   r   !test_frame_getitem_nan_multiindex   s8    
"& &r   zindexer,expectedrk   rp   r0   rk   rp   r   r:   dtyperj   r/   rj   r_   r_   )r7   r6   )r   r   c                 C   sP   t dddgdddggtddd	|fgd
d}|jd d | f }t|| d S )Nr   r   r   r/   r1   r0   r   r   rk   r   r   )r   r   r   r   r   Zassert_equal)rY   r!   r   rF   r#   r	   r	   r   &test_frame_getitem_nan_cols_multiindex   s    Cr   c               	   C   s   ddddddgddd	d
ddgddd	d
ddgg} dddg}t ddgddddggddddddgdd
d
dddggddgd}t| ||dS )z;Fixture for DataFrame used in tests for gh-4145 and gh-4146rj   der{   frk   r   r/   r1   r   r0   r   h1h3h5r   r   A1A2ZB1B2r   mainsubr5   r9   )r   r   )datar   r:   r	   r	   r   dataframe_with_duplicate_index>  s    .
r   rY   c                 C   s   | d S Nr   r   r	   rd   r	   r	   r   r   L  r   c                 C   s   | j d d df S r   r   rd   r	   r	   r   r   L  r   c                 C   sV   | }t dddg}tjdgddgd}tdd	d	gg||d
j}||}t|| d S )Nr   r   r   r   r   r   r   rj   r   r9   )r   r   r   r   r`   r   rl   )r   rY   rF   r   r:   r!   r#   r	   r	   r   test_frame_mi_accessK  s    r   c                 C   s:   | }t dddgdddgdd}|d d }t|| d S )	Nrj   r   r   r   r   r   )r   r   r   )r   r   r    r   rF   r!   r#   r	   r	   r   #test_frame_mi_access_returns_seriesY  s    r   c                 C   sR   | }t dddgdddggtddgdddd	d
gdj}|d d }t|| d S )Nr   r/   r   r1   r   r   r>   r   r   r   r9   r   )r   r   r`   r   rl   r   r	   r	   r   "test_frame_mi_access_returns_framed  s    r   c                  C   s\   t dtdtdgdggd} | g  }t ddgtdgdggg g gdd}t|| d S )Nr   r   r   r9   )r6   r7   )r   ranger   Zfrom_productr   rl   rm   r	   r	   r   test_frame_mi_empty_slicep  s      r   c                  C   s   ddddgddddgg} t j| dd}tddddg|d	gd
}|j|jd d d	f dkd d f j}|j|d d f }|jdgt|j d d f }t|| d|j|j|jd d d	f dk jd	f< |}tddddg|d	gd
}t|| d S )Nrj   rk   )r   r   r   r   r   r   r/   valuer9   r   Fr1   )r   Zfrom_arraysr   r   r   rB   r   rl   )ry   r   rF   Zempty_multiindexr#   r!   r	   r	   r   test_loc_empty_multiindexz  s    &(r   )(Znumpyr?   rC   Zpandasr   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.indexingr   markZparametrizer$   rG   rO   rT   rE   
IndexErrorr[   r^   rc   re   rn   slicerr   rz   r   nanr   r   Zfixturer   r   r   r   r   r   r	   r	   r	   r   <module>   s   *
	











  <

 

