U
    sVc@                     @   sD   d dl Zd dlZd dlZd dlm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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ejjd,d-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d0d1 Zd2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%ejdBdCdDgdEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSS )T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-xj8nt62q/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_block1   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_seriesG   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_frameP   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_dtypef   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_scalaru   s    z$BaseGetitemTests.test_getitem_scalarc                 C   s   d}t jt|d |d  W 5 Q R X t jt|d |d  W 5 Q R X t|}ddddd	| d
| d|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 )Nz{only integers, slices \(`:`\), ellipsis \(`...`\), numpy.newaxis \(`None`\) and integer or boolean arrays are valid indicesmatchZfoog      @|zlist index out of rangezindex out of boundszOut of bounds accessz loc must be an integer between -z and zindex r   z' is out of bounds for axis 0 with size zindex -)pytestraises
IndexErrorr    join)r   r   msgZubr   r   r   test_getitem_invalid|   s(    
z%BaseGetitemTests.test_getitem_invalidc                 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 r2   booleanr   )r   r?   r    r5   r6   r7   r   )r   r   rD   r9   r   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 )NrC   r   rF   r   T   r   r   r   r   )r   r?   r   rB   shaper    r/   r-   r.   r	   r   taker@   r   )r   r   rD   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 )NrC   r   rF   r   Tr   F)
r   r?   r   rB   rI   NAZfillnar@   r	   r   )r   r   rD   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.   rJ   r@   r   r	   r   )r   r   rO   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 )N9Cannot index with an integer indexer containing NA valuesr2   )r5   r6   
ValueError)r   r   rO   r9   r   r   r   (test_getitem_integer_with_missing_raises   s    z9BaseGetitemTests.test_getitem_integer_with_missing_raiseszSTries label-based and raises KeyError; in some cases raises when calling np.asarray)reasonc              	   C   sJ   d}t j|dd tt|D d}tjt|d ||  W 5 Q R X d S )NrS   c                 S   s   g | ]}t d qS )r   )tmZrands).0_r   r   r   
<listcomp>  s     zTBaseGetitemTests.test_getitem_series_integer_with_missing_raises.<locals>.<listcomp>r*   r2   )r   r	   ranger    r5   r6   rT   )r   r   rO   r9   r   r   r   r   /test_getitem_series_integer_with_missing_raises  s    
 z@BaseGetitemTests.test_getitem_series_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   )r@   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 |}td  |d d d }W 5 Q R X |d	d kstd S )Nc                 S   s   g | ]}d | qS )r   r   )rX   ir   r   r   rZ   5  s     z-BaseGetitemTests.test_get.<locals>.<listcomp>r[   r   r      r   r   r   r%   ZabcdefcbdZ)r   r	   r\   r    getr
   r/   r   r^   r*   maxrP   rW   Zassert_produces_warning)r   r   rM   r   r   s2r   r   r   test_get3  s0     

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_sequenceX  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 boundsr2   )rJ   r   r/   r5   r6   r7   r    )r   r   r=   r<   r   r   r   r   	test_take^  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rl   z;cannot do a non-empty take from an empty axes|out of boundsr2   zcannot do a non-empty taker   )rJ   r/   r5   r6   r7   )r   r   r=   r<   emptyr   r9   r   r   r   test_take_emptyk  s    z BaseGetitemTests.test_take_emptyc                 C   sJ   t |}|d| |d dg}|dd|d |d g}| || d S )Nr   r   r%   )r    rJ   r@   )r   r   nr   r   r   r   r   test_take_negativey  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rm   rl   )_from_sequencer   rJ   r@   )r   r;   rm   naarrr   r   r   r   r   test_take_non_na_fill_value  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 r2   r   Trt   )r5   r6   rT   rJ   )r   r   r=   r   r   r   &test_take_pandas_style_negative_raises  s    z7BaseGetitemTests.test_take_pandas_style_negative_raisesrl   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-boundsr2   r   ro   )r5   r6   r7   rJ   r   Zasarray)r   r   rl   rw   r   r   r   test_take_out_of_bounds_raises  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   r[   )r   r	   rJ   ru   r    r   r   )r   r   rM   r   r   r   r   r   test_take_series  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   r[   r%   r   )r   r	   reindexrJ   r   r    ru   r   )r   r   r=   rM   r   r   rr   r   r   r   test_reindex  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   )rm   )ru   r   r   r	   r~   r   )r   r;   Zvalidrv   rw   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_mgr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 scalarr2   )r   r	   itemr/   r5   r6   rT   )r   r   rM   r   r9   r   r   r   	test_item  s    
zBaseGetitemTests.test_itemc                 C   s^   G dd dt jj}t d|tjddgtdi}|jd d }| t	|d jj
d d S )	Nc                       s    e Zd ZdZ fddZ  ZS )zBBaseGetitemTests.test_ellipsis_index.<locals>.CapturingStringArrayz6Extend StringArray to capture arguments to __getitem__c                    s   || _ t |S )N)last_item_argsuper__getitem__)r   r   	__class__r   r   r     s    zNBaseGetitemTests.test_ellipsis_index.<locals>.CapturingStringArray.__getitem__)__name__
__module____qualname____doc__r   __classcell__r   r   r   r   CapturingStringArray  s   r   Zcol1ZhelloZworldr   r   zslice(None, 1, None))r   r   ZStringArrayr   r   r?   objectr
   Zassert_equalstrr   )r   r   r#   rY   r   r   r   test_ellipsis_index  s    z$BaseGetitemTests.test_ellipsis_indexN)-r   r   r   r   r   r$   r&   r(   r)   r+   r1   r:   r>   rA   rE   rG   rK   rN   r5   markZparametrizer   r?   r   rR   rL   rU   Zxfailr]   r_   r`   rj   rk   rn   rq   rs   rx   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   	   sj   			
*
$
$%
		r   )Znumpyr   r5   Zpandasr   Zpandas._testingZ_testingrW   Z pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s
   