U
    f/e+7                     @   s8   d dl Zd dlZd dlZd dlmZ G dd deZdS )    N)BaseExtensionTestsc                	   @   s  e Zd 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ejjddddgejdddgd d!edddggd"d#d$gd%d&d' Zejjddddejgejdddejgd d!gd"d#gd%d(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"ejd<d=d>gd?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKS )LBaseGetitemTestsz%Tests for ExtensionArray.__getitem__.c                 C   sX   t |}|jd d }t |d d }| || |jddddg }| || d S )N   r            )pdSeriesilocassert_series_equalselfdataserresultexpected r   G/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/extension/base/getitem.pytest_iloc_series   s    
z!BaseGetitemTests.test_iloc_seriesc                 C   s*  t |tjt|ddd}t d|d d i}|jd ddgf }| || |jdddd	gdgf }| || t j|d d dd
}|jd ddf }| || |jd ddf }| || |jd d d d df }| ||dg  |ddg jd d d d df }| ||dg  d S )Nint64dtypeABr   r   r   r   r   r   namer   )	r   	DataFramenparangelenr
   assert_frame_equalr	   r   r   r   dfr   r   r   r   r   test_iloc_frame   s     z BaseGetitemTests.test_iloc_framec                 C   s   t d|i}|jd d d d f }| || |jd d d df }| || |jd d d df }| || |jd d d d df }| || |jd d ddf }| ||jd d d df  |jd d dd f }| || d S )Nr   r   r   r   )r   r   r
   r!   )r   r   r#   r   r   r   r   test_iloc_frame_single_block0   s    z-BaseGetitemTests.test_iloc_frame_single_blockc                 C   sX   t |}|jd d }t |d d }| || |jddddg }| || d S )Nr   r   r   r   r   )r   r	   locr   r   r   r   r   test_loc_seriesF   s    
z BaseGetitemTests.test_loc_seriesc                 C   s   t |tjt|ddd}t d|d d i}|jd ddgf }| || |jddd	dgdgf }| || t j|d d dd
}|jd ddf }| || |jd ddf }| || d S )Nr   r   r   r   r   r   r   r   r   r   )	r   r   r   r   r    r'   r!   r	   r   r"   r   r   r   test_loc_frameO   s    zBaseGetitemTests.test_loc_framec                 C   s~   t d|i}t j|d gdgd|jd}|jd }| || t j|d gdgt|d |jd}|jd }| || d S )Nr   r   )indexr   r   r%   r   )r   r   r	   r   r'   r   r    r
   r"   r   r   r    test_loc_iloc_frame_single_dtypee   s    
  
 
z1BaseGetitemTests.test_loc_iloc_frame_single_dtypec                 C   s>   |d }t ||jjstt|d }t ||jjs:td S Nr   )
isinstancer   typeAssertionErrorr   r	   r   r   r   r   r   r   test_getitem_scalart   s    z$BaseGetitemTests.test_getitem_scalarc                 C   s   |d }|||st d S r,   )r/   )r   data_missingna_cmpna_valuer   r   r   r   test_getitem_scalar_na{   s    z'BaseGetitemTests.test_getitem_scalar_nac                 C   sL   |g  }t |dkstt|t|s*t|tjg dd }| || d S )Nr   r   r   )r    r/   r-   r.   r   arrayassert_extension_array_equal)r   r   r   r   r   r   r   test_getitem_empty   s
    z#BaseGetitemTests.test_getitem_emptyc                 C   s   t jt|td}|| }t|dks*tt|t|s<tt jt|td}t|| }t|dkslt|j	|j	ks|td|d< || }t|dkstt|t|stt|| }t|dkst|j	|j	kstd S )Nr   r   Tr   )
r   zerosr    boolr/   r-   r.   r   r	   r   )r   r   maskr   r   r   r   test_getitem_mask   s    z"BaseGetitemTests.test_getitem_maskc              	   C   sr   t ddg}dt| }tjt|d ||  W 5 Q R X tj|dd}tjt|d ||  W 5 Q R X d S )NTFz-Boolean index has wrong length: 2 instead of matchbooleanr   )r   r6   r    pytestraises
IndexErrorr   )r   r   r;   msgr   r   r   test_getitem_mask_raises   s    z)BaseGetitemTests.test_getitem_mask_raisesc                 C   s   t jtj|jdddd}|| }t|dks2tt|t|sDtt 	|| }t|dksbt|j
|j
ksrtd|d d< |dddd	d
g}|| }| || t 	|}t 	|| }| || d S )Nr:   r   r?   r   T   r   r   r   r   )r   r6   r   r9   shaper    r/   r-   r.   r	   r   taker7   r   )r   r   r;   r   r   r   r   r   test_getitem_boolean_array_mask   s    
z0BaseGetitemTests.test_getitem_boolean_array_maskc                 C   s   t jtj|jdddd}t j|d d< d|dd< || }||d }| || t |}|| }||d }| 	|| d S )Nr:   r   r?   r   Tr   F)
r   r6   r   r9   rF   NAZfillnar7   r	   r   )r   r   r;   r   r   sr   r   r   (test_getitem_boolean_na_treated_as_false   s    
z9BaseGetitemTests.test_getitem_boolean_na_treated_as_falseidxr   r   r   ZInt64r   listzinteger-arrayznumpy-array)idsc                 C   sn   || }t |dkstt|t|s*t|dddg}| || t|}t|| }| || d S )Nr   r   r   r   )	r    r/   r-   r.   rG   r7   r   r	   r   )r   r   rL   r   r   r   r   r   test_getitem_integer_array   s    
z+BaseGetitemTests.test_getitem_integer_arrayc              	   C   s*   d}t jt|d ||  W 5 Q R X d S )Nz9Cannot index with an integer indexer containing NA valuesr=   )r@   rA   
ValueError)r   r   rL   rC   r   r   r   (test_getitem_integer_with_missing_raises   s    z9BaseGetitemTests.test_getitem_integer_with_missing_raisesc                 C   s@   |t d }t|t|st|t d }t|t|s<td S )Nr   r   )slicer-   r.   r/   r0   r   r   r   test_getitem_slice   s    z#BaseGetitemTests.test_getitem_slicec                 C   s   |dd d f }|  || |d d df }|  || |dd df }|  ||d d  |d ddf }|  ||d d  |dd d df }|  ||d d d  |d d ddf }|  ||d d d  d S )N.r   r   )r7   r0   r   r   r   test_getitem_ellipsis_and_slice   s    z0BaseGetitemTests.test_getitem_ellipsis_and_slicec                 C   s  t j|dd tt|D d}|d|jd ks8t|ddg}|jddg }| || |td}|jdd	g }| || |d
d kst||j	
 d	 d kstt j|d d tdd}|d|jd kst|tdd}|jd	ddg }| || |d}|d ks,t|d|jd ksFt|d
|jd
 ks`t|t|d ksxtt |}|d d d }|d	d kstd S )Nc                 S   s   g | ]}d | qS )r   r   ).0ir   r   r   
<listcomp>  s     z-BaseGetitemTests.test_get.<locals>.<listcomp>r*   r   r      r   r   r   r%   ZabcdefcbdZ)r   r	   ranger    getr
   r/   r   rR   r*   maxrM   )r   r   rJ   r   r   s2r   r   r   test_get  s.     

zBaseGetitemTests.test_getc                 C   sZ   t |dddg }|jd |d ks*t|jd |d ks@t|jd |d ksVtd S )Nr   r   r   r   )r   r	   r
   r/   r0   r   r   r   test_take_sequence/  s    z#BaseGetitemTests.test_take_sequencec              	   C   s   | ddg}|j|jkst|d |d ks2t|d |d ksFt|j ddgd|d}|d |d ksnt||d |sttjtdd | t|d g W 5 Q R X d S )Nr   r%   r   T)
allow_fill
fill_valuezout of boundsr=   )rG   r   r/   r@   rA   rB   r    )r   r   r4   r3   r   r   r   r   	test_take5  s    zBaseGetitemTests.test_takec              	   C   s   |d d }|j dgdd}||d |s.td}tjt|d | dg W 5 Q R X tjtdd | ddg W 5 Q R X d S )	Nr   r%   Trd   z;cannot do a non-empty take from an empty axes|out of boundsr=   zcannot do a non-empty taker   )rG   r/   r@   rA   rB   )r   r   r4   r3   emptyr   rC   r   r   r   test_take_emptyB  s    z BaseGetitemTests.test_take_emptyc                 C   sJ   t |}|d| |d dg}|dd|d |d g}| || d S )Nr   r   r%   )r    rG   r7   )r   r   nr   r   r   r   r   test_take_negativeP  s    z#BaseGetitemTests.test_take_negativec                 C   sX   |d }|d }|j |||g|jd}|jddg|dd}|ddg}| || d S )Nr   r   r   r%   Tre   rd   )_from_sequencer   rG   r7   )r   r2   re   naarrr   r   r   r   r   test_take_non_na_fill_valueW  s     z,BaseGetitemTests.test_take_non_na_fill_valuec              	   C   s2   t jtdd |jddg|dd W 5 Q R X d S )N r=   r   Trl   )r@   rA   rP   rG   )r   r   r4   r   r   r   &test_take_pandas_style_negative_raisesb  s    z7BaseGetitemTests.test_take_pandas_style_negative_raisesrd   TFc              	   C   sB   |d d }t jtdd |jtddg|d W 5 Q R X d S )Nr   zout of bounds|out-of-boundsr=   r   rg   )r@   rA   rB   rG   r   Zasarray)r   r   rd   ro   r   r   r   test_take_out_of_bounds_raisesf  s    z/BaseGetitemTests.test_take_out_of_bounds_raisesc                 C   sb   t |}|ddg}t j|j|d |t|d  g|jddt|d gd}| || d S )Nr   r%   r   r   rX   )r   r	   rG   rm   r    r   r   )r   r   rJ   r   r   r   r   r   test_take_seriesm  s    
"z!BaseGetitemTests.test_take_seriesc                 C   s   t |}|dddg}t j|dddgdddgd}| || t|}|dd|g}t j|j||d |g|jddd|gd}| || |||d g}t j|j||g|jd||d gd}| || d S )Nr   r   r   rX   r%   r   )r   r	   reindexrG   r   r    rm   r   )r   r   r4   rJ   r   r   rj   r   r   r   test_reindexv  s"    
  
zBaseGetitemTests.test_reindexc                 C   sn   |d }|d }|j ||g|jd}t|}|jdddg|d}t|j |||g|jd}| || d S )Nr   r   r   r   )re   )rm   r   r   r	   rv   r   )r   r2   Zvalidrn   ro   r   r   r   r   r   r   test_reindex_non_na_fill_value  s    
z/BaseGetitemTests.test_reindex_non_na_fill_valuec                 C   sd   t d|i}|jdgdf }|jdks,t|jjd jdksBtt|jdr`|jjjdks`td S )Nr   r   r   blocks)	r   r   r'   ndimr/   Z_mgrZarrayshasattr_block)r   r   r#   resr   r   r   test_loc_len1  s    zBaseGetitemTests.test_loc_len1c              	   C   s~   t |}|d d  }||d ks*td}tjt|d |d d   W 5 Q R X tjt|d |  W 5 Q R X d S )Nr   r   z6can only convert an array of size 1 to a Python scalarr=   )r   r	   itemr/   r@   rA   rP   )r   r   rJ   r   rC   r   r   r   	test_item  s    
zBaseGetitemTests.test_itemN))__name__
__module____qualname____doc__r   r$   r&   r(   r)   r+   r1   r5   r8   r<   rD   rH   rK   r@   markZparametrizer   r6   r   rO   rI   rQ   rS   rT   rb   rc   rf   ri   rk   rp   rs   rt   ru   rw   rx   r~   r   r   r   r   r   r      sT   			
*
$
#
		r   )Znumpyr   r@   Zpandasr   Z pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s   