o
    h[F                     @   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}n|jdddtd}|d |d kr+|d  d7  < | |dd d< |S )N   d   )size   )r	   dtyper      )nprandomdefault_rngisnanuniformintegersint)
fill_valuerngdata r   v/var/www/html/construction_image-detection-poc/venv/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   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   onesr   r   r   r   data_for_twos6      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   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_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   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_grouping[   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_compare`   s   $r9   c                       sh  e Zd Zdedef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d0d1Zejjd2d3 fd4d5Zd6d7 Zd8Z d9d: Z!d;d< Z"ejjd=d3 fd>d?Z#d@dA Z$ fdBdCZ%dDdE Z&ejdFdGdHg fdIdJZ'ejj(ejdKej)ej*ej+g fdLdMZ,ejj( fdNdOZ-ejdPdQdR dSe.dTe/j0gfdUdR dVe.dTe/j0gfedSe.dWdXgdXdYfedVe.dWe/j0gfgdZd[ Z1ejd\dSdVgd]d^ Z2ejje3d_d` fdadbZ4dSZ5dSZ6dSZ7dSZ8dcdd Z9 fdedfZ: fdgdhZ; fdidjZ<dkej*dle.fdmdnZ=dle.fdodpZ>dle.fdqdrZ?dle.fdsdtZ@ejjdud3 fdvdwZAejjdxd3ejdyddg fdzd{ZB  ZCS )|TestSparseArrayop_namereturnc                 C   s   dS )NTr   )selfobjr;   r   r   r   _supports_reductionf   s   z#TestSparseArray._supports_reductionskipnaTFc                    j   |dv rt jjdd}|j| n|dv r+|jjdkr+|s+t jjdd}|j| t ||| d S )Nprodmedianvarstdsemskew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r=   r   all_numeric_reductionsr@   r   rT   	__class__r   r   rZ   i      	z*TestSparseArray.test_reduce_series_numericc                    rA   )NrB   rJ   rK   rM   rR   z$ExtensionArray NA mask are different)	rS   rT   rU   rV   rW   r   rX   rY   test_reduce_framer[   r]   r   r   r`      r_   z!TestSparseArray.test_reduce_framec                 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   r   rS   skipr=   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   r2      s    zETestSparseArray.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply).0xr   r   r   
<listcomp>   s    z<TestSparseArray.test_concat_mixed_dtypes.<locals>.<listcomp>)r.   	DataFramerj   concattmassert_frame_equal)r=   r   df1df2df3dfsresultexpectedr   r   r   test_concat_mixed_dtypes   s   

z(TestSparseArray.test_concat_mixed_dtypesz9ignore:The previous implementation of stack is deprecatedcolumnsrd   B)rd   re   )rd   rf   outerinner)namesfuture_stackc                    s   t  ||| d S r   )rY   
test_stack)r=   r   r|   r   r]   r   r   r      s   zTestSparseArray.test_stackc                       |  | t || d S r   )rc   rY   test_concat_columnsr=   r   na_valuer]   r   r   r         
z#TestSparseArray.test_concat_columnsc                    r   r   )rc   rY   'test_concat_extension_arrays_copy_falser   r]   r   r   r      r   z7TestSparseArray.test_concat_extension_arrays_copy_falsec                    r   r   )rc   rY   
test_alignr   r]   r   r   r      r   zTestSparseArray.test_alignc                    r   r   )rc   rY   test_align_framer   r]   r   r   r      r   z TestSparseArray.test_align_framec                    r   r   )rc   rY   test_align_series_framer   r]   r   r   r      r   z'TestSparseArray.test_align_series_framec                    r   r   )rc   rY   
test_merger   r]   r   r   r      r   zTestSparseArray.test_mergec                 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   )rn   ir   r   r   rp      r3   z,TestSparseArray.test_get.<locals>.<listcomp>)indexr8   r   r
   )
r.   Seriesr'   lenr   r   valuesr   getiloc)r=   r   serr   r   r   test_get   s
    &zTestSparseArray.test_getc                    r   r   )rc   rY   test_reindexr   r]   r   r   r      r   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   rs   assert_sp_array_equalfillnaassert_equal)r=   r&   sarrexpected_dtyperz   ry   r   r   r   	test_isna   s   
zTestSparseArray.test_isnac                    sH   t tf}tj|dd t | W d    d S 1 sw   Y  d S NF)check_stacklevel)r   FutureWarningrs   assert_produces_warningrY   test_fillna_limit_backfill)r=   r&   warnsr]   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 valuerK   )	r   r   r   applymarkerrS   rT   rU   rY   test_fillna_no_op_returns_copy)r=   r   r   r]   r   r   r      s
   z.TestSparseArray.test_fillna_no_op_returns_copyUnsupportedrK   c                    s   t    d S r   )rY   test_fillna_seriesr=   r&   r]   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   )rd   r}   r   )
r.   rq   r   r/   r   r   r   _from_sequencers   rt   )r=   r&   r   ry   r   rz   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r7|r-|jj|jju s,J n
|jj|jjus7J |j	j
 | u sCJ d S )Nr
   rd   Fcopy)r   r   blocks)taker.   rq   r   r   hasattr_mgrr   r   rd   _valuesto_dense)r=   r&   using_copy_on_writearrdf
filled_valry   r   r   r   test_fillna_copy_frame  s   

z&TestSparseArray.test_fillna_copy_framec                 C   sn   | ddg}tj|dd}|d }||}|r"|j|ju s!J n|j|jus*J |j | u s5J d S )Nr
   Fr   r   )r   r.   r   r   r   r   )r=   r&   r   r   r   r   ry   r   r   r   test_fillna_copy_series&  s   
z'TestSparseArray.test_fillna_copy_serieszNot Applicablec                       t  | d S r   )rY   test_fillna_length_mismatchr   r]   r   r   r   4     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   rs   assert_series_equal)r=   r   r   clsre   rf   r   condry   	new_dtyperz   otherr   r   r   test_where_series8  s    

z!TestSparseArray.test_where_seriesc                    sB   t jtdd t || W d    d S 1 sw   Y  d S r   )rs   r   r   rY   test_searchsorted)r=   r,   	as_seriesr]   r   r   r   N  s   "z!TestSparseArray.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   ry   r   r   r   test_shift_0_periodsR  s   
z$TestSparseArray.test_shift_0_periodsmethodargmaxargminc                    s   |  | t ||| d S r   )rc   rY   test_argmin_argmax_all_na)r=   r   r   r   r]   r   r   r   Y  s   
z)TestSparseArray.test_argmin_argmax_all_naboxc                    s    |  | t |||| d S r   )rc   rY   test_equals)r=   r   r   r   r   r]   r   r   r   _  s   
zTestSparseArray.test_equalsc                    r   r   )rY   &test_equals_same_data_different_objectrb   r]   r   r   r   e  r   z6TestSparseArray.test_equals_same_data_different_objectzfunc, na_action, expectedc                 C      | S r   r   ro   r   r   r   r2   l      zTestSparseArray.<lambda>Ng      ?c                 C   r   r   r   r   r   r   r   r2   m  r   ignorez1.0r$   r   c                 C   s,   t dtjg}|j||d}t|| d S )Nr
   	na_action)r   r   r$   maprs   assert_extension_array_equal)r=   funcr   rz   r   ry   r   r   r   test_mapi  s   zTestSparseArray.test_mapr   c                 C   sJ   d}t jt|d |jdd |d W d    d S 1 sw   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   r2   }  s    z1TestSparseArray.test_map_raises.<locals>.<lambda>r   )rS   raises
ValueErrorr   )r=   r   r   msgr   r   r   test_map_raisesx  s   "zTestSparseArray.test_map_raiseszno sparse StringDtype)r   rL   c                    r   r   )rY   test_astype_string)r=   r   nullable_string_dtyper]   r   r   r     s   z"TestSparseArray.test_astype_stringc                 C   s   |j dkrtd d S d S )Nr   z=Incorrected expected from Series.combine and tested elsewhere)r   rS   ra   rb   r   r   r   _skip_if_different_combine  s   
z*TestSparseArray._skip_if_different_combinec                    r   r   )r   rY   test_arith_series_with_scalarr=   r   all_arithmetic_operatorsr]   r   r   r     r   z-TestSparseArray.test_arith_series_with_scalarc                    r   r   )r   rY   test_arith_series_with_arrayr   r]   r   r   r     r   z,TestSparseArray.test_arith_series_with_arrayc                    sF   |j jdkrn|ddvrtjjdd}|| t || d S )Nr   r)   )mulrmulfloordiv	rfloordivpowmodrmodz result dtype.fill_value mismatchrK   )	r   r   striprS   rT   rU   r   rY   test_arith_frame_with_scalar)r=   r   r   r   rT   r]   r   r   r     s   	
z,TestSparseArray.test_arith_frame_with_scalarr   r9   c           	      C   s   |}|||}t |tjrt |tjsJ t |jtsJ nt |ts%J |jjtjks.J t |tjrM||j	|j
j	}t|| t||tjd}nt|t|j	t|}t|| t||tjd}t |tjrwt|}t|| d S )Nr   )
isinstancer.   r   r   r   r   subtyper   bool_r   r   r   ri   allrs   r   )	r=   r   r9   comparison_opr   opry   r   rz   r   r   r   _compare_other  s2   

zTestSparseArray._compare_otherc                 C   sP   t |}| |||d | |||d | |||d | |||tj d S )Nr   r
   r7   )r.   r   r   r   r$   )r=   r9   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_valuerK      
   )r   r   __name__rS   rT   rU   r   r   linspacer.   r   r   )r=   r9   r   r   rT   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   rK   r
   r   )
r   r   r  rS   rT   rU   r   r.   r   r   )r=   r9   r   r   rT   r   r   r   r   r   test_sparse_array  s   

z!TestSparseArray.test_sparse_arrayzDifferent reprc                       t  || d S r   )rY   test_array_repr)r=   r   r	   r]   r   r   r    r"   zTestSparseArray.test_array_reprzresult does not match expectedas_indexc                    r  r   )rY   test_groupby_extension_agg)r=   r	  r5   r]   r   r   r
    s   z*TestSparseArray.test_groupby_extension_agg)Dr  
__module____qualname__strr   r?   rS   rT   parametrizerZ   r`   rc   r{   filterwarningsr.   
MultiIndexfrom_tuplesr   r   r   r   r   r   r   r   r   r   r   r   rU   r   r   _combine_le_expected_dtyper   r   r   r   r   r   r   fails_arm_wheelsr   r   rq   r   r   r   r   r$   r   r   	TypeErrorr   series_scalar_excframe_scalar_exc
divmod_excseries_array_excr   r   r   r   r   r   r  r  r  r
  __classcell__r   r   r]   r   r:   e   s    	
	

$r:   c                 C   s   |   tu sJ d S r   )construct_array_typer   r   r   r   r   test_array_type_with_arg  s   r  ) __doc__numpyr   rS   pandas.errorsr   pandasr.   r   pandas._testing_testingrs   pandas.arraysr   pandas.tests.extensionr   r   fixturer   r$   r   r!   r&   r+   r,   r-   r4   r5   r9   ExtensionTestsr:   r  r   r   r   r   <module>   sF    










   