o
    ҷh<                     @   sv  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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ej(Z)G d,d- d-ej*Z+G d.d/ d/eej,Z-G d0d1 d1eej.Z/G d2d3 d3eej0Z1G d4d5 d5eej2Z3G d6d7 d7eZ4G d8d9 d9eej5Z6G d:d; d;eej7Z8G d<d= d=ej9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   U/var/www/html/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                   @      e Zd Zdd Zd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   r   pytestskipselfr   r   r   r   _check_unsupportedf   s   z"BaseSparseTests._check_unsupportedN)__name__
__module____qualname__r@   r   r   r   r   r;   e       r;   c                   @   r:   )	TestDtypec                 C   s   |  tu sJ d S r   )construct_array_typer   )r?   r   r   r   r   r   test_array_type_with_argl   s   z"TestDtype.test_array_type_with_argN)rA   rB   rC   rG   r   r   r   r   rE   k   rD   rE   c                   @      e Zd ZdS )TestInterfaceNrA   rB   rC   r   r   r   r   rI   p       rI   c                   @   rH   )TestConstructorsNrJ   r   r   r   r   rL   t   rK   rL   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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  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 }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    zCTestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply).0xr   r   r   
<listcomp>   s    z:TestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>)r.   	DataFramerT   concattmassert_frame_equal)r?   r   df1df2df3dfsresultexpectedr   r   r   test_concat_mixed_dtypesy   s   

z&TestReshaping.test_concat_mixed_dtypescolumnsrN   B)rN   rO   )rN   rP   outerinner)namesfuture_stackTFc                    s   t  ||| d S r   )super
test_stack)r?   r   rf   rk   	__class__r   r   rm      s   zTestReshaping.test_stackc                       |  | t || d S r   )r@   rl   test_concat_columnsr?   r   na_valuern   r   r   rq         
z!TestReshaping.test_concat_columnsc                    rp   r   )r@   rl   'test_concat_extension_arrays_copy_falserr   rn   r   r   ru      rt   z5TestReshaping.test_concat_extension_arrays_copy_falsec                    rp   r   )r@   rl   
test_alignrr   rn   r   r   rv      rt   zTestReshaping.test_alignc                    rp   r   )r@   rl   test_align_framerr   rn   r   r   rw      rt   zTestReshaping.test_align_framec                    rp   r   )r@   rl   test_align_series_framerr   rn   r   r   rx      rt   z%TestReshaping.test_align_series_framec                    rp   r   )r@   rl   
test_mergerr   rn   r   r   ry      rt   zTestReshaping.test_merge)rA   rB   rC   re   r<   markparametrizer.   
MultiIndexfrom_tuplesrm   rq   ru   rv   rw   rx   ry   __classcell__r   r   rn   r   rM   x   s$    	rM   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   )rX   ir   r   r   rZ      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                    rp   r   )r@   rl   test_reindexrr   rn   r   r   r      rt   zTestGetitem.test_reindex)rA   rB   rC   r   r   r~   r   r   rn   r   r      s    r   c                   @   rH   )TestSetitemNrJ   r   r   r   r   r      rK   r   c                   @   rH   )	TestIndexNrJ   r   r   r   r   r      rK   r   c                       sR   e Zd Z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}t
| | 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_dtyperd   rc   r   r   r   	test_isna   s   
zTestMissing.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   FutureWarningr]   assert_produces_warningrl   test_fillna_limit_backfill)r?   r&   warnsrn   r   r   r      s   "z&TestMissing.test_fillna_limit_backfillc                    s2   t |jr|jtjjdd t 	| d S )Nz'returns array with different fill valuereason)
r   r   r   node
add_markerr<   rz   xfailrl   test_fillna_no_op_returns_copy)r?   r   r   rn   r   r   r      s
   z*TestMissing.test_fillna_no_op_returns_copyUnsupportedr   c                    s   t    d S r   )rl   test_fillna_series)r?   rn   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}t	|| d S )Nr
   r   )rN   rg   r   )
r.   r[   r   r/   r   r   r   _from_sequencer]   r^   )r?   r&   r   rc   r   rd   r   r   r   test_fillna_frame   s   zTestMissing.test_fillna_frame)rA   rB   rC   r   r   r   r<   rz   r   r   r   r~   r   r   rn   r   r      s    r   c                       s   e Zd ZdZdd Zdd Zejjdd fdd	Z	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ejddd dedejgfdd dedejgfededd gd d!fededejgfgd"d# Zejd$ddgd%d& Z  ZS )'TestMethodsz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
   rN   Fcopy)r   r   blocks)taker.   r[   r   r   hasattr_mgrr   r   rN   _valuesto_dense)r?   r&   using_copy_on_writearrdf
filled_valrc   r   r   r   test_fillna_copy_frame   s   

z"TestMethods.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   rc   r   r   r   test_fillna_copy_series	  s   
z#TestMethods.test_fillna_copy_serieszNot Applicabler   c                       t  | d S r   )rl   test_fillna_length_mismatch)r?   r&   rn   r   r   r        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}
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   r]   assert_series_equal)r?   r   rs   clsrO   rP   r   condrc   	new_dtyperd   otherr   r   r   test_where_series  s    

zTestMethods.test_where_seriesc                    sB   t jtdd t || W d    d S 1 sw   Y  d S r   )r]   r   r   rl   test_searchsorted)r?   r,   	as_seriesrn   r   r   r   1  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   rc   r   r   r   test_shift_0_periods5  s   
z TestMethods.test_shift_0_periodsmethodargmaxargminc                    s   |  | t ||| d S r   )r@   rl   test_argmin_argmax_all_na)r?   r   r   rs   rn   r   r   r   <  s   
z%TestMethods.test_argmin_argmax_all_naboxc                    s    |  | t |||| d S r   )r@   rl   test_equals)r?   r   rs   r   r   rn   r   r   r   B  s   
zTestMethods.test_equalszfunc, na_action, expectedc                 C      | S r   r   rY   r   r   r   r2   J      zTestMethods.<lambda>Ng      ?c                 C   r   r   r   r   r   r   r   r2   K  r   ignorez1.0r$   r   c                 C   s,   t dtjg}|j||d}t|| d S )Nr
   	na_action)r   r   r$   mapr]   assert_extension_array_equal)r?   funcr   rd   r   rc   r   r   r   test_mapG  s   zTestMethods.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    z-TestMethods.test_map_raises.<locals>.<lambda>r   )r<   raises
ValueErrorr   )r?   r   r   msgr   r   r   test_map_raisesV  s   "zTestMethods.test_map_raises)rA   rB   rC   _combine_le_expected_dtyper   r   r<   rz   r   r   r   r   r   r{   r   r.   r   r   r[   r   r   r   r$   strr   r   r~   r   r   rn   r   r      s0    
	r   c                       s,   e Zd Zejjedd fddZ  ZS )TestCastingzno sparse StringDtype)r   r   c                    r   r   )rl   test_astype_stringr>   rn   r   r   r   _  r   zTestCasting.test_astype_string)	rA   rB   rC   r<   rz   r   	TypeErrorr   r~   r   r   rn   r   r   ^  s    r   c                       sL   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
  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_combinej  s   
z,TestArithmeticOps._skip_if_different_combinec                    rp   r   )r   rl   test_arith_series_with_scalarr?   r   all_arithmetic_operatorsrn   r   r   r   q  rt   z/TestArithmeticOps.test_arith_series_with_scalarc                    rp   r   )r   rl   test_arith_series_with_arrayr   rn   r   r   r   u  rt   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 mismatchr   )
r   r   stripr<   rz   r   r   r   rl   test_arith_frame_with_scalar)r?   r   r   r   rz   rn   r   r   r   y  s   	z.TestArithmeticOps.test_arith_frame_with_scalar)rA   rB   rC   series_scalar_excframe_scalar_exc
divmod_excseries_array_excr   r   r   r   r~   r   r   rn   r   r   d  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   subtyper   bool_r   allrS   r   r]   r   )r?   r9   comparison_opr   oprc   r   rd   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 indicesr   c                 C   s    t ddd}| ||| d S )N   
   )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)rA   rB   rC   r   r   r   r<   rz   r   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 reprr   c                    s   t  || d S r   )rl   test_array_repr)r?   r   r	   rn   r   r   r    r"   zTestPrinting.test_array_repr)rA   rB   rC   r<   rz   r   r  r~   r   r   rn   r   r    s    r  c                       s.   e Zd Zejdddg fddZ  ZS )TestParsingenginerQ   pythonc                    sF   d}t jt|d t || W d    d S 1 sw   Y  d S )Nz,.*must implement _from_sequence_of_strings.*r   )r<   r   NotImplementedErrorrl   test_EA_types)r?   r  r   expected_msgrn   r   r   r    s   "zTestParsing.test_EA_types)rA   rB   rC   r<   rz   r{   r  r~   r   r   rn   r   r    s    r  c                   @   rH   )TestNoNumericAccumulationsNrJ   r   r   r   r   r    rK   r  );__doc__numpyr   r<   pandas.errorsr   pandasr.   r   pandas._testing_testingr]   pandas.arraysr   pandas.tests.extensionr   r   fixturer   r$   r   r!   r&   r+   r,   r-   r4   r5   r9   r;   BaseDtypeTestsrE   BaseInterfaceTestsrI   BaseConstructorsTestsrL   BaseReshapingTestsrM   BaseGetitemTestsr   BaseSetitemTestsr   BaseIndexTestsr   BaseMissingTestsr   BaseMethodsTestsr   BaseCastingTestsr   BaseArithmeticOpsTestsr   r   BasePrintingTestsr  BaseParsingTestsr  BaseAccumulateTestsr  r   r   r   r   <module>   s\    










64f&)