o
    5cOJ                     @   sj  d Z ddlZddl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 ddlmZ ddlmZ dd	 Zejd
d Zejdejgddd Zejdd Zejdejgddd Zejdejgddd Zejdejgddd Zejdejgddd Zejdd Zejdd Zejdejgddd Zejdejgddd  ZG d!d" d"Z G d#d$ d$e ej!Z"G d%d& d&e ej#Z$G d'd( d(e ej%Z&G d)d* d*e ej'Z(G d+d, d,e ej)Z*G d-d. d.ej+Z,G d/d0 d0e ej-Z.G d1d2 d2e ej/Z0G d3d4 d4e ej1Z2G d5d6 d6e ej3Z4G d7d8 d8e Z5G d9d: d:e ej6Z7G d;d< d<e ej8Z9dS )=aj  
This file contains a minimal set of tests for compliance with the extension
array interface test suite, and should contain no other tests.
The test suite for the full functionality of the array is located in
`pandas/tests/arrays/`.

The tests in this file are inherited from the BaseExtensionTests, and only
minimal tweaks should be applied to get the tests passing (by overwriting a
parent method).

Additional tests should either be added to one of the BaseExtensionTests
classes (if they are relevant for the extension interface for all dtypes), or
be added to the array-specific tests in `pandas/tests/arrays/`.

    N)PerformanceWarning)is_object_dtypeSparseDtype)SparseArray)basec                 C   s^   t | rt jjdd}nt jjdddd}|d |d kr&|d  d7  < | |dd d< |S )Nd   )size   r         )npisnanrandomuniformrandint)
fill_valuedata r   X/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/extension/test_sparse.py	make_data   s   
r   c                   C   s   t  S Nr   r   r   r   r   dtype+      r   )paramsc                 C   s   t t| j| jd}|S )z*Length-100 PeriodArray for semantics test.r   )r   r   param)requestresr   r   r   r   0   s   r   c                   C   s   t tdd S )Nr   r   )r   r   onesr   r   r   r   data_for_twos7      r    c                 C   s   t tjdg| jdS )zLength 2 array with [NA, Valid]r
   r   r   r   nanr   r   r   r   r   data_missing<   s   r%   c                 #   s     fdd}|V  dS )z1Return different versions of data for count timesc                 3   s*    t | D ]}tt j jdV  qd S )Nr   )ranger   r   r   )count_r$   r   r   genF   s   zdata_repeated.<locals>.genNr   )r   r)   r   r$   r   data_repeatedB   s   
r*   c                 C   s   t g d| jdS )N)r   r   r
   r   )r   r   r$   r   r   r   data_for_sortingM   r!   r+   c                 C   s   t dtjdg| jdS )Nr   r
   r   r"   r$   r   r   r   data_missing_for_sortingR   s   r,   c                   C   s   t jS r   )r   r#   r   r   r   r   na_valueW   r   r-   c                   C   s   dd S )Nc                 S   s   t | o	t |S r   )pdisna)leftrightr   r   r   <lambda>^       zna_cmp.<locals>.<lambda>r   r   r   r   r   na_cmp\   s   r4   c              	   C   s"   t ddtjtjddddg| jdS )Nr
   r   r   r   r"   r$   r   r   r   data_for_groupinga   s   "r5   c                 C   s$   t ddtjdddddddg
| jdS )Nr      r   r   r   r"   r$   r   r   r   data_for_comparef   s   $r9   c                       2   e Zd Zdd Zejjdd fddZ  ZS )BaseSparseTestsc                 C   s"   |j ttdkrtd d S d S )Nr   zCan't store nan in int array.)r   r   intpytestskipselfr   r   r   r   _check_unsupportedl   s   z"BaseSparseTests._check_unsupported$SparseArray does not support setitemreasonc                       t  | d S r   )super
test_ravelr?   	__class__r   r   rG   p      zBaseSparseTests.test_ravel)	__name__
__module____qualname__rA   r=   markxfailrG   __classcell__r   r   rH   r   r;   k   s    r;   c                   @   s   e Zd Zdd ZdS )	TestDtypec                 C   s   |  tu sJ d S r   )construct_array_typer   )r@   r   r   r   r   r   test_array_type_with_argv   s   z"TestDtype.test_array_type_with_argN)rK   rL   rM   rS   r   r   r   r   rQ   u   s    rQ   c                   @   s   e Zd Zdd Zdd ZdS )TestInterfacec                 C      |   d S r   copyr?   r   r   r   	test_copy{      zTestInterface.test_copyc                 C   rU   r   )viewr?   r   r   r   	test_view   rY   zTestInterface.test_viewN)rK   rL   rM   rX   r[   r   r   r   r   rT   z   s    rT   c                   @   s   e Zd ZdS )TestConstructorsN)rK   rL   rM   r   r   r   r   r\      s    r\   c                       s   e Zd Zdd Zejdddgejj	ddgdd	gd
g fddZ
 fddZ fddZ fddZ fddZ fddZ fddZejjdd fddZ  ZS )TestReshapingc                 C   sx   t d|d d i}t dg di}t dg did}|||g}t |}t dd |D }| || d S )NAr   )r
   r   r   )abccategoryc                 S   s   g | ]	}| d d qS )c                 S   s   t | tS r   )r   asarrayastypeobject)sr   r   r   r2      s    zCTestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply.0xr   r   r   
<listcomp>   s    z:TestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>)r.   	DataFramerd   concatassert_frame_equal)r@   r   df1df2df3dfsresultexpectedr   r   r   test_concat_mixed_dtypes   s   

z&TestReshaping.test_concat_mixed_dtypescolumnsr^   B)r^   r_   )r^   r`   outerinner)namesc                    sD   t jtddd t || W d    d S 1 sw   Y  d S )NFastype from Sparse)check_stacklevelmatch)tmassert_produces_warningFutureWarningrF   
test_stack)r@   r   rv   rH   r   r   r      s
   
"zTestReshaping.test_stackc                       |  | t || d S r   )rA   rF   test_concat_columnsr@   r   r-   rH   r   r   r         
z!TestReshaping.test_concat_columnsc                    r   r   )rA   rF   'test_concat_extension_arrays_copy_falser   rH   r   r   r      r   z5TestReshaping.test_concat_extension_arrays_copy_falsec                    r   r   )rA   rF   
test_alignr   rH   r   r   r      r   zTestReshaping.test_alignc                    r   r   )rA   rF   test_align_framer   rH   r   r   r      r   zTestReshaping.test_align_framec                    r   r   )rA   rF   test_align_series_framer   rH   r   r   r      r   z%TestReshaping.test_align_series_framec                    r   r   )rA   rF   
test_merger   rH   r   r   r      r   zTestReshaping.test_mergerB   rC   c                    rE   r   )rF   test_transposer?   rH   r   r   r      rJ   zTestReshaping.test_transpose)rK   rL   rM   ru   r=   rN   parametrizer.   
MultiIndexfrom_tuplesr   r   r   r   r   r   r   rO   r   rP   r   r   rH   r   r]      s&    	r]   c                       s$   e Zd Zdd Z fddZ  ZS )TestGetitemc                 C   s   t j|dd tt|D d}t|jjr*t|dr't|j	d s)J n|d|j	d ks6J |d|j	d ksBJ d S )Nc                 S   s   g | ]}d | qS )r   r   )ri   ir   r   r   rk      r3   z(TestGetitem.test_get.<locals>.<listcomp>)indexr8   r   r
   )
r.   Seriesr&   lenr   r   valuesr   getiloc)r@   r   serr   r   r   test_get   s
    &zTestGetitem.test_getc                    r   r   )rA   rF   test_reindexr   rH   r   r   r      r   zTestGetitem.test_reindex)rK   rL   rM   r   r   rP   r   r   rH   r   r      s    r   c                       r:   )	TestIndexc                 C   s   d}t jt|d t|}W d    n1 sw   Y  |jjdkr.|jtjks,J d S |jjdkr>|jtj	ks<J d S |j|jjksGJ d S )Nzwill store that array directlyr}   fr   )
r~   r   r   r.   Indexr   subtyper   float64int64)r@   r   msgidxr   r   r   test_index_from_array   s   zTestIndex.test_index_from_arrayz#Index cannot yet store sparse dtyperC   c                    sD   d}t jt|d t | W d    d S 1 sw   Y  d S )Nz!passing a SparseArray to pd.Indexr   )r~   r   r   rF   #test_index_from_listlike_with_dtype)r@   r   r   rH   r   r   r      s   "z-TestIndex.test_index_from_listlike_with_dtype)	rK   rL   rM   r   r=   rN   rO   r   rP   r   r   rH   r   r      s    r   c                       sj   e Zd Zdd Z fddZ fddZ fddZ fd	d
Zej	j
dd fddZdd Z  ZS )TestMissingc                 C   s   t |}ttt|jj}t ddg|d}| }t|| |	d}ttt|jj}t ddgd|d}| 
| | d S )NTFr   r   r   r   )r   r   boolr.   r/   r   r   r~   assert_sp_array_equalfillnaassert_equal)r@   r%   sarrexpected_dtypert   rs   r   r   r   	test_isna   s   
zTestMissing.test_isnac                    @   t jtdd t | W d    d S 1 sw   Y  d S NFr|   )r~   r   r   rF   test_fillna_limit_padr@   r%   rH   r   r   r         "z!TestMissing.test_fillna_limit_padc                    r   r   r~   r   r   rF   test_fillna_limit_backfillr   rH   r   r   r      r   z&TestMissing.test_fillna_limit_backfillc                    sb   t |jr|jtjjdd tj	t
dd t | W d    d S 1 s*w   Y  d S )Nz'returns array with different fill valuerC   Fr   )r   r   r   node
add_markerr=   rN   rO   r~   r   r   rF   test_fillna_no_op_returns_copy)r@   r   r   rH   r   r   r      s   "z*TestMissing.test_fillna_no_op_returns_copyc                    r   r   r   r   rH   r   r   test_fillna_series_method  r   z%TestMissing.test_fillna_series_methodUnsupportedrC   c                    s   t |   d S r   )rF   test_fillna_series)r@   rH   r   r   r     s   zTestMissing.test_fillna_seriesc                 C   st   |d }t |ddgd|}t |jrt|j|}n|j}t |j||g|dddgd}| || d S )Nr
   r   )r^   rw   r   )	r.   rl   r   r/   r   r   r   _from_sequencern   )r@   r%   r   rs   r   rt   r   r   r   test_fillna_frame  s   zTestMissing.test_fillna_frame)rK   rL   rM   r   r   r   r   r   r=   rN   rO   r   r   rP   r   r   rH   r   r      s    r   c                       s   e Zd Zdd Zdd Zdd Zejjdd fd	d
Z	dd Z
 fddZ fddZdd Zejdddg fddZejdejejejg fddZ  ZS )TestMethodsc                    s   |d\}}t |}t |}||dd }t tdd tt|t|D dd}| || |jd  | d	d }t t fd
dt|D dd}| || d S )Nr   c                 S      | |kS r   r   x1x2r   r   r   r2   .      z-TestMethods.test_combine_le.<locals>.<lambda>c                 S   s   g | ]\}}||kqS r   r   )ri   r_   r`   r   r   r   rk   1  s    z/TestMethods.test_combine_le.<locals>.<listcomp>Fr   r   c                 S   r   r   r   r   r   r   r   r2   8  r   c                    s   g | ]}| kqS r   r   )ri   r_   valr   r   rk   :  r3   )r.   r   combiner   ziplistassert_series_equalr   )r@   r*   
orig_data1
orig_data2s1s2rs   rt   r   r   r   test_combine_le'  s"   


zTestMethods.test_combine_lec                 C   sp   | ddg}tjd|idd}|jd }||}t|jdr*|jj|jjus*J |j	j
 | u s6J d S )Nr
   r^   FrV   )r   r   blocks)taker.   rl   r   r   hasattr_mgrr   r   r^   _valuesto_dense)r@   r%   arrdf
filled_valrs   r   r   r   test_fillna_copy_frame>  s   

z"TestMethods.test_fillna_copy_framec                 C   sT   | ddg}t|}|d }||}|j|jusJ |j | u s(J d S )Nr
   r   )r   r.   r   r   r   r   )r@   r%   r   r   r   rs   r   r   r   test_fillna_copy_seriesI  s   

z#TestMethods.test_fillna_copy_serieszNot ApplicablerC   c                    rE   r   )rF   test_fillna_length_mismatchr   rH   r   r   r   S  rJ   z'TestMethods.test_fillna_length_mismatchc                 C   s   |d |d ks
J t |}|d d \}}t|j||||g|jd}tg d}||}tdd}	t|j||||g|	d}
| 	||
 |j||||g|jd}tg d}|||}t|j||||g|jd}
| 	||
 d S )	Nr   r
   r   r   )TTFFfloatg        )TFTT)
typer.   r   r   r   r   arraywherer   r   )r@   r   r-   clsr_   r`   r   condrs   	new_dtypert   otherr   r   r   test_where_seriesW  s    

zTestMethods.test_where_seriesc                    s6   |j jdkrtjjdd}|j| t | d S )Nr<   z2TODO(SparseArray.__setitem__) will preserve dtype.rC   )	r   r   r=   rN   rO   r   r   rF   test_combine_first)r@   r   r   rN   rH   r   r   r   m  s   zTestMethods.test_combine_firstc                    sB   t jtdd t || W d    d S 1 sw   Y  d S r   )r~   r   r   rF   test_searchsorted)r@   r+   	as_seriesrH   r   r   r   w  s   "zTestMethods.test_searchsortedc                 C   s6   | d}|jd |jd< |jd |jd ksJ d S )Nr   r
   )shift_sparse_values)r@   r   rs   r   r   r   test_shift_0_periods{  s   
z TestMethods.test_shift_0_periodsmethodargmaxargminc                    s   |  | t ||| d S r   )rA   rF   test_argmin_argmax_all_na)r@   r   r   r-   rH   r   r   r     s   
z%TestMethods.test_argmin_argmax_all_naboxc                    s    |  | t |||| d S r   )rA   rF   test_equals)r@   r   r-   r   r   rH   r   r   r     s   
zTestMethods.test_equals)rK   rL   rM   r   r   r   r=   rN   rO   r   r   r   r   r   r   r   r.   r   r   rl   r   rP   r   r   rH   r   r   &  s    

r   c                       sD   e Zd Zdd Zdd Zdd Zejje	dd fd	d
Z
  ZS )TestCastingc                 C   sj   t j|dd}tjtdd |t}W d    n1 sw   Y  t|js*J t|j	j
js3J d S )Nr^   )namer{   r   )r.   r   r~   r   r   rd   re   r   r   r   r   )r@   all_datar   rs   r   r   r   test_astype_object_series  s   z%TestCasting.test_astype_object_seriesc                 C   sx   t d|i}tjtdd |t}W d    n1 sw   Y  t|jj	d j
s.J |j|jk}| r:J d S )Nr^   r{   r   r   )r.   rl   r~   r   r   rd   re   r   r   arraysr   dtypesany)r@   r   r   rs   compr   r   r   test_astype_object_frame  s   z$TestCasting.test_astype_object_framec                 C   s   t jtdd t|d d t}W d    n1 sw   Y  ttt|j}tjdd |d d D |d}| 	|| d S )Nr{   r      c                 S   s   g | ]}t |qS r   )strrh   r   r   r   rk     r3   z/TestCasting.test_astype_str.<locals>.<listcomp>r   )
r~   r   r   r.   r   rd   r   r   r   r   )r@   r   rs   r   rt   r   r   r   test_astype_str  s    zTestCasting.test_astype_strzno sparse StringDtype)raisesrD   c                    rE   r   )rF   test_astype_stringr?   rH   r   r   r     rJ   zTestCasting.test_astype_string)rK   rL   rM   r   r   r   r=   rN   rO   	TypeErrorr   rP   r   r   rH   r   r     s    	r   c                       s\   e Zd ZdZdZdZdZdd Z fddZ fddZ	 fdd	Z
ef fd
d	Z  ZS )TestArithmeticOpsNc                 C   s   |j dkrtd d S d S )Nr   z=Incorrected expected from Series.combine and tested elsewhere)r   r=   r>   r?   r   r   r   _skip_if_different_combine  s   
z,TestArithmeticOps._skip_if_different_combinec                    r   r   )r  rF   test_arith_series_with_scalarr@   r   all_arithmetic_operatorsrH   r   r   r    r   z/TestArithmeticOps.test_arith_series_with_scalarc                    r   r   )r  rF   test_arith_series_with_arrayr  rH   r   r   r    r   z.TestArithmeticOps.test_arith_series_with_arrayc                    sH   |j jdkrn|ddvrtjjdd}|j| t 	|| d S )Nr   r(   )mulrmulfloordiv	rfloordivpowmodrmodz result dtype.fill_value mismatchrC   )
r   r   stripr=   rN   rO   r   r   rF   test_arith_frame_with_scalar)r@   r   r  r   rN   rH   r   r   r    s   	z.TestArithmeticOps.test_arith_frame_with_scalarc                    s   t  j|||d d d S )N)exc)rF   _check_divmod_op)r@   r   opr   r  rH   r   r   r    s   z"TestArithmeticOps._check_divmod_op)rK   rL   rM   series_scalar_excframe_scalar_exc
divmod_excseries_array_excr  r  r  r  NotImplementedErrorr  rP   r   r   rH   r   r     s    r   c                   @   s`   e Zd ZdefddZdefddZejjdddefdd	Z	ejjdddefd
dZ
dS )TestComparisonOpsr9   c                 C   s   |}|||}t |tsJ |jjtjksJ t |tr$||j|j}nt|t|jt|}t||	 t||tjd}t
|| d S )Nr   )
isinstancer   r   r   r   bool_r   allrc   r   r~   r   )r@   r9   comparison_opr   r  rs   r   rt   r   r   r   _compare_other  s   

z TestComparisonOps._compare_otherc                 C   s>   |  ||d |  ||d |  ||d |  ||tj d S )Nr   r
   r7   )r  r   r#   )r@   r9   r  r   r   r   test_scalar  s   zTestComparisonOps.test_scalarzWrong indicesrC   c                 C   s    t ddd}| ||| d S )Nr   
   )r   linspacer  r@   r9   r  r   r   r   r   
test_array  s   zTestComparisonOps.test_arrayc                 C   s0   |d }|  ||| |d }|  ||| d S )Nr
   r   )r  r!  r   r   r   test_sparse_array  s   z#TestComparisonOps.test_sparse_arrayN)rK   rL   rM   r   r  r  r=   rN   rO   r"  r#  r   r   r   r   r    s    r  c                       s*   e Zd Zejjdd fddZ  ZS )TestPrintingzDifferent reprrC   c                    s   t  || d S r   )rF   test_array_repr)r@   r   r	   rH   r   r   r%    r!   zTestPrinting.test_array_repr)rK   rL   rM   r=   rN   rO   r%  rP   r   r   rH   r   r$    s    r$  c                       s.   e Zd Zejdddg fddZ  ZS )TestParsingenginera   pythonc              	      s   d}t jt|d/ tjtdd t || W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )Nz,.*must implement _from_sequence_of_strings.*r   zastype from)r=   r   r  r~   r   r   rF   test_EA_types)r@   r'  r   expected_msgrH   r   r   r)    s   "zTestParsing.test_EA_types)rK   rL   rM   r=   rN   r   r)  rP   r   r   rH   r   r&  
  s    r&  ):__doc__numpyr   r=   pandas.errorsr   pandas.core.dtypes.commonr   pandasr.   r   pandas._testing_testingr~   pandas.arraysr   pandas.tests.extensionr   r   fixturer   r#   r   r    r%   r*   r+   r,   r-   r4   r5   r9   r;   BaseDtypeTestsrQ   BaseInterfaceTestsrT   BaseConstructorsTestsr\   BaseReshapingTestsr]   BaseGetitemTestsr   BaseIndexTestsr   BaseMissingTestsr   BaseMethodsTestsr   BaseCastingTestsr   BaseArithmeticOpsTestsr   r  BasePrintingTestsr$  BaseParsingTestsr&  r   r   r   r   <module>   s^    













<<h#*)