o
    h9=                     @   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   w/var/www/html/construction_image-detection-poc/venv/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 }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   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 }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 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 }t|| d S )Nr   r   r   )r"   r/   r0   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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 |}t || }t|| d S )NrF   r   rI   r   T   )r   r   r   r   r   )r   rB   r    rE   shaper"   r/   r0   r	   r   taker   rC   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|| t 	|}|| }||d }t
|| d S )NrF   r   rI   r   Tr   F)r   rB   r    rE   rL   NAfillnar   rC   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|}t|| }t|| d S )Nr   rT   )	r"   r/   r0   rM   r   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 )d   )chr.0ir   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 }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   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|| |td}|jdd	g }t|| |d
d u sMJ ||j	
 d	 d u s[J t j|d d tdd}|d|jd kstJ |tdd}|jg d }t|| |d}|d u sJ d}tjt|d+ |d|jd ksJ |d
|jd
 ksJ |t|d u sJ W d    n1 sw   Y  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`   r   r   r   rc   4  s    z-BaseGetitemTests.test_get.<locals>.<listcomp>rd   r   r      r   r   r   r'   abcdefcbd)r   r   r   Zz;Series.__getitem__ treating keys as positions is deprecatedr3   )r   r	   re   r"   getr
   r   r   rg   r,   maxrV   assert_produces_warningFutureWarning)r   r   rQ   r   r   r;   s2r   r   r   test_get2  s8    

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}t|| d S )Nr   r   r'   )r"   rM   r   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}t|| d S )Nr   r   r   r'   Try   rx   )_from_sequencer   rM   r   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}t|| d S )Nr   r'   r   r   rd   )r   r	   rM   r   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|| 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 )Nrv   rd   r'   r   r   r   )	r   r	   reindexrM   r   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}t|| d S )Nr   r   r   rT   )ry   )r   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_itemN),__name__
__module____qualname____doc__r   r&   r(   r*   r+   r-   r2   r=   rA   rD   rH   rJ   rN   rR   r7   markparametrizer   rB   r    rY   rO   r\   xfailrf   rh   ri   ru   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sj    			
$
$
$'
		r   )	numpyr    r7   pandasr   pandas._testing_testingr   r   r   r   r   r   <module>   s
    