a
    j=ic@                     @   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g dejg dd d!eg dgg d"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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dAdB Z%ejdCdDdEgdFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTS )UBaseGetitemTestsz%Tests for ExtensionArray.__getitem__.c                 C   sT   t |}|jd d }t |d d }| || |jg d }| || d S )N   r            )pdSeriesilocassert_series_equalselfdataserresultexpected r   t/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/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g d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   namer   r   )	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   sT   t |}|jd d }t |d d }| || |jg d }| || d S )Nr   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g d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   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J t|d }t ||jjs:J d S Nr   )
isinstancer   typer	   r
   r   r   r   r   r   r   test_getitem_scalaru   s    z$BaseGetitemTests.test_getitem_scalarc                 C   s6  d}t jt|d |d  W d    n1 s00    Y  t jt|d |d  W d    n1 sf0    Y  t|}ddddd	| d
| d|d  d| d|d  d| g}t jt|d ||d   W d    n1 s0    Y  t jt|d || d   W d    n1 s(0    Y  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J 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J t|t|s*J |tjg dd }| || d S )Nr   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*J t|t|s<J t jt|td}t|| }t|dkslJ |j|jks|J d|d< || }t|dksJ t|t|sJ t|| }t|dksJ |j|jksJ d S )Nr   r   Tr   )	r   zerosr!   boolr.   r/   r	   r
   r   )r   r   maskr   r   r   r   test_getitem_mask   s    z"BaseGetitemTests.test_getitem_maskc                 C   s   t ddg}dt| }tjt|d ||  W d    n1 sH0    Y  tj|dd}tjt|d ||  W d    n1 s0    Y  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s2J t|t|sDJ t || }t|dksbJ |j	|j	ksrJ d|d d< |
g d}|| }| || t |}t || }| || d S )NrC   r   rF   r   T   )r   r   r   r   r   )r	   r?   r   rB   shaper!   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idxr   r   r   ZInt64r   )listinteger-arrayznumpy-array)Zidsc                 C   sl   || }t |dksJ t|t|s*J |g d}| || t|}t|| }| || d S )Nr   rP   )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_arrayr   r   r   rQ   rR   c                 C   s>   d}t jt|d ||  W d    n1 s00    Y  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   s^   d}t j|dd tt|D d}tjt|d ||  W d    n1 sP0    Y  d S )NrT   c                 S   s   g | ]}t d qS )r   )tmZrands).0_r   r   r   
<listcomp>      zTBaseGetitemTests.test_getitem_series_integer_with_missing_raises.<locals>.<listcomp>r+   r2   )r	   r
   ranger!   r5   r6   rU   )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J |t d }t|t|s<J d S )Nr   r   )slicer.   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s8J |ddg}|jddg }| || tjt	dd	 |t
d}W d    n1 s0    Y  |jd
dg }| || |dd u sJ ||j d d u sJ t j|d d tdd}|d|jd ksJ |t
dd}|jg d }| || |d}|d u sZJ |d|jd kstJ |d|jd ksJ |t|d u sJ t |}td  |d d d }W d    n1 s0    Y  |dd u sJ d S )Nc                 S   s   g | ]}d | qS )r   r   )rY   ir   r   r   r[   5  r\   z-BaseGetitemTests.test_get.<locals>.<listcomp>r]   r   r      r   zlabel-basedr2   r   r   r&   Zabcdefcbd)r   r   r   Z)r	   r
   r^   r!   getr   r   rX   Zassert_produces_warningFutureWarningr`   r+   maxrQ   )r   r   rM   r   r   s2r   r   r   test_get3  s2     ,

.zBaseGetitemTests.test_getc                 C   sX   t |g d }|jd |d ks(J |jd |d ks>J |jd |d ksTJ d S )Nr   r   r   r   r   r   r   )r	   r
   r   r0   r   r   r   test_take_sequenceY  s    z#BaseGetitemTests.test_take_sequencec                 C   s   | ddg}|j|jksJ |d |d ks2J |d |d ksFJ |j ddgd|d}|d |d ksnJ ||d |sJ tjtdd$ | t|d g W d    n1 s0    Y  d S )Nr   r&   r   T)
allow_fill
fill_valuezout of boundsr2   )rJ   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.J d}tjt|d | dg W d    n1 sb0    Y  tjtdd | ddg W d    n1 s0    Y  d S )	Nr   r&   Trp   z;cannot do a non-empty take from an empty axes|out of boundsr2   zcannot do a non-empty taker   )rJ   r5   r6   r7   )r   r   r=   r<   emptyr   r9   r   r   r   test_take_emptyl  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_negativez  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rq   rp   )_from_sequencer   rJ   r@   )r   r;   rq   naarrr   r   r   r   r   test_take_non_na_fill_value  s    z,BaseGetitemTests.test_take_non_na_fill_valuec                 C   sF   t jtdd$ |jddg|dd W d    n1 s80    Y  d S )N r2   r   Trx   )r5   r6   rU   rJ   )r   r   r=   r   r   r   &test_take_pandas_style_negative_raises  s    z7BaseGetitemTests.test_take_pandas_style_negative_raisesrp   TFc                 C   sV   |d d }t jtdd( |jtddg|d W d    n1 sH0    Y  d S )Nr   zout of bounds|out-of-boundsr2   r   rs   )r5   r6   r7   rJ   r   Zasarray)r   r   rp   r{   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   ry   r!   r   r   )r   r   rM   r   r   r   r   r   test_take_series  s    
"z!BaseGetitemTests.test_take_seriesc                 C   s   t |}|g d}t j|g dg d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 )Nrn   r]   r&   r   r   r   )r	   r
   reindexrJ   r   r!   ry   r   )r   r   r=   rM   r   r   rv   r   r   r   test_reindex  s     
zBaseGetitemTests.test_reindexc                 C   sl   |d }|d }|j ||g|jd}t|}|jg d|d}t|j |||g|jd}| || d S )Nr   r   r   rP   )rq   )ry   r   r	   r
   r   r   )r   r;   Zvalidrz   r{   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,J |jjd jdksBJ t|jdr`|jjjdks`J d S )Nr   r   r   blocks)r	   r   r(   ndimZ_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*J d}tjt|d  |d d   W d    n1 sb0    Y  tjt|d |  W d    n1 s0    Y  d S )Nr   r   z6can only convert an array of size 1 to a Python scalarr2   )r	   r
   itemr5   r6   rU   )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$   rZ   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   rS   rL   rV   Zxfailr_   ra   rb   rm   ro   rr   ru   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   	   sj   			
$
$
$&
		r   )numpyr   r5   Zpandasr	   Zpandas._testingZ_testingrX   Z pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s
   