U
    *ifEG                     @   sv  d Z ddlZddlZddlm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 d0d1 d1e"ej/Z0G d2d3 d3e"ej1Z2G d4d5 d5e"ej3Z4G d6d7 d7e"ej5Z6G d8d9 d9e"Z7G d:d; d;e"ej8Z9G d<d= d=e"ej: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)np_version_under1p20)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   U/home/mars/bis/venv/lib/python3.8/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   1   s    r   c                 C   s   t tdd S )Nr	   r   )r   r   Zonesr   r   r   r   data_for_twos8   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   genG   s    zdata_repeated.<locals>.genNr   )r   r'   r   r   r   data_repeatedC   s    r(   c                 C   s   t dddg| jdS )Nr   r   r   r   )r   r   r   r   r   r   data_for_sortingN   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_sortingS   s    r*   c                   C   s   t jS r   )r   r"   r   r   r   r   na_valueX   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    r2   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_groupingb   s    r3   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_compareg   s    r7   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_unsupportedm   s    z"BaseSparseTests._check_unsupported$SparseArray does not support setitemreasonc                    s   t  | d S r   )super
test_ravelr<   	__class__r   r   rC   q   s    zBaseSparseTests.test_ravel)	__name__
__module____qualname__r>   r:   markxfailrC   __classcell__r   r   rD   r   r8   l   s   r8   c                   @   s   e Zd Zdd ZdS )	TestDtypec                 C   s   |  tkstd S r   )Zconstruct_array_typer   AssertionError)r=   r   r   r   r   r   test_array_type_with_argw   s    z"TestDtype.test_array_type_with_argN)rF   rG   rH   rN   r   r   r   r   rL   v   s   rL   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)rF   rG   rH   rR   rT   r   r   r   r   rO   {   s   rO   c                   @   s   e Zd ZdS )TestConstructorsN)rF   rG   rH   r   r   r   r   rU      s   rU   c                       sz   e Zd Z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   s|   t d|d d i}t ddddgi}t ddddgid}|||g}t |}t d	d
 |D }| || d S )NAr   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   r0      r1   zCTestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply.0xr   r   r   
<listcomp>   s     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_dtypesc                    s   |  | t || d S r   )r>   rB   test_concat_columnsr=   r   r+   rD   r   r   rl      s    
z!TestReshaping.test_concat_columnsc                    s   |  | t || d S r   )r>   rB   'test_concat_extension_arrays_copy_falserm   rD   r   r   rn      s    
z5TestReshaping.test_concat_extension_arrays_copy_falsec                    s   |  | t || d S r   )r>   rB   
test_alignrm   rD   r   r   ro      s    
zTestReshaping.test_alignc                    s   |  | t || d S r   )r>   rB   test_align_framerm   rD   r   r   rp      s    
zTestReshaping.test_align_framec                    s   |  | t || d S r   )r>   rB   test_align_series_framerm   rD   r   r   rq      s    
z%TestReshaping.test_align_series_framec                    s   |  | t || d S r   )r>   rB   
test_mergerm   rD   r   r   rr      s    
zTestReshaping.test_merger?   r@   c                    s   t  | d S r   )rB   test_transposer<   rD   r   r   rs      s    zTestReshaping.test_transpose)rF   rG   rH   rk   rl   rn   ro   rp   rq   rr   r:   rI   rJ   rs   rK   r   r   rD   r   rV      s   rV   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 slt
n|d|j	d kslt
|d|j	d kst
d S )Nc                 S   s   g | ]}d | qS )r   r   )rb   ir   r   r   rd      s     z(TestGetitem.test_get.<locals>.<listcomp>)indexr6   r   r   )r,   Seriesr$   lenr   r   valuesr   getilocrM   )r=   r   serr   r   r   test_get   s
     &zTestGetitem.test_getc                    s   |  | t || d S r   )r>   rB   test_reindexrm   rD   r   r   r~      s    
zTestGetitem.test_reindex)rF   rG   rH   r}   r~   rK   r   r   rD   r   rt      s   rt   c                       s2   e Zd Zdd Zejjdd fddZ  ZS )	TestIndexc              	   C   sz   d}t jt|d t|}W 5 Q R X |jjdkrF|jtjksvt	n0|jjdkrd|jtj
ksvt	n|j|jjksvt	d S )Nzwill store that array directlymatchfru   )tmassert_produces_warningFutureWarningr,   Indexr   subtyper   Zfloat64rM   Z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              	      s.   d}t jt|d t | W 5 Q R X d S )Nz!passing a SparseArray to pd.Indexr   )r   r   r   rB   #test_index_from_listlike_with_dtype)r=   r   r   rD   r   r   r      s    z-TestIndex.test_index_from_listlike_with_dtype)	rF   rG   rH   r   r:   rI   rJ   r   rK   r   r   rD   r   r      s   r   c                       sf   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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fillnaZassert_equal)r=   r#   Zsarrexpected_dtyperj   ri   r   r   r   	test_isna   s    
zTestMissing.test_isnac              	      s&   t t t | W 5 Q R X d S r   )r   r   r   rB   test_fillna_limit_padr=   r#   rD   r   r   r      s    z!TestMissing.test_fillna_limit_padc              	      s&   t t t | W 5 Q R X d S r   r   r   r   rB   test_fillna_limit_backfillr   rD   r   r   r      s    z&TestMissing.test_fillna_limit_backfillc              	      sH   t |jr"|jtjjdd t	t
 t | W 5 Q R X d S )Nz'returns array with different fill valuer@   )r   r   r   node
add_markerr:   rI   rJ   r   r   r   rB   test_fillna_no_op_returns_copy)r=   r   r   rD   r   r   r      s    z*TestMissing.test_fillna_no_op_returns_copyc              	      s&   t t t | W 5 Q R X d S r   r   r   rD   r   r   test_fillna_series_method   s    z%TestMissing.test_fillna_series_methodZUnsupportedr@   c                 C   s   d S r   r   )r=   r   r   r   test_fillna_series   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   )rW   Br   )	r,   re   r   r-   r   r   r   _from_sequencerg   )r=   r#   r   ri   r   rj   r   r   r   test_fillna_frame  s    zTestMissing.test_fillna_frame)rF   rG   rH   r   r   r   r   r   r:   rI   r;   r   r   rK   r   r   rD   r   r      s   
r   c                       s   e Zd Zdd Zdd Zdd Zejjdd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   r0      r1   z-TestMethods.test_combine_le.<locals>.<lambda>c                 S   s   g | ]\}}||kqS r   r   )rb   rX   rY   r   r   r   rd   #  s     z/TestMethods.test_combine_le.<locals>.<listcomp>Fr   r   c                 S   s   | |kS r   r   r   r   r   r   r0   *  r1   c                    s   g | ]}| kqS r   r   )rb   rX   valr   r   rd   ,  s     )r,   rw   combiner   ziplistassert_series_equalr{   )r=   r(   Z
orig_data1Z
orig_data2s1s2ri   rj   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k	sTt	|j
j | kslt	d S )Nr   rW   FrP   )r   r   blocks)taker,   re   r{   r   hasattr_mgrry   r   rM   rW   _valuesto_dense)r=   r#   arrdf
filled_valri   r   r   r   test_fillna_copy_frame0  s    

z"TestMethods.test_fillna_copy_framec                 C   sT   | ddg}t|}|d }||}|j|jk	s:t|j | ksPtd S )Nr   r   )r   r,   rw   r   r   rM   r   )r=   r#   r   r|   r   ri   r   r   r   test_fillna_copy_series;  s    

z#TestMethods.test_fillna_copy_serieszNot Applicabler@   c                 C   s   d S r   r   r   r   r   r   test_fillna_length_mismatchE  s    z'TestMethods.test_fillna_length_mismatchc                 C   s   |d |d kst t|}|d d \}}t|j||||g|jd}tddddg}||}t	dd}	t|j||||g|	d}
| 
||
 |j||||g|jd}tddddg}|||}t|j||||g|jd}
| 
||
 d S )	Nr   r   r   r   TFfloatg        )rM   typer,   rw   r   r   r   arraywherer   r   )r=   r   r+   clsrX   rY   r|   Zcondri   Z	new_dtyperj   otherr   r   r   test_where_seriesI  s     

zTestMethods.test_where_seriesc                    s6   |j jdkr&tjjdd}|j| t | d S )Nr9   z2TODO(SparseArray.__setitem__) will preserve dtype.r@   )	r   r   r:   rI   rJ   r   r   rB   test_combine_first)r=   r   r   rI   rD   r   r   r   _  s    zTestMethods.test_combine_firstc              	      s(   t t t || W 5 Q R X d S r   )r   r   r   rB   test_searchsorted)r=   r)   	as_seriesrD   r   r   r   i  s    zTestMethods.test_searchsortedc                 C   s6   | d}|jd |jd< |jd |jd ks2td S )Nr   r   )shiftZ_sparse_valuesrM   )r=   r   ri   r   r   r   test_shift_0_periodsm  s    
z TestMethods.test_shift_0_periodsmethodZargmaxZargminc                    s   |  | t ||| d S r   )r>   rB   test_argmin_argmax_all_na)r=   r   r   r+   rD   r   r   r   t  s    
z%TestMethods.test_argmin_argmax_all_naboxc                    s    |  | t |||| d S r   )r>   rB   test_equals)r=   r   r+   r   r   rD   r   r   r   z  s    
zTestMethods.test_equals)rF   rG   rH   r   r   r   r:   rI   r;   r   r   r   r   r   parametrizer   r,   r   rw   re   r   rK   r   r   rD   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   s<   t j|dd}|t}t|js&tt|jjjs8td S )NrW   )name)	r,   rw   r]   r^   r   r   rM   r   r   )r=   all_datar|   ri   r   r   r   test_astype_object_series  s    
z%TestCasting.test_astype_object_seriesc                 C   sN   t d|i}|t}t|jjd js.tt	sJ|j
|j
k}| rJtd S )NrW   r   )r,   re   r]   r^   r   r   Zarraysr   rM   r   Zdtypesany)r=   r   r   ri   compr   r   r   test_astype_object_frame  s    
z$TestCasting.test_astype_object_framec                 C   sX   t |d d t}ttt|j}t jdd |d d D |d}| || d S )N   c                 S   s   g | ]}t |qS r   )strra   r   r   r   rd     s     z/TestCasting.test_astype_str.<locals>.<listcomp>r   )r,   rw   r]   r   r   r   r   )r=   r   ri   r   rj   r   r   r   test_astype_str  s     zTestCasting.test_astype_strzno sparse StringDtype)raisesrA   c                    s   t  | d S r   )rB   test_astype_stringr<   rD   r   r   r     s    zTestCasting.test_astype_string)rF   rG   rH   r   r   r   r:   rI   rJ   	TypeErrorr   rK   r   r   rD   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)r   r:   r;   r<   r   r   r   _skip_if_different_combine  s    
z,TestArithmeticOps._skip_if_different_combinec                    s   |  | t || d S r   )r   rB   test_arith_series_with_scalarr=   r   all_arithmetic_operatorsrD   r   r   r     s    
z/TestArithmeticOps.test_arith_series_with_scalarc                    s   |  | t || d S r   )r   rB   test_arith_series_with_arrayr   rD   r   r   r     s    
z.TestArithmeticOps.test_arith_series_with_arrayc                    sH   |j jdkrn(|ddk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   stripr:   rI   rJ   r   r   rB   test_arith_frame_with_scalar)r=   r   r   r   rI   rD   r   r   r     s    	z.TestArithmeticOps.test_arith_frame_with_scalarc                    s   t  j|||d d d S )N)exc)rB   _check_divmod_op)r=   r|   opr   r   rD   r   r   r     s    z"TestArithmeticOps._check_divmod_op)rF   rG   rH   Zseries_scalar_excZframe_scalar_excZ
divmod_excZseries_array_excr   r   r   r   NotImplementedErrorr   rK   r   r   rD   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)r7   c                 C   s   |}|||}t |tst|jjtjks.tt |trH||j|j}n>t|t	|jt	|}t||
 t	||tjd}t|| d S )Nr   )
isinstancer   rM   r   r   r   Zbool_r   allr\   r   r   r   )r=   r7   comparison_opr   r   ri   r   rj   r   r   r   _compare_other  s    

z TestComparisonOps._compare_otherc                 C   s>   |  ||d |  ||d |  ||d |  ||tj d S )Nr   r   r5   )r   r   r"   )r=   r7   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=   r7   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)rF   rG   rH   r   r   r   r:   rI   rJ   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   )rB   test_array_repr)r=   r   r
   rD   r   r   r     s    zTestPrinting.test_array_repr)rF   rG   rH   r:   rI   rJ   r   rK   r   r   rD   r   r     s   r   c                       s.   e Zd Zejdddg fddZ  ZS )TestParsingenginerZ   pythonc              	      s0   d}t jt|d t || W 5 Q R X d S )Nz,.*must implement _from_sequence_of_strings.*r   )r:   r   r   rB   test_EA_types)r=   r   r   Zexpected_msgrD   r   r   r     s    zTestParsing.test_EA_types)rF   rG   rH   r:   rI   r   r   rK   r   r   rD   r   r     s   r   )<__doc__numpyr   r:   Zpandas.compatr   Zpandas.errorsr   Zpandas.core.dtypes.commonr   Zpandasr,   r   Zpandas._testingZ_testingr   Zpandas.arraysr   Zpandas.tests.extensionr   r   Zfixturer   r"   r   r    r#   r(   r)   r*   r+   r2   r3   r7   r8   ZBaseDtypeTestsrL   ZBaseInterfaceTestsrO   ZBaseConstructorsTestsrU   ZBaseReshapingTestsrV   ZBaseGetitemTestsrt   ZBaseIndexTestsr   ZBaseMissingTestsr   ZBaseMethodsTestsr   ZBaseCastingTestsr   ZBaseArithmeticOpsTestsr   r   ZBasePrintingTestsr   ZBaseParsingTestsr   r   r   r   r   <module>   s^   





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