a
    j=icOJ                     @   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}n2t jjdddd}|d |d krL|d  d7  < | |dd d< |S )Nd   )size   r         )npisnanrandomuniformrandint)
fill_valuedata r   s/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/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   dtype+   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   0   s    r   c                   C   s   t tdd S )Nr   r   )r   r   Zonesr   r   r   r   data_for_twos7   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   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   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_sortingR   s    r)   c                   C   s   t jS r   )r   r    r   r   r   r   na_valueW   s    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    r1   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    r2   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    r6   c                       s2   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 )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                    s   t  | d S r   )super
test_ravelr;   	__class__r   r   rB   p   s    zBaseSparseTests.test_ravel)	__name__
__module____qualname__r=   r9   markxfailrB   __classcell__r   r   rC   r   r7   k   s   r7   c                   @   s   e Zd Zdd ZdS )	TestDtypec                 C   s   |  tu sJ d S r   )Zconstruct_array_typer   )r<   r   r   r   r   r   test_array_type_with_argv   s    z"TestDtype.test_array_type_with_argN)rE   rF   rG   rL   r   r   r   r   rK   u   s   rK   c                   @   s   e Zd Zdd Zdd ZdS )TestInterfacec                 C   s   |   d S r   copyr;   r   r   r   	test_copy{   s    zTestInterface.test_copyc                 C   s   |   d S r   )viewr;   r   r   r   	test_view   s    zTestInterface.test_viewN)rE   rF   rG   rP   rR   r   r   r   r   rM   z   s   rM   c                   @   s   e Zd ZdS )TestConstructorsN)rE   rF   rG   r   r   r   r   rS      s   rS   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   r/      r0   zCTestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply.0xr   r   r   
<listcomp>   r0   z:TestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>)r+   	DataFramer[   concatassert_frame_equal)r<   r   Zdf1Zdf2Zdf3dfsresultexpectedr   r   r   test_concat_mixed_dtypes   s    

z&TestReshaping.test_concat_mixed_dtypescolumnsrU   B)rU   rV   )rU   rW   outerinner)namesc                    sB   t jtddd t || W d    n1 s40    Y  d S )NFastype from Sparse)check_stacklevelmatch)tmassert_produces_warningFutureWarningrA   
test_stack)r<   r   rj   rC   r   r   ru      s    
zTestReshaping.test_stackc                    s   |  | t || d S r   )r=   rA   test_concat_columnsr<   r   r*   rC   r   r   rv      s    
z!TestReshaping.test_concat_columnsc                    s   |  | t || d S r   )r=   rA   'test_concat_extension_arrays_copy_falserw   rC   r   r   rx      s    
z5TestReshaping.test_concat_extension_arrays_copy_falsec                    s   |  | t || d S r   )r=   rA   
test_alignrw   rC   r   r   ry      s    
zTestReshaping.test_alignc                    s   |  | t || d S r   )r=   rA   test_align_framerw   rC   r   r   rz      s    
zTestReshaping.test_align_framec                    s   |  | t || d S r   )r=   rA   test_align_series_framerw   rC   r   r   r{      s    
z%TestReshaping.test_align_series_framec                    s   |  | t || d S r   )r=   rA   
test_mergerw   rC   r   r   r|      s    
zTestReshaping.test_merger>   r?   c                    s   t  | d S r   )rA   test_transposer;   rC   r   r   r}      s    zTestReshaping.test_transpose)rE   rF   rG   ri   r9   rH   parametrizer+   Z
MultiIndexfrom_tuplesru   rv   rx   ry   rz   r{   r|   rI   r}   rJ   r   r   rC   r   rT      s$   	rT   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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   )r`   ir   r   r   rb      r0   z(TestGetitem.test_get.<locals>.<listcomp>)indexr5   r   r
   )
r+   Seriesr#   lenr   r   valuesr   getiloc)r<   r   serr   r   r   test_get   s
     &zTestGetitem.test_getc                    s   |  | t || d S r   )r=   rA   test_reindexrw   rC   r   r   r      s    
zTestGetitem.test_reindex)rE   rF   rG   r   r   rJ   r   r   rC   r   r      s   r   c                       s2   e Zd Zdd Zejjdd fddZ  ZS )	TestIndexc                 C   s   d}t jt|d t|}W d    n1 s20    Y  |jjdkrZ|jtjksJ n0|jjdkrx|jtj	ksJ n|j|jjksJ d S )Nzwill store that array directlyrq   fr   )
rr   rs   rt   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 dtyper?   c                    sB   d}t jt|d t | W d    n1 s40    Y  d S )Nz!passing a SparseArray to pd.Indexr   )rr   rs   rt   rA   #test_index_from_listlike_with_dtype)r<   r   r   rC   r   r   r      s    z-TestIndex.test_index_from_listlike_with_dtype)	rE   rF   rG   r   r9   rH   rI   r   rJ   r   r   rC   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   rr   assert_sp_array_equalfillnaZassert_equal)r<   r"   Zsarrexpected_dtyperh   rg   r   r   r   	test_isna   s    
zTestMissing.test_isnac                    s>   t jtdd t | W d    n1 s00    Y  d S NFrp   )rr   rs   r   rA   test_fillna_limit_padr<   r"   rC   r   r   r      s    z!TestMissing.test_fillna_limit_padc                    s>   t jtdd t | W d    n1 s00    Y  d S r   rr   rs   r   rA   test_fillna_limit_backfillr   rC   r   r   r      s    z&TestMissing.test_fillna_limit_backfillc                    s`   t |jr"|jtjjdd tj	t
dd t | W d    n1 sR0    Y  d S )Nz'returns array with different fill valuer?   Fr   )r   r   r   node
add_markerr9   rH   rI   rr   rs   r   rA   test_fillna_no_op_returns_copy)r<   r   r   rC   r   r   r      s    z*TestMissing.test_fillna_no_op_returns_copyc                    s>   t jtdd t | W d    n1 s00    Y  d S r   r   r   rC   r   r   test_fillna_series_method  s    z%TestMissing.test_fillna_series_methodZUnsupportedr?   c                    s   t |   d S r   )rA   test_fillna_series)r<   rC   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   )rU   rk   r   )	r+   rc   r   r,   r   r   r   _from_sequencere   )r<   r"   r   rg   r   rh   r   r   r   test_fillna_frame  s    zTestMissing.test_fillna_frame)rE   rF   rG   r   r   r   r   r   r9   rH   rI   r   r   rJ   r   r   rC   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   s   | |kS r   r   x1Zx2r   r   r   r/   .  r0   z-TestMethods.test_combine_le.<locals>.<lambda>c                 S   s   g | ]\}}||kqS r   r   )r`   rV   rW   r   r   r   rb   1  r0   z/TestMethods.test_combine_le.<locals>.<listcomp>Fr   r   c                 S   s   | |kS r   r   r   r   r   r   r/   8  r0   c                    s   g | ]}| kqS r   r   )r`   rV   valr   r   rb   :  r0   )r+   r   combiner   ziplistassert_series_equalr   )r<   r'   Z
orig_data1Z
orig_data2s1s2rg   rh   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rT|jj|jjusTJ |j	j
 | u slJ d S )Nr
   rU   FrN   )r   r   blocks)taker+   rc   r   r   hasattr_mgrr   r   rU   _valuesto_dense)r<   r"   arrdf
filled_valrg   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 sPJ d S )Nr
   r   )r   r+   r   r   r   r   )r<   r"   r   r   r   rg   r   r   r   test_fillna_copy_seriesI  s    

z#TestMethods.test_fillna_copy_serieszNot Applicabler?   c                    s   t  | d S r   )rA   test_fillna_length_mismatchr   rC   r   r   r   S  s    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*   clsrV   rW   r   Zcondrg   Z	new_dtyperh   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 )Nr8   z2TODO(SparseArray.__setitem__) will preserve dtype.r?   )	r   r   r9   rH   rI   r   r   rA   test_combine_first)r<   r   r   rH   rC   r   r   r   m  s    zTestMethods.test_combine_firstc                    s@   t jtdd t || W d    n1 s20    Y  d S r   )rr   rs   r   rA   test_searchsorted)r<   r(   	as_seriesrC   r   r   r   w  s    zTestMethods.test_searchsortedc                 C   s6   | d}|jd |jd< |jd |jd ks2J d S )Nr   r
   )shiftZ_sparse_values)r<   r   rg   r   r   r   test_shift_0_periods{  s    
z TestMethods.test_shift_0_periodsmethodZargmaxZargminc                    s   |  | t ||| d S r   )r=   rA   test_argmin_argmax_all_na)r<   r   r   r*   rC   r   r   r     s    
z%TestMethods.test_argmin_argmax_all_naboxc                    s    |  | t |||| d S r   )r=   rA   test_equals)r<   r   r*   r   r   rC   r   r   r     s    
zTestMethods.test_equals)rE   rF   rG   r   r   r   r9   rH   rI   r   r   r   r   r   r~   r   r+   r   r   rc   r   rJ   r   r   rC   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<0    Y  t|jsTJ t|j	j
jsfJ d S )NrU   )namero   r   )r+   r   rr   rs   rt   r[   r\   r   r   r   r   )r<   all_datar   rg   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<0    Y  t|jj	d j
s\J |j|jk}| rtJ d S )NrU   ro   r   r   )r+   rc   rr   rs   rt   r[   r\   r   r   Zarraysr   Zdtypesany)r<   r   r   rg   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<0    Y  ttt|j}tjdd |d d D |d}| 	|| d S )Nro   r      c                 S   s   g | ]}t |qS r   )strr_   r   r   r   rb     r0   z/TestCasting.test_astype_str.<locals>.<listcomp>r   )
rr   rs   rt   r+   r   r[   r   r   r   r   )r<   r   rg   r   rh   r   r   r   test_astype_str  s
    6 zTestCasting.test_astype_strzno sparse StringDtype)raisesr@   c                    s   t  | d S r   )rA   test_astype_stringr;   rC   r   r   r     s    zTestCasting.test_astype_string)rE   rF   rG   r   r   r   r9   rH   rI   	TypeErrorr   rJ   r   r   rC   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 )Nr   z=Incorrected expected from Series.combine and tested elsewhere)r   r9   r:   r;   r   r   r   _skip_if_different_combine  s    
z,TestArithmeticOps._skip_if_different_combinec                    s   |  | t || d S r   )r   rA   test_arith_series_with_scalarr<   r   all_arithmetic_operatorsrC   r   r   r     s    
z/TestArithmeticOps.test_arith_series_with_scalarc                    s   |  | t || d S r   )r   rA   test_arith_series_with_arrayr   rC   r   r   r     s    
z.TestArithmeticOps.test_arith_series_with_arrayc                    sH   |j jdkrn(|ddvr6tjjdd}|j| t 	|| d S )Nr   r%   )mulZrmulfloordivZ	rfloordivpowmodZrmodz result dtype.fill_value mismatchr?   )
r   r   stripr9   rH   rI   r   r   rA   test_arith_frame_with_scalar)r<   r   r   r   rH   rC   r   r   r     s    	z.TestArithmeticOps.test_arith_frame_with_scalarc                    s   t  j|||d d d S )N)exc)rA   _check_divmod_op)r<   r   opr   r   rC   r   r   r     s    z"TestArithmeticOps._check_divmod_op)rE   rF   rG   Zseries_scalar_excZframe_scalar_excZ
divmod_excZseries_array_excr   r   r   r   NotImplementedErrorr   rJ   r   r   rC   r   r     s   r   c                   @   s`   e Zd ZedddZedddZejjddeddd	Z	ejjddedd
dZ
dS )TestComparisonOps)r6   c                 C   s   |}|||}t |tsJ |jjtjks.J t |trH||j|j}n>t|t|jt|}t||	 t||tjd}t
|| d S )Nr   )
isinstancer   r   r   r   Zbool_r   allrZ   r   rr   r   )r<   r6   comparison_opr   r   rg   r   rh   r   r   r   _compare_other  s    

z TestComparisonOps._compare_otherc                 C   s>   |  ||d |  ||d |  ||d |  ||tj d S )Nr   r
   r4   )r   r   r    )r<   r6   r   r   r   r   test_scalar  s    zTestComparisonOps.test_scalarzWrong indicesr?   c                 C   s    t ddd}| ||| d S )Nr   
   )r   Zlinspacer   r<   r6   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)rE   rF   rG   r   r   r   r9   rH   rI   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   )rA   test_array_repr)r<   r   r	   rC   r   r   r     s    zTestPrinting.test_array_repr)rE   rF   rG   r9   rH   rI   r   rJ   r   r   rC   r   r     s   r   c                       s.   e Zd Zejdddg fddZ  ZS )TestParsingenginerX   pythonc              	      sr   d}t jt|dL tjtdd t || W d    n1 sF0    Y  W d    n1 sd0    Y  d S )Nz,.*must implement _from_sequence_of_strings.*r   zastype from)r9   r   r   rr   rs   rt   rA   test_EA_types)r<   r   r   Zexpected_msgrC   r   r   r     s    zTestParsing.test_EA_types)rE   rF   rG   r9   rH   r~   r   rJ   r   r   rC   r   r   
  s   r   ):__doc__numpyr   r9   Zpandas.errorsr   Zpandas.core.dtypes.commonr   Zpandasr+   r   Zpandas._testingZ_testingrr   Zpandas.arraysr   Zpandas.tests.extensionr   r   Zfixturer   r    r   r   r"   r'   r(   r)   r*   r1   r2   r6   r7   ZBaseDtypeTestsrK   ZBaseInterfaceTestsrM   ZBaseConstructorsTestsrS   ZBaseReshapingTestsrT   ZBaseGetitemTestsr   ZBaseIndexTestsr   ZBaseMissingTestsr   ZBaseMethodsTestsr   ZBaseCastingTestsr   ZBaseArithmeticOpsTestsr   r   ZBasePrintingTestsr   ZBaseParsingTestsr   r   r   r   r   <module>   s\   





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