U
    sVc                     @   s   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 Zejd	ejdgd
d Zdd Zejd	ejdgdd Zejjejjddddd Zejdddgdd ZdS )    N)pa_version_under2p0)PerformanceWarning)is_datetime64tz_dtype)NumericIndex)allow_na_opsc              	   C   s  | }t |tdt|d }ttto4t| j	dk |
 }W 5 Q R X tt|j}t|tjrtj|}|j|_tj||dd nt|tjr|jrt||j	d}tj||dd nXt|tjrtj||j	d}t|j	r| }tj||dd nt |}t|| d S )N   string[pyarrow]Texactdtype)nprepeatrangelentmmaybe_produces_warningr   r   strr   uniquelistdictfromkeysvalues
isinstancepd
MultiIndexfrom_tuplesnamesassert_index_equalIndex(_is_backward_compat_public_numeric_indexr   r   	normalizearrayassert_numpy_array_equal)index_or_series_objobjresultunique_valuesexpected r)   A/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/base/test_unique.pytest_unique   s,    

r+   null_objc              	   C   s  |}t |std n6t|dk r0td nt|tjrNtd|  d |j}| |dd< t|}t	
|tdt|d }|||jd}tttot|jd	k | }W 5 Q R X t|j}d
d |D }| g| }	t|tjr|jrt|	|jd}
tj||
dd nht|tjrdtj|	|jd}
t|jrR| }|
 }
tj||
dd nt	j|	|jd}
t||
 d S )N$type doesn't allow for NA operationsr   z%Test doesn't make sense on empty dataMultiIndex can't hold ''r      r   r   c                 S   s   g | ]}t |s|qS r)   )r   Zisnull).0valr)   r)   r*   
<listcomp>E   s     
 z$test_unique_null.<locals>.<listcomp>Tr	   )r   pytestskipr   r   r   r   _valuestyper   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r!   r"   r#   )r,   r$   r%   r   klassrepeated_valuesr&   Zunique_values_rawZunique_values_not_nullr'   r(   r)   r)   r*   test_unique_null+   s>    
r:   c              	   C   sh   | }t |tdt|d }ttto4t| j	dk t|
 }W 5 Q R X |jdd|ksdtd S )Nr   r   Fdropna)r   r   r   r   r   r   r   r   r   r   r   nuniqueAssertionError)r$   r%   r(   r)   r)   r*   test_nuniqueV   s    r?   c              	   C   sx  |}t |std nt|tjr6td|  d |j}| |dd< t|}t	|t
dt|d }|||jd}t|tjr| t|jkst|jdd	t|jd kstntttot|jd
k t| }W 5 Q R X tttot|jd
k" | td|d ks&tW 5 Q R X tttoHt|jd
k" |jdd	td|ksjtW 5 Q R X d S )Nr-   r.   r/   r   r0   r   r   Fr;   r   )r   r4   r5   r   r   r   r6   r7   r   r   r   r   r   ZCategoricalIndexr=   
categoriesr>   r   r   r   r   r   r   max)r,   r$   r%   r   r8   r9   Znum_unique_valuesr)   r)   r*   test_nunique_nulla   s8     &rB   z<Flaky in the CI. Remove once CI has a single build: GH 44584F)reasonstrictc                 C   sh   d}| |gd }|  }t|tjrHtjdgtd}tj||dd ntjdgtd}t	|| d S )Nu   r0   r   Tr	   )
r   r   r   r   objectr   r   r   r"   r#   )Zindex_or_seriesZuvalr%   r&   r(   r)   r)   r*   test_unique_bad_unicode   s    rF   r<   Tc                 C   s@   t ddt jtjd t jg}|| }| r4|dks<nds<td S )Nyesr      )r   ZSeriesZNAr   nanZNaTr=   r>   )r<   Zserresr)   r)   r*   test_nunique_dropna   s    
rK   )Znumpyr   r4   Zpandas.compatr   Zpandas.errorsr   Zpandas.core.dtypes.commonr   Zpandasr   Zpandas._testingZ_testingr   Zpandas.core.apir   Zpandas.tests.base.commonr   r+   markZparametrizerI   r:   r?   rB   Z
single_cpuZxfailrF   rK   r)   r)   r)   r*   <module>   s,   
*
$ 