U
    f/e?                     @   sB  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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ej,Z-G d/d0 d0eej.Z/G d1d2 d2eej0Z1G d3d4 d4eej2Z3G d5d6 d6eej4Z5G d7d8 d8eej6Z7dS )9aj  
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   F/tmp/pip-unpacked-wheel-tiezk1ph/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onesr   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 dddg| jdS )Nr   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                       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_unsupportedg   s    z"BaseSparseTests._check_unsupported$SparseArray does not support setitemreasonc                    s   t  | d S r   )super
test_ravelr7   	__class__r   r   r>   k   s    zBaseSparseTests.test_ravel)	__name__
__module____qualname__r9   r5   markxfailr>   __classcell__r   r   r?   r   r3   f   s   r3   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)r8   r   r   r   r   r   test_array_type_with_argq   s    z"TestDtype.test_array_type_with_argN)rA   rB   rC   rI   r   r   r   r   rG   p   s   rG   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestInterfacec                 C   s   t d d S )NzWe have values)r5   r6   r7   r   r   r   test_no_values_attributev   s    z&TestInterface.test_no_values_attributec                 C   s   |   d S r   copyr7   r   r   r   	test_copyy   s    zTestInterface.test_copyc                 C   s   |   d S r   )viewr7   r   r   r   	test_view}   s    zTestInterface.test_viewN)rA   rB   rC   rK   rN   rP   r   r   r   r   rJ   u   s   rJ   c                   @   s   e Zd ZdS )TestConstructorsN)rA   rB   rC   r   r   r   r   rQ      s   rQ   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   r/      r0   zCTestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply.0xr   r   r   
<listcomp>   s     z:TestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>)r+   	DataFramerY   concatassert_frame_equal)r8   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   )r9   r=   test_concat_columnsr8   r   r*   r?   r   r   rh      s    
z!TestReshaping.test_concat_columnsc                    s   |  | t || d S r   )r9   r=   'test_concat_extension_arrays_copy_falseri   r?   r   r   rj      s    
z5TestReshaping.test_concat_extension_arrays_copy_falsec                    s   |  | t || d S r   )r9   r=   
test_alignri   r?   r   r   rk      s    
zTestReshaping.test_alignc                    s   |  | t || d S r   )r9   r=   test_align_frameri   r?   r   r   rl      s    
zTestReshaping.test_align_framec                    s   |  | t || d S r   )r9   r=   test_align_series_frameri   r?   r   r   rm      s    
z%TestReshaping.test_align_series_framec                    s   |  | t || d S r   )r9   r=   
test_mergeri   r?   r   r   rn      s    
zTestReshaping.test_merger:   r;   c                    s   t  | d S r   )r=   test_transposer7   r?   r   r   ro      s    zTestReshaping.test_transpose)rA   rB   rC   rg   rh   rj   rk   rl   rm   rn   r5   rD   rE   ro   rF   r   r   r?   r   rR      s   rR   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   )r^   ir   r   r   r`      s     z(TestGetitem.test_get.<locals>.<listcomp>)index   r   r
   )r+   Seriesr#   lenr   r   valuesr   getilocrH   )r8   r   r[   r   r   r   test_get   s
     &zTestGetitem.test_getc                    s   |  | t || d S r   )r9   r=   test_reindexri   r?   r   r   rz      s    
zTestGetitem.test_reindex)rA   rB   rC   ry   rz   rF   r   r   r?   r   rp      s   rp   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|jj}tddg|d}t|}| || t| }t|}| 	|| t|
ddg }tjg |d}| 	|| d S )NTFr   r   r
   )r   boolr+   r,   r   r   r   Zassert_equalrt   assert_series_equalZdrop)r8   r"   expected_dtyperf   re   r   r   r   	test_isna   s    

zTestMissing.test_isnac              	      s&   t t t | W 5 Q R X d S r   )tmassert_produces_warningr   r=   test_fillna_limit_padr8   r"   r?   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   r=   test_fillna_limit_backfillr   r?   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_markerr5   rD   rE   r   r   r   r=   test_fillna_no_op_returns_copy)r8   r   r   r?   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   r?   r   r   test_fillna_series_method   s    z%TestMissing.test_fillna_series_methodZUnsupportedr;   c                 C   s   d S r   r   )r8   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   )rS   Br|   )	r+   ra   fillnar,   r   r   r   _from_sequencerc   )r8   r"   r   re   r   rf   r   r   r   test_fillna_frame   s    zTestMissing.test_fillna_frame)rA   rB   rC   r   r   r   r   r   r5   rD   r6   r   r   rF   r   r   r?   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   r/     r0   z-TestMethods.test_combine_le.<locals>.<lambda>c                 S   s   g | ]\}}||kqS r   r   )r^   rT   rU   r   r   r   r`     s     z/TestMethods.test_combine_le.<locals>.<listcomp>Fr   r   c                 S   s   | |kS r   r   r   r   r   r   r/     r0   c                    s   g | ]}| kqS r   r   )r^   rT   valr   r   r`     s     )r+   rt   combiner   ziplistr~   rx   )r8   r'   Z
orig_data1Z
orig_data2s1s2re   rf   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
   rS   FrL   )r   r   blocks)taker+   ra   rx   r   hasattr_mgrrv   r   rH   rS   _valuesto_dense)r8   r"   arrdf
filled_valre   r   r   r   test_fillna_copy_frame  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+   rt   r   r   rH   r   )r8   r"   r   serr   re   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_mismatch0  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        )rH   typer+   rt   r   r   r   arraywherer   r~   )r8   r   r*   clsrT   rU   r   Zcondre   Z	new_dtyperf   otherr   r   r   test_where_series4  s     

zTestMethods.test_where_seriesc                    s&   |j jdkrtd t | d S )Nr4   z1TODO(SparseArray.__setitem__ will preserve dtype.)r   subtyper5   r6   r=   test_combine_firstr7   r?   r   r   r   J  s    
zTestMethods.test_combine_firstc              	      s(   t t t || W 5 Q R X d S r   )r   r   r   r=   test_searchsorted)r8   r(   	as_seriesr?   r   r   r   Q  s    zTestMethods.test_searchsortedc                 C   s6   | d}|jd |jd< |jd |jd ks2td S )Nr   r
   )shiftZ_sparse_valuesrH   )r8   r   re   r   r   r   test_shift_0_periodsU  s    
z TestMethods.test_shift_0_periodsmethodZargmaxZargminc                    s   |  | t ||| d S r   )r9   r=   test_argmin_argmax_all_na)r8   r   r   r*   r?   r   r   r   \  s    
z%TestMethods.test_argmin_argmax_all_naboxc                    s    |  | t |||| d S r   )r9   r=   test_equals)r8   r   r*   r   r   r?   r   r   r   b  s    
zTestMethods.test_equals)rA   rB   rC   r   r   r   r5   rD   r6   r   r   r   r   r   parametrizer   r+   r   rt   ra   r   rF   r   r   r?   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 )NrS   )name)	r+   rt   rY   rZ   r   r   rH   r   r   )r8   all_datar   re   r   r   r   test_astype_object_seriesi  s    
z%TestCasting.test_astype_object_seriesc                 C   s2   t d|i}|t}t|jjd js.td S )NrS   r   )	r+   ra   rY   rZ   r   r   Zarraysr   rH   )r8   r   r   re   r   r   r   test_astype_object_frameq  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   )strr]   r   r   r   r`     s     z/TestCasting.test_astype_str.<locals>.<listcomp>r|   )r+   rt   rY   r   r   r   r~   )r8   r   re   r   rf   r   r   r   test_astype_str~  s     zTestCasting.test_astype_strzno sparse StringDtype)raisesr<   c                    s   t  | d S r   )r=   test_astype_stringr7   r?   r   r   r     s    zTestCasting.test_astype_string)rA   rB   rC   r   r   r   r5   rD   rE   	TypeErrorr   rF   r   r   r?   r   r   h  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 )Nr   z(Incorrected expected from Series.combine)r   r5   r6   r7   r   r   r   _skip_if_different_combine  s    
z,TestArithmeticOps._skip_if_different_combinec                    s   |  | t || d S r   )r   r=   test_arith_series_with_scalarr8   r   all_arithmetic_operatorsr?   r   r   r     s    
z/TestArithmeticOps.test_arith_series_with_scalarc                    s   |  | t || d S r   )r   r=   test_arith_series_with_arrayr   r?   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   stripr5   rD   rE   r   r   r=   test_arith_frame_with_scalar)r8   r   r   r   rD   r?   r   r   r     s    	z.TestArithmeticOps.test_arith_frame_with_scalar)rA   rB   rC   Zseries_scalar_excZframe_scalar_excZ
divmod_excZseries_array_excr   r   r   r   rF   r   r   r?   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestComparisonOpsc              	   C   s   |  |}t|||}t|jts*t|jjtdks@ttj	dd. tt
|t|t||jjd}W 5 Q R X t|| t|}|||}t|| d S )Nr}   ignore)allr   )Zget_op_from_namer+   rt   
isinstancer   r   rH   r   r   Zerrstater   rX   rv   r   r   r~   )r8   r[   r   Zop_namer   opre   rf   r   r   r   _compare_other  s    


z TestComparisonOps._compare_otherN)rA   rB   rC   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   )r=   test_array_repr)r8   r   r	   r?   r   r   r     s    zTestPrinting.test_array_repr)rA   rB   rC   r5   rD   rE   r   rF   r   r   r?   r   r     s   r   c                       s.   e Zd Zejdddg fddZ  ZS )TestParsingenginerV   pythonc              	      s0   d}t jt|d t || W 5 Q R X d S )Nz,.*must implement _from_sequence_of_strings.*)match)r5   r   NotImplementedErrorr=   test_EA_types)r8   r   r   Zexpected_msgr?   r   r   r     s    zTestParsing.test_EA_types)rA   rB   rC   r5   rD   r   r   rF   r   r   r?   r   r     s   r   )8__doc__Znumpyr   r5   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*   r1   r2   r3   ZBaseDtypeTestsrG   ZBaseInterfaceTestsrJ   ZBaseConstructorsTestsrQ   ZBaseReshapingTestsrR   ZBaseGetitemTestsrp   ZBaseMissingTestsr{   ZBaseMethodsTestsr   ZBaseCastingTestsr   ZBaseArithmeticOpsTestsr   ZBaseComparisonOpsTestsr   ZBasePrintingTestsr   ZBaseParsingTestsr   r   r   r   r   <module>   sV   











-?e!&