o
    ҷhe                     @   sv   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZ d dlmZ G dd dZdS )    N)Dtype)is_bool_dtype)na_value_for_dtype)nargsortc                   @   s  e Zd ZU dZdd Zdd Zejdddgd	d
 Z	dd Z
dd Zdd Zdd Zejdddgdd Zdd Zdd Zdd Zdd Zejd d!d"gd#d$ Zejd d!d"gd%d& Zejd'd(d)d*d+d,dejfd-dejfd.d/gd0d1 Zd2d3 Zejd4d5ejg d6ed7d8fd9ejg d:ed7d8fgd;d< Zejd=ddgd>d? Zejd=ddgd@dA Zejd=ddgdBdC ZejdDej dEdF gejd dGdF ej!gdHdI Z"dJdK Z#dLdM Z$dNdO Z%dPdQ Z&dRdS Z'dTdU Z(ee)Z*e+e,dV< dWdX Z-dYdZ Z.d[d\ Z/ejd]ddgejd^d_g d`fdag dbfdcg ddfgdedf Z0dgdh Z1ejdidjd_gdkdl Z2ejd^dmdndnggdndjdnggdadadjggdjdndaggdodndngggdpdq Z3ejdig drdsdt Z4dudv Z5dwdx Z6dydz Z7d{d| Z8d}d~ Z9dd Z:dd Z;ejddadjdcg dgdd Z<ejddcddjie=dfdni e=dfdjdcgi e=dfdcddie>dfgdd Z?dd Z@dd ZAdd ZBdd ZCejdDejej ejDgdd ZEdd ZFdS )BaseMethodsTestsz%Various Series and DataFrame methods.c                 C   s@   ddl m} |jd|dd}|jtjksJ |j|jksJ d S )Nr   )_default_hash_keyzutf-8F)encodinghash_key
categorize)pandas.core.util.hashingr   _hash_pandas_objectdtypenpuint64shape)selfdatar   res r   V/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/extension/base/methods.pytest_hash_pandas_object   s   z(BaseMethodsTests.test_hash_pandas_objectc                 C   sF   t |dstdt|  t|j}|jd }|jdu s!J d S )Nvalue_countsz$value_counts is not implemented for dropnaT)	hasattrpytestskiptypeinspect	signaturer   
parametersdefault)r   r   sigkwargr   r   r    test_value_counts_default_dropna   s
   

z1BaseMethodsTests.test_value_counts_default_dropnar   TFc                 C   s`   |d d }|r||    }n|}t|j|d }t|j|d }t|| d S )N
   )r   )isnapdSeriesr   
sort_indextmassert_series_equal)r   all_datar   otherresultexpectedr   r   r   test_value_counts'   s   z"BaseMethodsTests.test_value_countsc                 C   s  |d d   }t||   }tj||jd}|jdd }t	|tj
s;tjdt| gt| |jdd}ntjd|jdd}dt| ||d	k< t|jd
ddks^t	|jtjrd|d}nt|jd
ddkrs|d}nt|jtju r|d}t|| d S )Nr$   r   T)	normalize   
proportion)indexnameg        r   storage pyarrowzdouble[pyarrow]pyarrow_numpyfloat64Float64)uniquer   arrayr%   r&   r'   r   r   r(   
isinstanceCategoricallenr4   getattr
ArrowDtypeastyper   NAr)   r*   )r   r   valuesserr-   r.   r   r   r    test_value_counts_with_normalize4   s&   
z1BaseMethodsTests.test_value_counts_with_normalizec                 C   s8   t d|i}|jdd}t ddg}t|| d S )NAcolumnsaxisr   r2   )r&   	DataFramecountr'   r)   r*   )r   data_missingdfr-   r.   r   r   r   
test_countR   s   zBaseMethodsTests.test_countc                 C   s&   t |}| }d}||ksJ d S )Nr2   )r&   r'   rM   )r   rN   rF   r-   r.   r   r   r   test_series_countX   s   
z"BaseMethodsTests.test_series_countc                 C   s$   t |t}t|t jsJ d S N)r&   r'   applyidr>   r   r   r-   r   r   r   test_apply_simple_series_   s   z)BaseMethodsTests.test_apply_simple_series	na_actionNignorec                 C   s*   |j dd |d}| }t|| d S )Nc                 S      | S rR   r   xr   r   r   <lambda>e       z+BaseMethodsTests.test_map.<locals>.<lambda>)rW   )mapto_numpyr)   assert_numpy_array_equal)r   rN   rW   r-   r.   r   r   r   test_mapc   s   zBaseMethodsTests.test_mapc                 C   s8   t | }t tjg dtjd}t|| d S N   r   r2   r0   )r&   r'   argsortr   r=   intpr)   r*   )r   data_for_sortingr-   r.   r   r   r   test_argsorti   s   zBaseMethodsTests.test_argsortc                 C   s,   |  }tjg dtjd}t|| d S rb   )re   r   r=   rf   r)   r`   )r   data_missing_for_sortingr-   r.   r   r   r   test_argsort_missing_arrayo   s   z+BaseMethodsTests.test_argsort_missing_arrayc                 C   sj   d}t jt|d t| }W d    n1 sw   Y  ttjg dtjd}t 	|| d S )Nz;The behavior of Series.argsort in the presence of NA valuesmatch)r2   r   r0   )
r)   assert_produces_warningFutureWarningr&   r'   re   r   r=   rf   r*   )r   ri   msgr-   r.   r   r   r   test_argsort_missingu   s   z%BaseMethodsTests.test_argsort_missingc                 C   s   |j j}d}d}|rd}d}| |ksJ | dksJ |g d}| |ks-J | dks5J | dks=J | dksEJ d S )Nr2      r   rd   )rd   r   r   r2   r2   rd   )r   _is_booleanargmaxargmintake)r   rg   ri   na_valueis_bool
exp_argmaxexp_argmax_repeatedr   r   r   r   test_argmin_argmax|   s   z#BaseMethodsTests.test_argmin_argmaxmethodrt   ru   c                 C   sL   d}t jt|d t|d d |  W d    d S 1 sw   Y  d S )Nattempt to getrk   r   )r   raises
ValueErrorrA   )r   r|   r   err_msgr   r   r   test_argmin_argmax_empty_array   s   "z/BaseMethodsTests.test_argmin_argmax_empty_arrayc                 C   s\   d}t |j||g|jd}tjt|d t||  W d    d S 1 s'w   Y  d S )Nr}   r0   rk   )r   _from_sequencer   r   r~   r   rA   )r   r|   r   rw   r   data_nar   r   r   test_argmin_argmax_all_na   s
   "z*BaseMethodsTests.test_argmin_argmax_all_nazop_name, skipna, expected)idxmaxTr   )idxminTrd   )rt   Tr   )ru   Trd   r   r   )rt   Frm   )ru   Frm   c           	      C   s   d }d}| dr|dkrt}| dr t|r t}d| }t|}tj||d t|||d}W d    n1 s?w   Y  t	|| d S )Nz$The behavior of Series.argmax/argminargrm   idxzThe behavior of Series.rk   skipna)

startswithro   r   isnanr&   r'   r)   rn   rA   assert_almost_equal)	r   ri   op_namer   r.   warnrp   rF   r-   r   r   r   test_argreduce_series   s   

z&BaseMethodsTests.test_argreduce_seriesc                 C   s~   |}t jtdd |jdd W d    n1 sw   Y  t jtdd |jdd W d    d S 1 s8w   Y  d S )Nr7   rk   Fr   )r   r~   NotImplementedErrorru   rt   )r   ri   r   r   r   r   +test_argmax_argmin_no_skipna_notimplemented   s   "z<BaseMethodsTests.test_argmax_argmin_no_skipna_notimplementedzna_position, expectedlastrc   rf   r0   firstr2   rd   r   c                 C   s   t ||d}t|| d S )N)na_position)r   r)   r`   )r   ri   r   r.   r-   r   r   r   test_nargsort   s   	zBaseMethodsTests.test_nargsort	ascendingc                 C   sd   t |}|j||d}|jg d }|s*| dkr#|jg d }n|jg d }t|| d S )Nr   keyrc   rd   )r   r2   rd   )r2   r   rd   )r&   r'   sort_valuesilocnuniquer)   r*   )r   rg   r   sort_by_keyrF   r-   r.   r   r   r   test_sort_values   s   
z!BaseMethodsTests.test_sort_valuesc                 C   sJ   t |}|j||d}|r|jg d }n|jg d }t|| d S )Nr   rc   )r   rd   r2   )r&   r'   r   r   r)   r*   )r   ri   r   r   rF   r-   r.   r   r   r   test_sort_values_missing   s   
z)BaseMethodsTests.test_sort_values_missingc                 C   sX   t g d|d}|ddg}t jg d|g ddg dd}t|| d S )N)r2   rd   r2   rH   BrH   r   )r2   r2   rd   rc   r4   )r&   rL   r   rv   r)   assert_frame_equal)r   rg   r   rO   r-   r.   r   r   r   test_sort_values_frame   s   z'BaseMethodsTests.test_sort_values_frameboxc                 C   rY   rR   r   rZ   r   r   r   r\      r]   zBaseMethodsTests.<lambda>c                 C   s   |   S rR   )r<   rZ   r   r   r   r\          c                 C   s\   || |d |d g}||}t|dksJ t|t|s"J |d |d ks,J d S Nr   r2   )r   r@   r>   r   )r   r   r   r|   
duplicatedr-   r   r   r   test_unique   s
   zBaseMethodsTests.test_uniquec                 C   s   t j|dd\}}|jj}|r!tjg dtjd}|ddg}ntjg dtjd}|g d}t	|| t
|| d S )	NTuse_na_sentinel)r   r   rm   rm   r2   r2   r   r   r0   r      )r   r   rm   rm   r2   r2   r   rd   )r   r      )r&   	factorizer   rs   r   r=   rf   rv   r)   r`   assert_extension_array_equal)r   data_for_groupingcodesuniquesrx   expected_codesexpected_uniquesr   r   r   test_factorize  s   zBaseMethodsTests.test_factorizec                 C   sh   t j|dd\}}|jdd\}}t|| t|| t|tt |ks*J |j|jks2J d S )NTr   )r&   r   r)   r`   r   r@   r<   r   )r   r   codes_1	uniques_1codes_2	uniques_2r   r   r   test_factorize_equivalence  s   z+BaseMethodsTests.test_factorize_equivalencec                 C   s^   t |d d \}}tjg tjd}t|jg |d d jd}t	|| t
|| d S )Nr   r0   )r&   r   r   r=   rf   r   r   r   r)   r`   r   )r   r   r   r   r   r   r   r   r   test_factorize_empty  s
   z%BaseMethodsTests.test_factorize_emptyc                 C   sR   | ddg}td|i}| }|jd }||}||jd< t|| d S )Nr2   rH   )r   r   )rv   r&   rL   copyr   fillnar)   r   )r   rN   arrrO   df_orig
filled_valr-   r   r   r   test_fillna_copy_frame%  s   


z'BaseMethodsTests.test_fillna_copy_framec                 C   sP   | ddg}tj|dd}| }|d }||}||jd< t|| d S )Nr2   F)r   r   )rv   r&   r'   r   r   r   r)   r*   )r   rN   r   rF   ser_origr   r-   r   r   r   test_fillna_copy_series1  s   

z(BaseMethodsTests.test_fillna_copy_seriesc                 C   sJ   d}t jt|d ||dg W d    d S 1 sw   Y  d S )Nz!Length of 'value' does not match.rk   r2   )r   r~   r   r   rv   )r   rN   rp   r   r   r   test_fillna_length_mismatch<  s   "z,BaseMethodsTests.test_fillna_length_mismatch_combine_le_expected_dtypec                    s   |d\}}t |}t |}||dd }t jdd tt|t|D | jd}t|| |jd  | dd }t j fd	dt|D | jd}t|| d S )
Nrd   c                 S      | |kS rR   r   x1x2r   r   r   r\   J  r   z2BaseMethodsTests.test_combine_le.<locals>.<lambda>c                 S   s   g | ]\}}||kqS r   r   .0abr   r   r   
<listcomp>L      z4BaseMethodsTests.test_combine_le.<locals>.<listcomp>r0   r   c                 S   r   rR   r   r   r   r   r   r\   R  r   c                    s   g | ]}| kqS r   r   r   r   valr   r   r   T      )	r&   r'   combineziplistr   r)   r*   r   )r   data_repeated
orig_data1
orig_data2s1s2r-   r.   r   r   r   test_combine_leD  s    


z BaseMethodsTests.test_combine_lec                    s4  |d\}}t |}t |}z,tjdd t |dd tt|t|D }W d    n1 s6w   Y  W n) tye   t	t |
|dd  W d    Y d S 1 s]w   Y  Y d S w |
|dd }t|| |jd	  |
 d
d }t | fddt|D }t|| d S )Nrd   rX   )overc                 S   s   g | ]\}}|| qS r   r   r   r   r   r   r   e  r   z5BaseMethodsTests.test_combine_add.<locals>.<listcomp>c                 S      | | S rR   r   r   r   r   r   r\   l  r   z3BaseMethodsTests.test_combine_add.<locals>.<lambda>c                 S   r   rR   r   r   r   r   r   r\   o  r   r   c                 S   r   rR   r   r   r   r   r   r\   s  r   c                    s   g | ]}|  qS r   r   r   r   r   r   r   u  r   )r&   r'   r   errstater   r   r   	TypeErrorr   r~   r   r)   r*   r   )r   r   r   r   r   r   r.   r-   r   r   r   test_combine_addY  s8   



z!BaseMethodsTests.test_combine_addc                 C   sX   t |d d }t j|dd g dd}||}t |d d }t|| d S )Nrr   rd      )rd   rr   r   r   )r&   r'   combine_firstr)   r*   )r   r   r   r   r-   r.   r   r   r   test_combine_firsty  s
   
z#BaseMethodsTests.test_combine_firstframezperiods, indices)rd   rr   r   rm   rm   r   )r   r2   rd   rr   r   rd   )rm   rm   r   r2   rd   c           	      C   s   |d d }t j|dd}t j|j|dddd}|r@|jddjdd|}t j|t jdgd dd|gdd	}tj}n||}tj	}||| d S )
Nr   rH   r5   T
allow_fillr2   )r   r   rJ   )
r&   r'   rv   to_frameassignshiftconcatr)   r   r*   )	r   r   r   periodsindicessubsetr.   r-   comparer   r   r   test_container_shift  s   
z%BaseMethodsTests.test_container_shiftc                 C   sB   | d}|d |d ksJ |d |d< |d |d ksJ d S r   r   rU   r   r   r   test_shift_0_periods  s   
z%BaseMethodsTests.test_shift_0_periodsr   r2   c           	      C   s   |d d }t |jrtj}ntj}z||| W n ty,   tt| d Y nw t	
|}||}t	
||||}t|| t	|dgd d}||}|dkretjddddg}n	dddtjtjg}t	||d}t|| d S )Nr   z does not support diffg      ?r   r2   r   )r   r   operatorxorsub	Exceptionr   r   r   r&   r'   diffr   r)   r*   rL   r   nanr   )	r   r   r   opsr-   r.   rO   r   r   r   r   	test_diff  s(   



zBaseMethodsTests.test_diffrm   r   c                 C   s4   |d d }| |}|j|dd}t|| d S )Nrd   Tr   r   rv   r)   r   )r   r   r   r   r   r-   r.   r   r   r   test_shift_non_empty_array  s   
z+BaseMethodsTests.test_shift_non_empty_array)r   rm   r   r2   r   c                 C   s*   |d d }| |}|}t|| d S )Nr   )r   r)   r   )r   r   r   emptyr-   r.   r   r   r   test_shift_empty_array  s   
z'BaseMethodsTests.test_shift_empty_arrayc                 C   s8   | d}||usJ |d d  d}||usJ d S )Nr   rd   r   rU   r   r   r   test_shift_zero_copies  s   
z'BaseMethodsTests.test_shift_zero_copiesc                 C   sh   |d d }|d }|j d|d}|g d}t|| |j d|d}|g d}t|| d S )Nr   r   r2   )
fill_value)r   r   r2   rd   r   )rd   rr   r   r   r   )r   r   r   r  r-   r.   r   r   r   test_shift_fill_value  s   z&BaseMethodsTests.test_shift_fill_valuec                 C   s<   t jtdd t| W d    d S 1 sw   Y  d S )Nzunhashable typerk   )r   r~   r   hashr   r   r   r   r   test_not_hashable  s   
"z"BaseMethodsTests.test_not_hashablec                 C   s>   t |}|r| }t j|}t j|}t|| d S rR   )r&   r'   r   utilhash_pandas_objectr)   assert_equal)r   r   as_framer   r   r   r   r   test_hash_pandas_object_works  s   
z.BaseMethodsTests.test_hash_pandas_object_worksc           
      C   s  |j jr
| ||S |\}}}|g d}|rt|}||dks&J |j|dddks1J ||dks:J |j|dddksEJ ||dksNJ |j|dddksYJ ||ddg}tjddgtj	d}t
|| tg d	}	|j||	d
dksJ d S )Nrc   r   rightsider2   rd   rr   r0   r   sorter)r   rs   _test_searchsorted_bool_dtypesrv   r&   r'   searchsortedr   r=   rf   r)   r`   )
r   rg   	as_seriesr   cr   r   r-   r.   r  r   r   r   test_searchsorted  s"   

z"BaseMethodsTests.test_searchsortedc           
      C   s   |j }tjddg|d}|\}}t|||g}|r t|}||dks)J |j|dddks4J ||dks=J |j|dddksHJ ||ddg}tjddgtj	d}t
|| tddg}	|j||	d	dkstJ d S )
NTFr0   r   r  r  r2   rd   r  )r   r&   r=   r   r   r'   r  rv   r   rf   r)   r`   )
r   rg   r  r   r   r   r   r-   r.   r  r   r   r   r    s   
z/BaseMethodsTests._test_searchsorted_bool_dtypesc                 C   s  |d |d ks
J t |}|d d \}}t|j||||g|jd}| }tg d}	|r>|jdd}|		dd}	|
|	}
t|j||||g|jd}|rZ|jdd}t|
| |j|	 d	d
 t|| | }|rz|jdd}tg d}	|j||||g|jd}|rtd|i}td|	i}	|
|	|}
t|j||||g|jd}|r|jdd}t|
| |j|	 |d	d
 t|| d S )Nr   r2   rd   r0   )TTFFr   r   rm   T)inplace)TFTT)r   r&   r'   r   r   r   r   r=   r   reshapewherer)   r  maskrL   )r   r   rw   r  clsr   r   origrF   condr-   r.   r,   r   r   r   test_where_series"  sB   
z"BaseMethodsTests.test_where_seriesrepeats)r2   rd   rr   c                 C   s   t |j|d d |jd}|rt|}|rt||n||}t|tr,|gd n|}dd t	||D }t |j||jd}|rOtj||j
|d}t|| d S )Nrr   r0   c                 S   s"   g | ]\}}t |D ]}|q
qS r   )range)r   r[   n_r   r   r   r   V  s   " z0BaseMethodsTests.test_repeat.<locals>.<listcomp>r   )r   r   r   r&   r'   r   repeatr>   intr   r4   r)   r  )r   r   r!  r  	use_numpyr   r-   r.   r   r   r   test_repeatM  s   
zBaseMethodsTests.test_repeatzrepeats, kwargs, error, msgrK   negativer   foobarz'foo'c                 C   sp   t j||d' |rtj||fi | n|j|fi | W d    d S W d    d S 1 s1w   Y  d S )Nrk   )r   r~   r   r%  )r   r   r!  kwargserrorrp   r'  r   r   r   test_repeat_raises]  s   
"z#BaseMethodsTests.test_repeat_raisesc                 C   sd   | d}|dd  }t|| | ddg}||dg |dg |dd  g}t|| d S )Nr   r2   rr   rd   r   )deleter)   r   _concat_same_type)r   r   r-   r.   r   r   r   test_deletem  s   
$zBaseMethodsTests.test_deletec                 C   s   |dd   d|d }t|| |dd   t|dd   |d }t|| |d d  d|d }tt|}|dd |dd < t|d |d< ||}t|| d S )Nr2   r   rm   r   r   )insertr)   r   r@   r   arangerv   )r   r   r-   takerr.   r   r   r   test_insertv  s   &
zBaseMethodsTests.test_insertc                 C   s   |}t ttf |d| W d    n1 sw   Y  t ttf |d| W d    n1 s7w   Y  t ttf |t|d | W d    d S 1 sYw   Y  d S )Nr   r   r2   )r   r~   r   r   r2  r@   )r   r   invalid_scalaritemr   r   r   test_insert_invalid  s   "z$BaseMethodsTests.test_insert_invalidc                 C   s   t |}tt ||d |d  W d    n1 sw   Y  tt || d |d  W d    n1 s>w   Y  tt |d|d  W d    d S 1 s\w   Y  d S )Nr2   r   g      ?)r@   r   r~   
IndexErrorr2  r   )r   r   ubr   r   r   test_insert_invalid_loc  s   "z(BaseMethodsTests.test_insert_invalid_locc                 C   s2  t |j|d gt| |jd}t |j|gt| |jd}tj||dd}tj||dd}tj||dd}||du sAJ || du sLJ ||du sUJ ||du s^J |d d |d d du soJ |d d |d d du sJ |d du sJ |dg |d du sJ d S )Nr   r0   F)	transposeTrd   rr   )r   r   r@   r   r)   box_expectedequalsr   )r   r   rw   r  r   data2r   r   r   r   test_equals  s   """ zBaseMethodsTests.test_equalsc                 C   s   t |t |sJ d S rR   )r&   r'   r>  r  r   r   r   &test_equals_same_data_different_object  s   z7BaseMethodsTests.test_equals_same_data_different_object)G__name__
__module____qualname____doc__r   r#   r   markparametrizer/   rG   rP   rQ   rV   ra   rh   rj   rq   r{   r   r   r   r   r   r   r=   r   r   r   r   r   r&   r'   r<   r   r   r   r   r   r   r   boolr   r   __annotations__r   r   r   r   r   r   r  r  r  r  r	  r  r  r  r   r(  r   r   r.  r1  r5  r8  r;  rL   r@  rA  r   r   r   r   r      s   
 











		  
4

	+


		
r   )r   r   numpyr   r   pandas._typingr   pandas.core.dtypes.commonr   pandas.core.dtypes.missingr   pandasr&   pandas._testing_testingr)   pandas.core.sortingr   r   r   r   r   r   <module>   s    