o
    5c@                     @   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   Y/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/extension/base/getitem.pytest_iloc_series      
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   r   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 sw   Y  t jt|d |d  W d    n1 s3w   Y  t|}ddddd	| d
| d|d  d| d|d  d| g}t jt|d ||d   W d    n1 suw   Y  t jt|d || d   W d    d S 1 sw   Y  d S )Nz{only integers, slices \(`:`\), ellipsis \(`...`\), numpy.newaxis \(`None`\) and integer or boolean arrays are valid indicesmatch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   msgubr   r   r   test_getitem_invalid|   s0   


"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/   r0   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s6J |j|jks>J d|d< || }t|dksNJ t|t|sWJ t|| }t|dksfJ |j|jksnJ d S )Nr   r   Tr   )	r    zerosr"   boolr/   r0   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 s$w   Y  tj|dd}tjt|d ||  W d    d S 1 sGw   Y  d S )NTFz-Boolean index has wrong length: 2 instead of r3   booleanr   )r    rB   r"   r7   r8   r9   r	   )r   r   rG   r;   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sJ t|t|s"J t || }t|dks1J |j	|j	ks9J d|d d< |
g d}|| }| || t |}t || }| || d S )NrF   r   rI   r   T   )r   r   r   r   r   )r	   rB   r    rE   shaper"   r/   r0   r
   r   takerC   r   )r   r   rG   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 )NrF   r   rI   r   Tr   F)
r	   rB   r    rE   rL   NAfillnarC   r
   r   )r   r   rG   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   Int64r   )listinteger-arrayznumpy-array)idsc                 C   sl   || }t |dksJ t|t|sJ |g d}| || t|}t|| }| || d S )Nr   rT   )r"   r/   r0   rM   rC   r	   r
   r   )r   r   rS   r   r   r   r   r   test_getitem_integer_array   s   
z+BaseGetitemTests.test_getitem_integer_arrayr   r   r   rV   rW   c                 C   s@   d}t jt|d ||  W d    d S 1 sw   Y  d S )N9Cannot index with an integer indexer containing NA valuesr3   )r7   r8   
ValueError)r   r   rS   r;   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    d S 1 s)w   Y  d S )NrZ   c                 S   s   g | ]}t d qS )r   )tmrands).0_r   r   r   
<listcomp>  s    zTBaseGetitemTests.test_getitem_series_integer_with_missing_raises.<locals>.<listcomp>r,   r3   )r	   r
   ranger"   r7   r8   r[   )r   r   rS   r;   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/   r0   r1   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   )rC   r1   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sJ |ddg}|jddg }| || tjt	dd	 |t
d}W d    n1 sIw   Y  |jd
dg }| || |dd u sdJ ||j d d u srJ t j|d d tdd}|d|jd ksJ |t
dd}|jg d }| || |d}|d u sJ |d|jd ksJ |d|jd ksJ |t|d u sJ t |}td  |d d d }W d    n1 sw   Y  |dd u sJ d S )Nc                 S   s   g | ]}d | qS )r   r   )r`   ir   r   r   rb   5  s    z-BaseGetitemTests.test_get.<locals>.<listcomp>rc   r   r      r   zlabel-basedr3   r   r   r'   abcdefcbd)r   r   r   Z)r	   r
   rd   r"   getr   r   r^   assert_produces_warningFutureWarningrf   r,   maxrV   )r   r   rQ   r   r   s2r   r   r   test_get3  s6    

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s*J d S )Nr   r   r   r   r   r   r   )r	   r
   r   r1   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sJ |d |d ks#J |j ddgd|d}|d |d ks7J ||d |s@J tjtdd | t|d g W d    d S 1 s]w   Y  d S )Nr   r'   r   T)
allow_fill
fill_valuezout of boundsr3   )rM   r   r7   r8   r9   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 s1w   Y  tjtdd | ddg W d    d S 1 sPw   Y  d S )	Nr   r'   Trx   z;cannot do a non-empty take from an empty axes|out of boundsr3   zcannot do a non-empty taker   )rM   r7   r8   r9   )r   r   r@   r?   emptyr   r;   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"   rM   rC   )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ry   rx   )_from_sequencer   rM   rC   )r   r>   ry   naarrr   r   r   r   r   test_take_non_na_fill_value  s   z,BaseGetitemTests.test_take_non_na_fill_valuec                 C   sH   t jtdd |jddg|dd W d    d S 1 sw   Y  d S )N r3   r   Tr   )r7   r8   r[   rM   )r   r   r@   r   r   r   &test_take_pandas_style_negative_raises  s   "z7BaseGetitemTests.test_take_pandas_style_negative_raisesrx   TFc                 C   sX   |d d }t jtdd |jtddg|d W d    d S 1 s%w   Y  d S )Nr   zout of bounds|out-of-boundsr3   r   r{   )r7   r8   r9   rM   r    asarray)r   r   rx   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   rc   )r	   r
   rM   r   r"   r   r   )r   r   rQ   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 )Nrv   rc   r'   r   r   r   )r	   r
   reindexrM   r   r"   r   r   )r   r   r@   rQ   r   r   r~   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   rT   )ry   )r   r   r	   r
   r   r   )r   r>   validr   r   r   r   r   r   r   r   test_reindex_non_na_fill_value  s   
z/BaseGetitemTests.test_reindex_non_na_fill_valuec                 C   sh   t d|i}|jdgdf }|jdksJ |jjd jdks!J t|jdr0|jjjdks2J d S d S )Nr   r   r   blocks)r	   r   r)   ndim_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 s1w   Y  tjt|d |  W d    d S 1 sMw   Y  d S )Nr   r   z6can only convert an array of size 1 to a Python scalarr3   )r	   r
   itemr7   r8   r[   )r   r   rQ   r   r;   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   col1helloworldr   r   zslice(None, 1, None))r	   r   StringArrayr   r    rB   objectr   assert_equalstrr   )r   r   r%   ra   r   r   r   test_ellipsis_index  s   z$BaseGetitemTests.test_ellipsis_indexN)-r   r   r   r   r   r&   r(   r*   r+   r-   r2   r=   rA   rD   rH   rJ   rN   rR   r7   markparametrizer	   rB   r    rY   rO   r\   xfailre   rg   rh   ru   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	   sl    			
$
$
$&
		r   )numpyr    r7   pandasr	   pandas._testing_testingr^    pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s    