B
    Y0d3                 @   s  d Z ddl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 Zejdd Zejd	d
 Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd ZG dd dejZG dd dejZG dd dejZG dd  d ejZG d!d" d"ej Z!G d#d$ d$ej"Z#G d%d& d&ej$Z%G d'd( d(ej&Z'G d)d* d*ej(Z)G d+d, d,ej*Z+G d-d. d.ej,Z-G d/d0 d0ej.Z/G d1d2 d2ej0Z1G d3d4 d4ej2Z3G d5d6 d6ej4Z5G d7d8 d8ej6Z7G d9d: d: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)BooleanDtype)basec               C   s0   ddgd t jg ddgd  t jg ddg S )NTF   ,   )npnan r   r   U/var/www/html/venv/lib/python3.7/site-packages/pandas/tests/extension/test_boolean.py	make_data   s    r
   c               C   s   t  S )N)r   r   r   r   r	   dtype   s    r   c             C   s   t jt | dS )N)r   )pdarrayr
   )r   r   r   r	   data"   s    r   c             C   s   t jtd| dS )Nd   )r   )r   r   r   Zones)r   r   r   r	   data_for_twos'   s    r   c             C   s   t jtjdg| dS )NT)r   )r   r   r   r   )r   r   r   r	   data_missing,   s    r   c             C   s   t jdddg| dS )NTF)r   )r   r   )r   r   r   r	   data_for_sorting1   s    r   c             C   s   t jdtjdg| dS )NTF)r   )r   r   r   r   )r   r   r   r	   data_missing_for_sorting6   s    r   c               C   s   dd S )Nc             S   s   | t jko|t jkS )N)r   NA)xyr   r   r	   <lambda>>       zna_cmp.<locals>.<lambda>r   r   r   r   r	   na_cmp;   s    r   c               C   s   t jS )N)r   r   r   r   r   r	   na_valueA   s    r   c             C   s*   d}d}t j}tj|||||||g| dS )NTF)r   )r   r   r   r   )r   banar   r   r	   data_for_groupingF   s    r   c               @   s   e Zd ZdS )	TestDtypeN)__name__
__module____qualname__r   r   r   r	   r   N   s   r   c               @   s   e Zd ZdS )TestInterfaceN)r    r!   r"   r   r   r   r	   r#   R   s   r#   c               @   s   e Zd ZdS )TestConstructorsN)r    r!   r"   r   r   r   r	   r$   V   s   r$   c               @   s   e Zd ZdS )TestGetitemN)r    r!   r"   r   r   r   r	   r%   Z   s   r%   c               @   s   e Zd ZdS )TestSetitemN)r    r!   r"   r   r   r   r	   r&   ^   s   r&   c               @   s   e Zd ZdS )TestMissingN)r    r!   r"   r   r   r   r	   r'   b   s   r'   c                   s@   e Zd ZddhZd
 fdd	ZefddZd fdd		Z  ZS )TestArithmeticOps__sub____rsub__Nc                s   t  j|||d d d S )N)exc)supercheck_opname)selfsop_nameotherr+   )	__class__r   r	   r-   i   s    zTestArithmeticOps.check_opnamec       	   	   C   s   |d kr|| j kr>d}tjt|d ||| W d Q R X d S |||}| |||}|dkrj|d}n&|dkr| |t||}|d}|dkrtj||	 < | 
|| n t| ||| W d Q R X d S )Nznumpy boolean subtract)match)__floordiv____rfloordiv____pow____rpow____mod____rmod__ZInt8)__truediv____rtruediv__ZFloat64r7   )
implementspytestZraises	TypeErrorZ_combineastypefloatr   r   isnaZassert_equal)	r.   objopr1   r0   r+   msgresultexpectedr   r   r	   	_check_opm   s&    


zTestArithmeticOps._check_opc                s   t  |||d  d S )N)r,   _check_divmod_op)r.   r/   rC   r1   r+   )r2   r   r	   rH      s    z"TestArithmeticOps._check_divmod_op)N)N)	r    r!   r"   r<   r-   NotImplementedErrorrG   rH   __classcell__r   r   )r2   r	   r(   f   s   "r(   c                   sR   e Zd Zd fdd	Zdd Zejjdddd	 Zejjddd
d Z	  Z
S )TestComparisonOpsNc                s   t  j|||d d d S )N)r+   )r,   r-   )r.   r/   r0   r1   r+   )r2   r   r	   r-      s    zTestComparisonOps.check_opnamec             C   s   |  ||| d S )N)r-   )r.   r/   r   r0   r1   r   r   r	   _compare_other   s    z TestComparisonOps._compare_otherz&Tested in tests/arrays/test_boolean.py)reasonc             C   s   d S )Nr   )r.   r   all_compare_operatorsr   r   r	   test_compare_scalar   s    z%TestComparisonOps.test_compare_scalarc             C   s   d S )Nr   )r.   r   rN   r   r   r	   test_compare_array   s    z$TestComparisonOps.test_compare_array)N)r    r!   r"   r-   rL   r=   markskiprO   rP   rJ   r   r   )r2   r	   rK      s   rK   c               @   s   e Zd ZdS )TestReshapingN)r    r!   r"   r   r   r   r	   rS      s   rS   c                   sr   e Zd Zejdddgdd Zdd Zdd	 Zejj	d
d fddZ
ejj	d
ddd Zdd Z  ZS )TestMethodsna_sentinelc             C   sZ   t j||d\}}tjdd||dddgtjd}|ddg}t|| | || d S )N)rU   r      )r   r   )	r   	factorizer   r   intptaketmassert_numpy_array_equalassert_extension_array_equal)r.   r   rU   labelsZuniquesZexpected_labelsZexpected_uniquesr   r   r	   test_factorize   s    zTestMethods.test_factorizec                s   |d\}}t |}t |}||dd }t jdd tt|t|D dd}| || |jd  | d	d }t j fd
dt|D dd}| || d S )N   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   ).0r   r   r   r   r	   
<listcomp>   s    z/TestMethods.test_combine_le.<locals>.<listcomp>boolean)r   r   c             S   s   | |kS )Nr   )rb   rc   r   r   r	   r      r   c                s   g | ]}| kqS r   r   )rd   r   )valr   r	   re      s    )r   Seriescombineziplistassert_series_equaliloc)r.   Zdata_repeatedZ
orig_data1Z
orig_data2s1s2rE   rF   r   )rg   r	   test_combine_le   s    


 zTestMethods.test_combine_lec       	      C   s   t jddgdd}|\}}t|||g}|r:t |}||dksLt|j|dddksbt||dkstt|j|ddd	kst||ddg}tjddgtj	d}t
|| tddg}|j||d
dkstd S )NTFrf   )r   r   right)ZsiderX   ra   )sorter)r   r   typeZ_from_sequencerh   ZsearchsortedAssertionErrorr[   r   rZ   r\   r]   )	r.   r   Z	as_seriesr   r   ZarrrE   rF   rr   r   r   r	   test_searchsorted   s    
zTestMethods.test_searchsortedzuses nullable integer)rM   c                s   t  ||S )N)r,   test_value_counts)r.   Zall_dataZdropna)r2   r   r	   rv      s    zTestMethods.test_value_countsc             C   s   d S )Nr   )r.   r   r   r   r	    test_value_counts_with_normalize   s    z,TestMethods.test_value_counts_with_normalizec             C   sz   |  dkst| dks t|ddddddg}|  dksFt| dksVt|  dksft| dksvtd S )Nr   ra   rX   )Zargmaxrt   Zargminr[   )r.   r   r   r   r   r   r	   test_argmin_argmax   s    zTestMethods.test_argmin_argmax)r    r!   r"   r=   rQ   parametrizer`   rp   ru   rR   rv   rw   rx   rJ   r   r   )r2   r	   rT      s   rT   c               @   s   e Zd ZdS )TestCastingN)r    r!   r"   r   r   r   r	   rz      s   rz   c               @   s|   e Zd ZdZdd Zejdddgdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zejdddgdd ZdS )TestGroupbyzw
    Groupby-specific tests are overridden because boolean only has 2
    unique values, base tests uses 3 groups.
    c          	   C   sf   t ddd d dddg|d}|djjd }|djjd }t|j|jj	 t
|j| d S )NBA)r}   r|   r   )r   	DataFramegroupbyZgrouperZ	groupingsr\   r]   Zgrouping_vectorr}   valuesr^   )r.   r   dfZgr1Zgr2r   r   r	   test_grouping_grouper  s    z!TestGroupby.test_grouping_grouperas_indexTFc          	   C   s   t dddddddg|d}|jd|dj }t j|dd\}}t j|dd	}t jd
dg|dd}|rx| || n|	 }| 
|| d S )NrX   ra      )r}   r|   r|   )r   T)sort)nameg      @g      ?r}   )indexr   )r   r~   r   r}   meanrY   Indexrh   rl   Zreset_indexassert_frame_equal)r.   r   r   r   rE   _r   rF   r   r   r	   test_groupby_extension_agg  s    z&TestGroupby.test_groupby_extension_aggc          	   C   s   t dddddddg|d}|jdddg }|d}|ddd	i}| || |dd	}| || |d }| || d S )
NrX   ra   r   )r}   r|   r   r   r}   r|   first)r   r~   rm   Z	set_indexr   Zaggr   r   )r.   r   r   rF   rE   r   r   r	   test_groupby_agg_extension  s    
z&TestGroupby.test_groupby_agg_extensionc          	   C   sv   t dddddddg|d}|jdddj }t j|dd\}}t j|dd}t jd	d
g|dd}| || d S )NrX   ra   r   )r}   r|   r|   F)r   )r   g      ?g      @r}   )r   r   )	r   r~   r   r}   r   rY   r   rh   rl   )r.   r   r   rE   r   r   rF   r   r   r	   test_groupby_extension_no_sort*  s    z*TestGroupby.test_groupby_extension_no_sortc             C   sb   ||    }tdddddg|d}|djt}tjdddddgdd}| || d S )NrX   r   )r}   r|   r|   ra   r}   )r   )	rA   r   r~   r   r}   Z	transformlenrh   rl   )r.   r   Zvalidr   rE   rF   r   r   r	    test_groupby_extension_transform3  s
    z,TestGroupby.test_groupby_extension_transformc          	   C   sf   t dddddddg|d}|d| |dj| |d| |dj| d S )NrX   ra   r   )r}   r|   r|   r}   )r   r~   r   applyr}   r|   )r.   r   Zgroupby_apply_opr   r   r   r	   test_groupby_extension_apply<  s
    z(TestGroupby.test_groupby_extension_applyc          	   C   s   t dddddddg|d}|djdd }t j|jjddd	g j|jjddg j|jjd
dg jgt jdddgdddd}| 	|| d S )NrX   ra   r   )r}   r|   r}   c             S   s   | j S )N)r   )r   r   r   r	   r   E  r   z9TestGroupby.test_groupby_apply_identity.<locals>.<lambda>r      r      )r   r|   )r   r   )
r   r~   r   r|   r   rh   rm   r   r   rl   )r.   r   r   rE   rF   r   r   r	   test_groupby_apply_identityC  s    z'TestGroupby.test_groupby_apply_identityc             C   sr   t dddddddg|dddddddgd}|d j}|jjrVt ddg}nt dg}t	|| d S )NrX   ra   r   )r}   r|   Cr}   r|   r   )
r   r~   r   sumcolumnsr   Z_is_numericr   r\   Zassert_index_equal)r.   r   r   rE   rF   r   r   r	   test_in_numeric_groupbyQ  s    z#TestGroupby.test_in_numeric_groupby	min_countr   
   c          	   C   s   t dddddddg|d}|dj|d}|dkrxt jdt jdddgd	d
it jdddgddd}t|| n@t jdt jt jgd d	d
it jdddgddd}t|| d S )NrX   ra   r   )r}   r|   r}   )r   r   r|   ZInt64)r   )r   )r   )	r   r~   r   r   r   r   r\   r   r   )r.   r   r   r   rE   rF   r   r   r	   test_groupby_sum_mincountb  s    z%TestGroupby.test_groupby_sum_mincountN)r    r!   r"   __doc__r   r=   rQ   ry   r   r   r   r   r   r   r   r   r   r   r   r	   r{      s   
		r{   c               @   s   e Zd Zdd ZdS )TestNumericReducec             C   sX   t |||d}t |d||d}t|r8tj}n|dkrHt|}t|| d S )N)skipnaZfloat64)minmax)	getattrr?   r   isnanr   r   boolr\   Zassert_almost_equal)r.   r/   r0   r   rE   rF   r   r   r	   check_reduceu  s    
zTestNumericReduce.check_reduceN)r    r!   r"   r   r   r   r   r	   r   t  s   r   c               @   s   e Zd ZdS )TestBooleanReduceN)r    r!   r"   r   r   r   r	   r     s   r   c               @   s   e Zd ZdS )TestPrintingN)r    r!   r"   r   r   r   r	   r     s   r   c               @   s   e Zd ZdS )TestUnaryOpsN)r    r!   r"   r   r   r   r	   r     s   r   c               @   s   e Zd ZdS )TestParsingN)r    r!   r"   r   r   r   r	   r     s   r   ):r   numpyr   r=   Zpandasr   Zpandas._testingZ_testingr\   Zpandas.core.arrays.booleanr   Zpandas.tests.extensionr   r
   Zfixturer   r   r   r   r   r   r   r   r   ZBaseDtypeTestsr   ZBaseInterfaceTestsr#   ZBaseConstructorsTestsr$   ZBaseGetitemTestsr%   ZBaseSetitemTestsr&   ZBaseMissingTestsr'   ZBaseArithmeticOpsTestsr(   ZBaseComparisonOpsTestsrK   ZBaseReshapingTestsrS   ZBaseMethodsTestsrT   ZBaseCastingTestsrz   ZBaseGroupbyTestsr{   ZBaseNumericReduceTestsr   ZBaseBooleanReduceTestsr   ZBasePrintingTestsr   ZBaseUnaryOpsTestsr   ZBaseParsingTestsr   r   r   r   r	   <module>   sB   .Ox