a
    PfE                     @   s^  d Z ddlZddl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ejgddd Zejdejgddd ZG dd dejZd d! Zd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SparseDtype)SparseArray)basec                 C   sh   t jd}t | r$|jdd}n2|jdddtd}|d |d krV|d  d7  < | |dd d< |S )N   d   )size   )r	   dtyper      )nprandomZdefault_rngisnanuniformZintegersint)
fill_valuerngdata r   [/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/extension/test_sparse.py	make_data   s    
r   c                   C   s   t  S Nr   r   r   r   r   r   *   s    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   /   s    r   c                   C   s   t tdd S )Nr   r   )r   r   Zonesr   r   r   r   data_for_twos6   s    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   genE   s    zdata_repeated.<locals>.genNr   )r   r&   r   r!   r   data_repeatedA   s    r'   c                 C   s   t g d| jdS )N)r   r   r
   r   )r   r   r!   r   r   r   data_for_sortingL   s    r(   c                 C   s   t dtjdg| jdS )Nr   r
   r   r   r!   r   r   r   data_missing_for_sortingQ   s    r)   c                   C   s   dd S )Nc                 S   s   t | ot |S r   )pdisna)leftrightr   r   r   <lambda>X       zna_cmp.<locals>.<lambda>r   r   r   r   r   na_cmpV   s    r0   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_grouping[   s    r1   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_compare`   s    r5   c                       sH  e Zd ZeedddZejdddg fddZ	ejdddg fd	d
Z
dd Zdd Zejdejdddgejjddgddgdgejdd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d'd( Z fd)d*Zd+d, Z fd-d.Z fd/d0Zejjd1d2 fd3d4Zd5d6 Zd7Z d8d9 Z!d:d; Z"ejjd<d2 fd=d>Z#d?d@ Z$ fdAdBZ%dCdD Z&ejdEdFdGg fdHdIZ'ejdJej(ej)ej*g fdKdLZ+ejdMdNdO dPe,dQe-j.gfdRdO dSe,dQe-j.gfedPe,dTdUgdUdVfedSe,dTe-j.gfgdWdX Z/ejdYdPdSgdZd[ Z0ejje1d\d] fd^d_Z2dPZ3dPZ4dPZ5dPZ6d`da Z7 fdbdcZ8 fdddeZ9 fdfdgZ:ej)e,dhdidjZ;e,dkdldmZ<e,dkdndoZ=e,dkdpdqZ>ejjdrd2 fdsdtZ?ejjdud2ejdvddg fdwdxZ@  ZAS )yTestSparseArray)op_namereturnc                 C   s   dS )NTr   )selfobjr7   r   r   r   _supports_reductionf   s    z#TestSparseArray._supports_reductionskipnaTFc                    sj   |dv r$t jjdd}|j| n2|dv rV|jjdkrV|sVt jjdd}|j| t ||| d S )NprodZmedianvarZstdZsemZskewZkurt,This should be viable but is not implementedreasonsummaxminmeanfzgetting a non-nan float)	pytestmarkxfailnode
add_markerr   kindsupertest_reduce_series_numericr9   r   Zall_numeric_reductionsr<   r   rJ   	__class__r   r   rP   i   s    	
z*TestSparseArray.test_reduce_series_numericc                    sj   |dv r$t jjdd}|j| n2|dv rV|jjdkrV|sVt jjdd}|j| t ||| d S )Nr=   r@   rA   rC   rH   z$ExtensionArray NA mask are different)	rI   rJ   rK   rL   rM   r   rN   rO   test_reduce_framerQ   rR   r   r   rT      s    	
z!TestSparseArray.test_reduce_framec                 C   s   |j ttdkrtd d S )Nr   zCan't store nan in int array.)r   r   r   rI   skipr9   r   r   r   r   _check_unsupported   s    z"TestSparseArray._check_unsupportedc                 C   sx   t d|d d i}t dg di}t dg did}|||g}t |}t dd |D }t|| 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   r.      r/   zETestSparseArray.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply).0xr   r   r   
<listcomp>   r/   z<TestSparseArray.test_concat_mixed_dtypes.<locals>.<listcomp>)r*   	DataFramer^   concattmassert_frame_equal)r9   r   Zdf1Zdf2Zdf3dfsresultexpectedr   r   r   test_concat_mixed_dtypes   s    

z(TestSparseArray.test_concat_mixed_dtypesz9ignore:The previous implementation of stack is deprecatedcolumnsrX   B)rX   rY   )rX   rZ   outerinner)namesfuture_stackc                    s   t  ||| d S r   )rO   
test_stack)r9   r   rm   rr   rR   r   r   rs      s    zTestSparseArray.test_stackc                    s   |  | t || d S r   )rW   rO   test_concat_columnsr9   r   na_valuerR   r   r   rt      s    
z#TestSparseArray.test_concat_columnsc                    s   |  | t || d S r   )rW   rO   'test_concat_extension_arrays_copy_falseru   rR   r   r   rw      s    
z7TestSparseArray.test_concat_extension_arrays_copy_falsec                    s   |  | t || d S r   )rW   rO   
test_alignru   rR   r   r   rx      s    
zTestSparseArray.test_alignc                    s   |  | t || d S r   )rW   rO   test_align_frameru   rR   r   r   ry      s    
z TestSparseArray.test_align_framec                    s   |  | t || d S r   )rW   rO   test_align_series_frameru   rR   r   r   rz      s    
z'TestSparseArray.test_align_series_framec                    s   |  | t || d S r   )rW   rO   
test_mergeru   rR   r   r   r{      s    
zTestSparseArray.test_mergec                 C   s   t j|dd tt|D d}t|jjrTt|drNt|j	d slJ n|d|j	d kslJ |d|j	d ksJ d S )Nc                 S   s   g | ]}d | qS )r   r   )rb   ir   r   r   rd      r/   z,TestSparseArray.test_get.<locals>.<listcomp>)indexr4   r   r
   )
r*   Seriesr#   lenr   r   valuesr   getiloc)r9   r   serr   r   r   test_get   s
     &zTestSparseArray.test_getc                    s   |  | t || d S r   )rW   rO   test_reindexru   rR   r   r   r      s    
zTestSparseArray.test_reindexc                 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}t
| | d S )NTFr   r   r   r   )r   r   boolr*   r+   r   r   rg   Zassert_sp_array_equalfillnaassert_equal)r9   r"   ZsarrZexpected_dtyperk   rj   r   r   r   	test_isna   s    
zTestSparseArray.test_isnac                    sF   t tf}tj|dd t | W d    n1 s80    Y  d S NF)Zcheck_stacklevel)r   FutureWarningrg   assert_produces_warningrO   test_fillna_limit_backfill)r9   r"   ZwarnsrR   r   r   r      s    z*TestSparseArray.test_fillna_limit_backfillc                    s0   t |jr |tjjdd t | d S )Nz'returns array with different fill valuerA   )	r   r   r   applymarkerrI   rJ   rK   rO   test_fillna_no_op_returns_copy)r9   r   r   rR   r   r   r      s
    z.TestSparseArray.test_fillna_no_op_returns_copyZUnsupportedrA   c                    s   t    d S r   )rO   test_fillna_seriesr9   r"   rR   r   r   r      s    z"TestSparseArray.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}t	|| d S )Nr
   r   )rX   rn   r   )
r*   re   r   r+   r   r   r   _from_sequencerg   rh   )r9   r"   r   rj   r   rk   r   r   r   test_fillna_frame  s    z!TestSparseArray.test_fillna_framezSparse[bool]c                 C   s   | ddg}tjd|idd}|jd }||}t|jdrn|rZ|jj|jju snJ n|jj|jjusnJ |j	j
 | u sJ d S )Nr
   rX   Fcopy)r   r   blocks)taker*   re   r   r   hasattrZ_mgrr   r   rX   _valuesto_dense)r9   r"   using_copy_on_writearrZdf
filled_valrj   r   r   r   test_fillna_copy_frame  s    

z&TestSparseArray.test_fillna_copy_framec                 C   sn   | ddg}tj|dd}|d }||}|rD|j|ju sTJ n|j|jusTJ |j | u sjJ d S )Nr
   Fr   r   )r   r*   r~   r   r   r   )r9   r"   r   r   r   r   rj   r   r   r   test_fillna_copy_series&  s    
z'TestSparseArray.test_fillna_copy_serieszNot Applicablec                    s   t  | d S r   )rO   test_fillna_length_mismatchr   rR   r   r   r   4  s    z+TestSparseArray.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}
t	
||
 |j||||g|jd}tg d}|||}t|j||||g|jd}
t	
||
 d S )	Nr   r
   r   r   )TTFFfloatg        )TFTT)typer*   r~   r   r   r   arraywherer   rg   Zassert_series_equal)r9   r   rv   clsrY   rZ   r   Zcondrj   Z	new_dtyperk   otherr   r   r   test_where_series8  s     

z!TestSparseArray.test_where_seriesc                    s@   t jtdd t || W d    n1 s20    Y  d S r   )rg   r   r   rO   test_searchsorted)r9   r(   	as_seriesrR   r   r   r   N  s    z!TestSparseArray.test_searchsortedc                 C   s6   | d}|jd |jd< |jd |jd ks2J d S )Nr   r
   )shiftZ_sparse_values)r9   r   rj   r   r   r   test_shift_0_periodsR  s    
z$TestSparseArray.test_shift_0_periodsmethodZargmaxZargminc                    s   |  | t ||| d S r   )rW   rO   test_argmin_argmax_all_na)r9   r   r   rv   rR   r   r   r   Y  s    
z)TestSparseArray.test_argmin_argmax_all_naboxc                    s    |  | t |||| d S r   )rW   rO   test_equals)r9   r   rv   r   r   rR   r   r   r   _  s    
zTestSparseArray.test_equalszfunc, na_action, expectedc                 C   s   | S r   r   rc   r   r   r   r.   g  r/   zTestSparseArray.<lambda>Ng      ?c                 C   s   | S r   r   r   r   r   r   r.   h  r/   ignorez1.0r    r   c                 C   s,   t dtjg}|j||d}t|| d S )Nr
   	na_action)r   r   r    maprg   Zassert_extension_array_equal)r9   funcr   rk   r   rj   r   r   r   test_mapd  s    zTestSparseArray.test_mapr   c                 C   sH   d}t jt|d" |jdd |d W d    n1 s:0    Y  d S )Nz-fill value in the sparse values not supported)matchc                 S   s   t jS r   )r   r    r   r   r   r   r.   x  r/   z1TestSparseArray.test_map_raises.<locals>.<lambda>r   )rI   raises
ValueErrorr   )r9   r   r   msgr   r   r   test_map_raisess  s    zTestSparseArray.test_map_raiseszno sparse StringDtype)r   rB   c                    s   t  | d S r   )rO   test_astype_string)r9   r   Znullable_string_dtyperR   r   r   r   z  s    z"TestSparseArray.test_astype_stringc                 C   s   |j dkrtd d S )Nr   z=Incorrected expected from Series.combine and tested elsewhere)r   rI   rU   rV   r   r   r   _skip_if_different_combine  s    
z*TestSparseArray._skip_if_different_combinec                    s   |  | t || d S r   )r   rO   test_arith_series_with_scalarr9   r   all_arithmetic_operatorsrR   r   r   r     s    
z-TestSparseArray.test_arith_series_with_scalarc                    s   |  | t || d S r   )r   rO   test_arith_series_with_arrayr   rR   r   r   r     s    
z,TestSparseArray.test_arith_series_with_arrayc                    sF   |j jdkrn&|ddvr4tjjdd}|| t || d S )Nr   r%   )mulZrmulfloordivZ	rfloordivpowmodZrmodz result dtype.fill_value mismatchrA   )	r   r   striprI   rJ   rK   r   rO   test_arith_frame_with_scalar)r9   r   r   r   rJ   rR   r   r   r     s    	
z,TestSparseArray.test_arith_frame_with_scalar)r   r5   c           	      C   s   |}|||}t |tjr<t |tjs*J t |jtsJJ nt |tsJJ |jjtjks\J t |tjr||j	|j
j	}t|| t||tjd}n>t|t|j	t|}t|| t||tjd}t |tjrt|}t|| d S )Nr   )
isinstancer*   r~   r   r   r   subtyper   Zbool_r   r   r   r]   allrg   r   )	r9   r   r5   comparison_opr   oprj   r   rk   r   r   r   _compare_other  s2    

zTestSparseArray._compare_other)r5   c                 C   sP   t |}| |||d | |||d | |||d | |||tj d S )Nr   r
   r3   )r*   r~   r   r   r    )r9   r5   r   r   r   r   r   test_scalar  s
    
zTestSparseArray.test_scalarc                 C   sZ   |j jdkr.|jdv r.tjjdd}|| tddd}t	
|}| |||| d S )Nr   )eqgeleWrong fill_valuerA      
   )r   r   __name__rI   rJ   rK   r   r   Zlinspacer*   r~   r   )r9   r5   r   r   rJ   r   r   r   r   r   
test_array  s    

zTestSparseArray.test_arrayc                 C   sl   |j jdkr.|jdkr.tjjdd}|| t|}|d }| 	|||| |d }| 	|||| d S )Nr   gtr   rA   r
   r   )
r   r   r   rI   rJ   rK   r   r*   r~   r   )r9   r5   r   r   rJ   r   r   r   r   r   test_sparse_array  s    

z!TestSparseArray.test_sparse_arrayzDifferent reprc                    s   t  || d S r   )rO   test_array_repr)r9   r   r	   rR   r   r   r     s    zTestSparseArray.test_array_reprzresult does not match expectedas_indexc                    s   t  || d S r   )rO   test_groupby_extension_agg)r9   r   r1   rR   r   r   r     s    z*TestSparseArray.test_groupby_extension_agg)Br   
__module____qualname__strr   r;   rI   rJ   ZparametrizerP   rT   rW   rl   filterwarningsr*   Z
MultiIndexfrom_tuplesrs   rt   rw   rx   ry   rz   r{   r   r   r   r   r   rK   r   r   Z_combine_le_expected_dtyper   r   r   r   r   r   r   r   r~   re   r   r   r   r    r   r   	TypeErrorr   Zseries_scalar_excZframe_scalar_excZ
divmod_excZseries_array_excr   r   r   r   r   r   r   r   r   r   __classcell__r   r   rR   r   r6   e   s   		

$r6   c                 C   s   |   tu sJ d S r   )Zconstruct_array_typer   r   r   r   r   test_array_type_with_arg  s    r   ) __doc__numpyr   rI   Zpandas.errorsr   Zpandasr*   r   Zpandas._testingZ_testingrg   Zpandas.arraysr   Zpandas.tests.extensionr   r   Zfixturer   r    r   r   r"   r'   r(   r)   r0   r1   r5   ZExtensionTestsr6   r   r   r   r   r   <module>   sD   










   