a
    Pf9=                     @   s6   d dl Zd dlZd dlZd dlmZ G dd dZdS )    Nc                	   @   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+dRS )SBaseGetitemTestsz%Tests for ExtensionArray.__getitem__.c                 C   sT   t |}|jd d }t |d d }t|| |jg d }t|| d S )N   r            )pdSeriesiloctmassert_series_equalselfdataserresultexpected r   \/var/www/ai-form-bot/venv/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 }t|| |jg ddgf }t|| t j|d d dd}|jd ddf }t	|| |jd ddf }t	|| |jd d d d d	f }t||dg  |d
dg jd d d d d	f }t||d
g  d S )Nint64dtypeABr   r   r   r   namer   r   )
r   	DataFramenparangelenr
   r   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 }t|| |jd d d df }t|| |jd d d df }t|| |jd d d d df }t|| |jd d ddf }t||jd d d df  |jd d dd f }t|| d S )Nr   r   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   sT   t |}|jd d }t |d d }t|| |jg d }t|| d S )Nr   r   r   )r   r	   locr   r   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 }t|| |jg ddgf }t|| t j|d d dd}|jd ddf }t	|| |jd ddf }t	|| d S )	Nr   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|| t j|d gdgt|d |jd}|jd }t|| d S )Nr   r   )indexr   r   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J t|d }t ||jjs:J d S Nr   )
isinstancer   typer   r	   r   r   r   r   r   r   test_getitem_scalart   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 }t|| d S )Nr   r   r   )r!   r.   r/   r   arrayr   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 |}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   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|| t 	|}|| }||d }t
|| d S )NrC   r   rF   r   Tr   F)r   r?   r   rB   rI   NAZfillnar   r@   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|}t|| }t|| d S )Nr   rP   )	r!   r.   r/   rJ   r   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 )d   )chr.0ir   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 }t || |d d df }t || |dd df }t ||d d  |d ddf }t ||d d  |dd d df }t ||d d d  |d d ddf }t ||d d d  d S )N.r   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|| |td}|jdd	g }t|| |d
d u sJ ||j	
 d	 d u sJ t j|d d tdd}|d|jd ksJ |tdd}|jg d }t|| |d}|d u s*J d}tjt|d\ |d|jd ksXJ |d
|jd
 ksrJ |t|d u sJ W d    n1 s0    Y  t |}td  |d d d }W d    n1 s0    Y  |d	d u sJ d S )Nc                 S   s   g | ]}d | qS )r   r   rZ   r   r   r   r]   4  r^   z-BaseGetitemTests.test_get.<locals>.<listcomp>r_   r   r      r   r   r   r&   Zabcdefcbd)r   r   r   Zz;Series.__getitem__ treating keys as positions is deprecatedr2   )r   r	   r`   r!   getr
   r   r   rb   r+   maxrQ   Zassert_produces_warningFutureWarning)r   r   rM   r   r   r9   s2r   r   r   test_get2  s4     
8
.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rq   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}t|| d S )Nr   r   r&   )r!   rJ   r   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}t|| d S )Nr   r   r   r&   Trr   rq   )_from_sequencer   rJ   r   r@   )r   r;   rr   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   Try   )r5   r6   rU   rJ   )r   r   r=   r   r   r   &test_take_pandas_style_negative_raises  s    z7BaseGetitemTests.test_take_pandas_style_negative_raisesrq   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   rt   )r5   r6   r7   rJ   r   Zasarray)r   r   rq   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}t|| d S )Nr   r&   r   r   r_   )r   r	   rJ   rz   r!   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|| t|}|dd|g}t j|j||d |g|jddd|gd}t|| |||d g}t j|j||g|jd||d gd}t|| d S )Nro   r_   r&   r   r   r   )	r   r	   reindexrJ   r   r   r!   rz   r   )r   r   r=   rM   r   r   rw   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}t|| d S )Nr   r   r   rP   )rr   )rz   r   r   r	   r   r   r   )r   r;   Zvalidr{   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_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*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_itemN),__name__
__module____qualname____doc__r   r%   r'   r)   r*   r,   r1   r:   r>   rA   rE   rG   rK   rN   r5   markZparametrizer   r?   r   rS   rL   rV   Zxfailra   rc   rd   rn   rp   rs   rv   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r      sh   			
$
$
$'
		r   )	numpyr   r5   Zpandasr   Zpandas._testingZ_testingr   r   r   r   r   r   <module>   s   