B
    Y0d?                 @   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   T/var/www/html/venv/lib/python3.7/site-packages/pandas/tests/extension/test_sparse.py	make_data   s    
r   c               C   s   t  S )N)r   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,   x&t | D ]}tt j jdV  q
W d S )N)r   )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   r   r   r   data_missing_for_sortingR   s    r$   c               C   s   t jS )N)r   r   r   r   r   r   na_valueW   s    r%   c               C   s   dd S )Nc             S   s   t | ot |S )N)pdisna)leftrightr   r   r   <lambda>^       zna_cmp.<locals>.<lambda>r   r   r   r   r   na_cmp\   s    r,   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   r   r   r   data_for_groupinga   s    r-   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_unsupportedz$SparseArray does not support setitem)reasonc                s   t  | d S )N)super
test_ravel)r2   r   )	__class__r   r   r6   k   s    zBaseSparseTests.test_ravel)	__name__
__module____qualname__r3   r0   markxfailr6   __classcell__r   r   )r7   r   r.   f   s   r.   c               @   s   e Zd Zdd ZdS )	TestDtypec             C   s   |  tkstd S )N)Zconstruct_array_typer   AssertionError)r2   r   r   r   r   r   test_array_type_with_argq   s    z"TestDtype.test_array_type_with_argN)r8   r9   r:   r@   r   r   r   r   r>   p   s   r>   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)r0   r1   )r2   r   r   r   r   test_no_values_attributev   s    z&TestInterface.test_no_values_attributec             C   s   |   d S )N)copy)r2   r   r   r   r   	test_copyy   s    zTestInterface.test_copyc             C   s   |   d S )N)view)r2   r   r   r   r   	test_view}   s    zTestInterface.test_viewN)r8   r9   r:   rB   rD   rF   r   r   r   r   rA   u   s   rA   c               @   s   e Zd ZdS )TestConstructorsN)r8   r9   r:   r   r   r   r   rG      s   rG   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 )N)r   asarrayastypeobject)sr   r   r   r*      r+   zCTestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>.<lambda>)apply).0xr   r   r   
<listcomp>   s    z:TestReshaping.test_concat_mixed_dtypes.<locals>.<listcomp>)r&   	DataFramerO   concatassert_frame_equal)r2   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 )N)r3   r5   test_concat_columns)r2   r   r%   )r7   r   r   r]      s    
z!TestReshaping.test_concat_columnsc                s   |  | t || d S )N)r3   r5   'test_concat_extension_arrays_copy_false)r2   r   r%   )r7   r   r   r^      s    
z5TestReshaping.test_concat_extension_arrays_copy_falsec                s   |  | t || d S )N)r3   r5   
test_align)r2   r   r%   )r7   r   r   r_      s    
zTestReshaping.test_alignc                s   |  | t || d S )N)r3   r5   test_align_frame)r2   r   r%   )r7   r   r   r`      s    
zTestReshaping.test_align_framec                s   |  | t || d S )N)r3   r5   test_align_series_frame)r2   r   r%   )r7   r   r   ra      s    
z%TestReshaping.test_align_series_framec                s   |  | t || d S )N)r3   r5   
test_merge)r2   r   r%   )r7   r   r   rb      s    
zTestReshaping.test_mergez$SparseArray does not support setitem)r4   c                s   t  | d S )N)r5   test_transpose)r2   r   )r7   r   r   rc      s    zTestReshaping.test_transpose)r8   r9   r:   r\   r]   r^   r_   r`   ra   rb   r0   r;   r<   rc   r=   r   r   )r7   r   rH      s   rH   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   )rS   ir   r   r   rU      s    z(TestGetitem.test_get.<locals>.<listcomp>)index   r
   r	   )r&   Seriesr   lenr   r   valuesr   getilocr?   )r2   r   rQ   r   r   r   test_get   s
     &zTestGetitem.test_getc                s   |  | t || d S )N)r3   r5   test_reindex)r2   r   r%   )r7   r   r   rn      s    
zTestGetitem.test_reindex)r8   r9   r:   rm   rn   r=   r   r   )r7   r   rd      s   rd   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_equalrh   assert_series_equalZdrop)r2   r   expected_dtyper[   rZ   r   r   r   	test_isna   s    

zTestMissing.test_isnac          	      s&   t t t | W d Q R X d S )N)tmassert_produces_warningr   r5   test_fillna_limit_pad)r2   r   )r7   r   r   rv      s    z!TestMissing.test_fillna_limit_padc          	      s&   t t t | W d Q R X d S )N)rt   ru   r   r5   test_fillna_limit_backfill)r2   r   )r7   r   r   rw      s    z&TestMissing.test_fillna_limit_backfillc          	      sH   t |jr"|jtjjdd t	t
 t | W d Q R X d S )Nz'returns array with different fill value)r4   )r   r   r   node
add_markerr0   r;   r<   rt   ru   r   r5   test_fillna_no_op_returns_copy)r2   r   r   )r7   r   r   rz      s
    z*TestMissing.test_fillna_no_op_returns_copyc          	      s&   t t t | W d Q R X d S )N)rt   ru   r   r5   rw   )r2   r   )r7   r   r   test_fillna_series_method   s    z%TestMissing.test_fillna_series_methodZUnsupported)r4   c             C   s   d S )Nr   )r2   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
   )rI   B)r   )	r&   rV   fillnar'   r   r   r   _from_sequencerX   )r2   r   r   rZ   r   r[   r   r   r   test_fillna_frame   s    zTestMissing.test_fillna_frame)r8   r9   r:   rs   rv   rw   rz   r{   r0   r;   r1   r|   r   r=   r   r   )r7   r   ro      s   ro   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 )Nr   )x1x2r   r   r   r*     r+   z-TestMethods.test_combine_le.<locals>.<lambda>c             S   s   g | ]\}}||kqS r   r   )rS   rJ   rK   r   r   r   rU     s    z/TestMethods.test_combine_le.<locals>.<listcomp>F)r   r   c             S   s   | |kS )Nr   )r   r   r   r   r   r*     r+   c                s   g | ]}| kqS r   r   )rS   rJ   )valr   r   rU     s    )r&   rh   combiner   ziplistrq   rl   )r2   r"   Z
orig_data1Z
orig_data2s1s2rZ   r[   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	   rI   F)rC   )r   r   blocks)taker&   rV   rl   r~   hasattr_mgrrj   r   r?   rI   _valuesto_dense)r2   r   arrdf
filled_valrZ   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&   rh   r~   r   r?   r   )r2   r   r   serr   rZ   r   r   r   test_fillna_copy_series&  s    

z#TestMethods.test_fillna_copy_serieszNot Applicable)r4   c             C   s   d S )Nr   )r2   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        )r?   typer&   rh   r   r   r   arraywherer   rq   )r2   r   r%   clsrJ   rK   r   ZcondrZ   Z	new_dtyper[   otherr   r   r   test_where_series4  s    

zTestMethods.test_where_seriesc                s&   |j jdkrtd t | d S )Nr/   z1TODO(SparseArray.__setitem__ will preserve dtype.)r   subtyper0   r1   r5   test_combine_first)r2   r   )r7   r   r   r   J  s    
zTestMethods.test_combine_firstc          	      s(   t t t || W d Q R X d S )N)rt   ru   r   r5   test_searchsorted)r2   r#   	as_series)r7   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_valuesr?   )r2   r   rZ   r   r   r   test_shift_0_periodsU  s    
z TestMethods.test_shift_0_periodsmethodZargmaxZargminc                s   |  | t ||| d S )N)r3   r5   test_argmin_argmax_all_na)r2   r   r   r%   )r7   r   r   r   \  s    
z%TestMethods.test_argmin_argmax_all_naboxc                s    |  | t |||| d S )N)r3   r5   test_equals)r2   r   r%   r   r   )r7   r   r   r   b  s    
zTestMethods.test_equals)r8   r9   r:   r   r   r   r0   r;   r1   r   r   r   r   r   parametrizer   r&   r   rh   rV   r   r=   r   r   )r7   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 )NrI   )name)	r&   rh   rO   rP   r   r   r?   r   r   )r2   all_datar   rZ   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 )NrI   r   )	r&   rV   rO   rP   r   r   Zarraysr   r?   )r2   r   r   rZ   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   )str)rS   rT   r   r   r   rU     s    z/TestCasting.test_astype_str.<locals>.<listcomp>)r   )r&   rh   rO   r   r   r   rq   )r2   r   rZ   rr   r[   r   r   r   test_astype_str~  s     zTestCasting.test_astype_strzno sparse StringDtype)raisesr4   c                s   t  | d S )N)r5   test_astype_string)r2   r   )r7   r   r   r     s    zTestCasting.test_astype_string)r8   r9   r:   r   r   r   r0   r;   r<   	TypeErrorr   r=   r   r   )r7   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   r0   r1   )r2   r   r   r   r   _skip_if_different_combine  s    
z,TestArithmeticOps._skip_if_different_combinec                s   |  | t || d S )N)r   r5   test_arith_series_with_scalar)r2   r   all_arithmetic_operators)r7   r   r   r     s    
z/TestArithmeticOps.test_arith_series_with_scalarc                s   |  | t || d S )N)r   r5   test_arith_series_with_array)r2   r   r   )r7   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 mismatch)r4   )
r   r   stripr0   r;   r<   rx   ry   r5   test_arith_frame_with_scalar)r2   r   r   r   r;   )r7   r   r   r     s    	z.TestArithmeticOps.test_arith_frame_with_scalar)r8   r9   r:   Zseries_scalar_excZframe_scalar_excZ
divmod_excZseries_array_excr   r   r   r   r=   r   r   )r7   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 d Q R X t|| t|}|||}t|| d S )Nrp   ignore)all)r   )Zget_op_from_namer&   rh   
isinstancer   r   r?   r   r   Zerrstater   rN   rj   r   rt   rq   )r2   rQ   r   Zop_namer   oprZ   r[   r   r   r   _compare_other  s    


z TestComparisonOps._compare_otherN)r8   r9   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 repr)r4   c                s   t  || d S )N)r5   test_array_repr)r2   r   r   )r7   r   r   r     s    zTestPrinting.test_array_repr)r8   r9   r:   r0   r;   r<   r   r=   r   r   )r7   r   r     s   r   c                   s.   e Zd Zejdddg fddZ  ZS )TestParsingenginerL   pythonc          	      s0   d}t jt|d t || W d Q R X d S )Nz,.*must implement _from_sequence_of_strings.*)match)r0   r   NotImplementedErrorr5   test_EA_types)r2   r   r   Zexpected_msg)r7   r   r   r     s    zTestParsing.test_EA_types)r8   r9   r:   r0   r;   r   r   r=   r   r   )r7   r   r     s   r   )8__doc__numpyr   r0   Zpandas.errorsr   Zpandas.core.dtypes.commonr   Zpandasr&   r   Zpandas._testingZ_testingrt   Zpandas.arraysr   Zpandas.tests.extensionr   r   Zfixturer   r   r   r   r   r"   r#   r$   r%   r,   r-   r.   ZBaseDtypeTestsr>   ZBaseInterfaceTestsrA   ZBaseConstructorsTestsrG   ZBaseReshapingTestsrH   ZBaseGetitemTestsrd   ZBaseMissingTestsro   ZBaseMethodsTestsr   ZBaseCastingTestsr   ZBaseArithmeticOpsTestsr   ZBaseComparisonOpsTestsr   ZBasePrintingTestsr   ZBaseParsingTestsr   r   r   r   r   <module>   sB   
-?e!&