U
    f/e3                     @   s   d dl Zd dlZd dlmZ d dlmZmZ d dl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de	dgd e	dgd gdd Zejdddgdd ZdS )    N)iNaT)is_datetime64tz_dtypeneeds_i8_conversion)allow_na_opsc                 C   s   | }t |tdt|d }| }tt|j}t	|t
jrht
j|}|j|_tj||dd nVt	|t
jrt
j||jd}t|jr| }tj||dd nt |}t|| d S )N   Texactdtype)nprepeatrangelenuniquelistdictfromkeysvalues
isinstancepd
MultiIndexfrom_tuplesnamestmassert_index_equalIndexr
   r   	normalizearrayassert_numpy_array_equal)index_or_series_objobjresultunique_valuesexpected r$   A/tmp/pip-unpacked-wheel-tiezk1ph/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}t|j	rlt
|dd< n| |dd< t|}t|tdt|d }|||j	d}| }t|j}d	d
 |D }| g| }	t|tjr tj|	|j	d}
t|j	r| }|
 }
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	   c                 S   s   g | ]}t |s|qS r$   )r   Zisnull).0valr$   r$   r%   
<listcomp>>   s     
 z$test_unique_null.<locals>.<listcomp>Tr   )r   pytestskipr   r   r   r   r   r   r
   r   typer   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%   s4    

r4   c                 C   sB   | }t |tdt|d }t| }|jdd|ks>td S )Nr   Fdropna)r   r   r   r   r   nuniqueAssertionError)r   r    r#   r$   r$   r%   test_nuniqueL   s    r9   c                 C   s  |}t |std nt|tjr6td|  d |j}t|jrTt	|dd< n| |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nBt| }| td|d kst|jdd	td|kstd S )
Nr(   r)   r*   r   r+   r   r	   Fr5   )r   r/   r0   r   r   r   r   r   r
   r   r1   r   r   r   r   ZCategoricalIndexr7   
categoriesr8   r   max)r'   r   r    r   r2   r3   Znum_unique_valuesr$   r$   r%   test_nunique_nullS   s$    
 r<   idx_or_series_w_bad_unicode   r+   c                 C   sZ   | }|  }t|tjr:tjdgtd}tj||dd ntjdgtd}t	|| d S )Nr>   r	   Tr   )
r   r   r   r   objectr   r   r   r   r   )r=   r    r!   r#   r$   r$   r%   test_unique_bad_unicodeo   s    r@   r6   TFc                 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   SeriesZNAr   nanZNaTr7   r8   )r6   sresr$   r$   r%   test_nunique_dropna   s    
rG   )Znumpyr   r/   Zpandas._libsr   Zpandas.core.dtypes.commonr   r   Zpandasr   Zpandas._testingZ_testingr   Zpandas.tests.base.commonr   r&   markZparametrizerD   r4   r9   r<   r   rC   r@   rG   r$   r$   r$   r%   <module>   s&   
&
 
