U
    *if<2                     @   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Z9G d;d< d<ej:Z;G d=d> d>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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	   V/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/extension/test_boolean.py	make_data   s    r   c                   C   s   t  S Nr   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onesr   r	   r	   r
   data_for_twos'   s    r   c                 C   s   t jtjdg| dS )NTr   r   r   r   r   r   r	   r	   r
   data_missing,   s    r   c                 C   s   t jdddg| dS NTFr   )r   r   r   r	   r	   r
   data_for_sorting1   s    r   c                 C   s   t jdtjdg| dS 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 r   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 r   r   r	   r	   r	   r
   na_valueA   s    r    c                 C   s*   d}d}t j}tj|||||||g| dS 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 )TestInterfaceNr&   r	   r	   r	   r
   r*   R   s   r*   c                   @   s   e Zd ZdS )TestConstructorsNr&   r	   r	   r	   r
   r+   V   s   r+   c                   @   s   e Zd ZdS )TestGetitemNr&   r	   r	   r	   r
   r,   Z   s   r,   c                   @   s   e Zd ZdS )TestSetitemNr&   r	   r	   r	   r
   r-   ^   s   r-   c                   @   s   e Zd ZdS )	TestIndexNr&   r	   r	   r	   r
   r.   b   s   r.   c                   @   s   e Zd ZdS )TestMissingNr&   r	   r	   r	   r
   r/   f   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otherr4   	__class__r	   r
   r7   m   s    zTestArithmeticOps.check_opnamec           	   	   C   s   |d kr|| j kr>d}tjt|d ||| W 5 Q R X d S |||}| |||}|dkrj|d}n&|dkr| |t||}|d}|dkrtj||	 < | 
|| n t| ||| W 5 Q R X d S )Nznumpy boolean subtract)match)__floordiv____rfloordiv____pow____rpow____mod____rmod__ZInt8)__truediv____rtruediv__ZFloat64rC   )
implementspytestZraises	TypeErrorZ_combineastypefloatr   r   isnaZassert_equal)	r9   objopr<   r;   r4   msgresultexpectedr	   r	   r
   	_check_opq   s$    

	
zTestArithmeticOps._check_opc                    s   t  |||d  d S r   )r6   _check_divmod_op)r9   r:   rO   r<   r4   r=   r	   r
   rT      s    z"TestArithmeticOps._check_divmod_op)N)N)	r'   r(   r)   rH   r7   NotImplementedErrorrS   rT   __classcell__r	   r	   r=   r
   r0   j   s   "r0   c                       s   e Zd Zd fdd	Z  ZS )TestComparisonOpsNc                    s   t  j|||d d d S r3   r5   r8   r=   r	   r
   r7      s    zTestComparisonOps.check_opname)N)r'   r(   r)   r7   rV   r	   r	   r=   r
   rW      s   rW   c                   @   s   e Zd ZdS )TestReshapingNr&   r	   r	   r	   r
   rX      s   rX   c                       sv   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 f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)rZ   r      r   r   )	r   	factorizer   r   intptaketmassert_numpy_array_equalassert_extension_array_equal)r9   r$   rZ   labels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 r   r	   x1Z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>booleanr   r   c                 S   s   | |kS r   r	   rh   r	   r	   r
   r      r   c                    s   g | ]}| kqS r	   r	   )rj   r"   valr	   r
   rk      s     )r   Seriescombineziplistassert_series_equaliloc)r9   Zdata_repeatedZ
orig_data1Z
orig_data2s1s2rQ   rR   r	   rm   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 )NTFrl   r   r   right)Zsider]   rg   )sorter)r   r   typeZ_from_sequencero   ZsearchsortedAssertionErrorr`   r   r_   ra   rb   )	r9   r   Z	as_seriesr!   r"   ZarrrQ   rR   ry   r	   r	   r
   test_searchsorted   s    
zTestMethods.test_searchsortedzuses nullable integer)reasonc                    s   t  ||S r   )r6   test_value_counts)r9   Zall_dataZdropnar=   r	   r
   r~      s    zTestMethods.test_value_countsc                    s   t  | d S r   )r6    test_value_counts_with_normalize)r9   r   r=   r	   r
   r      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   rg   r]   )Zargmaxr{   Zargminr`   )r9   r   r   r   r	   r	   r
   test_argmin_argmax   s    zTestMethods.test_argmin_argmax)r'   r(   r)   rI   markparametrizerf   rw   r|   Zxfailr~   r   r   rV   r	   r	   r=   r
   rY      s   
rY   c                   @   s   e Zd ZdS )TestCastingNr&   r	   r	   r	   r
   r      s   r   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	groupingsra   rb   Zgrouping_vectorr   valuesrc   )r9   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\}}|rxt j|dd	}t jd
dg|dd}| || n t |d
dgd}| 	|| d S )Nr]   rg      r   r   )r   Tsortname      @      ?r   indexr   )r   r   )
r   r   r   r   meanr^   Indexro   rs   assert_frame_equal)	r9   r   r$   r   rQ   _re   r   rR   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 )
Nr]   rg   r   r   r   r   r   r   first)r   r   rt   Z	set_indexr   Zaggr   r   )r9   r$   r   rR   rQ   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 )Nr]   rg   r   r   r   Fr   r   r   r   r   r   )	r   r   r   r   r   r^   r   ro   rs   )r9   r$   r   rQ   r   r   rR   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 )Nr]   r   r   r   rg   r   r   )	rM   r   r   r   r   Z	transformlenro   rs   )r9   r$   validr   rQ   rR   r	   r	   r
    test_groupby_extension_transform,  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 )Nr]   rg   r   r   r   r   )r   r   r   applyr   r   )r9   r$   Zgroupby_apply_opr   r	   r	   r
   test_groupby_extension_apply5  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 )Nr]   rg   r   r   r   c                 S   s   | j S r   )r   )r   r	   r	   r
   r   >  r   z9TestGroupby.test_groupby_apply_identity.<locals>.<lambda>r      r      r   r   r   )
r   r   r   r   r   ro   rt   r   r   rs   r9   r$   r   rQ   rR   r	   r	   r
   test_groupby_apply_identity<  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 )Nr]   rg   r   )r   r   Cr   r   r   )
r   r   r   sumcolumnsr   Z_is_numericr   ra   Zassert_index_equalr   r	   r	   r
   test_in_numeric_groupbyJ  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 )Nr]   rg   r   r   r   )r   r   r   ZInt64r   r   )r   )	r   r   r   r   r   r   ra   r   r   )r9   r$   r   r   rQ   rR   r	   r	   r
   test_groupby_sum_mincount[  s    z%TestGroupby.test_groupby_sum_mincountN)r'   r(   r)   __doc__r   rI   r   r   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)	getattrrK   r   isnanr   r   boolra   Zassert_almost_equal)r9   r:   r;   r   rQ   rR   r	   r	   r
   check_reducen  s    
zTestNumericReduce.check_reduceN)r'   r(   r)   r   r	   r	   r	   r
   r   m  s   r   c                   @   s   e Zd ZdS )TestBooleanReduceNr&   r	   r	   r	   r
   r   y  s   r   c                   @   s   e Zd ZdS )TestPrintingNr&   r	   r	   r	   r
   r   }  s   r   c                   @   s   e Zd ZdS )TestUnaryOpsNr&   r	   r	   r	   r
   r     s   r   c                   @   s   e Zd ZdS )TestParsingNr&   r	   r	   r	   r
   r     s   r   c                   @   s   e Zd ZdS )Test2DCompatNr&   r	   r	   r	   r
   r     s   r   )>r   numpyr   rI   Zpandasr   Zpandas._testingZ_testingra   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BaseIndexTestsr.   ZBaseMissingTestsr/   ZBaseArithmeticOpsTestsr0   ZBaseComparisonOpsTestsrW   ZBaseReshapingTestsrX   ZBaseMethodsTestsrY   ZBaseCastingTestsr   ZBaseGroupbyTestsr   ZBaseNumericReduceTestsr   ZBaseBooleanReduceTestsr   ZBasePrintingTestsr   ZBaseUnaryOpsTestsr   ZBaseParsingTestsr   ZDim2CompatTestsr   r	   r	   r	   r
   <module>   sX   








.Ox