o
    Eh3                    @   s  d dl m Z  d dlZd dlZd dlZd dlmZ d dlmZ	m
Z d dlmZmZmZmZmZ d dlmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z* d dl+m,  m-Z d dl.m/Z/m0Z0 d dl1m,  m2Z3 G d	d
 d
Z4G dd dZ5dd Z6G dd dZ7G dd dZ8G dd dZ9G dd dZ:G dd dZ;G dd dZ<G dd dZ=ej>?dej@ej@gdd ZAdS )     )datetimeN)using_string_dtype)algos	hashtable)is_bool_dtypeis_complex_dtypeis_float_dtypeis_integer_dtypeis_object_dtype)CategoricalDtype)CategoricalCategoricalIndex	DataFrameDatetimeIndexIndexIntervalIndex
MultiIndexNaTPeriodPeriodIndexSeries	Timedelta	Timestampcut
date_rangetimedelta_rangeto_datetimeto_timedelta)DatetimeArrayTimedeltaArrayc                   @   sx  e Zd Zdd Zejje ddd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dd Zdd Zdd Zejdg dg dg dfg d g dg d!fg d"g d#g d$fgd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zejdddgd7d8 Zejdddgd9d: Zd;d< Zejd=ej g d>d?d@ej g dAdBd@ej g dCdDd@gdEdF Z!ejdGej g dHd?d@dIfej g dJd?d@dKfej g dLdBd@dMfej g dNdBd@dKfej g dOe"d@dPfej g dQe"d@dRfej g dSe"d@dTfgdUdV Z#ejdddgejjdWej g dXe"d@ej dYdPge"d@fe$j dZdKej%dZgd[d@e$j dZdKgd[d@fgd\d]gd^d_d` Z&ejdg daej g dbe'dcd@ej dPej%dYge"d@fdPej%dYdPgej g dbe'dcd@ej dPej%dYge"d@fgddde Z(ejdg dfej g dHe'dcd@ej dKej%dZgdgd@fdKej%dKdZgej g dHe'dcd@ej dKej%dZgej)d@fgdhdi Z*ejde+e,g djej g dkej-d@e.dPdYgdPdYgdldmfe/e,g djej g dkej-d@e.dPdYgdPdYgdldmfe/e0dndngdodpej dIdIgej-d@e0dngdodpfgdqdr Z1dsdt Z2duS )vTestFactorizec                 C   s   g d}d}t jt|d t|\}}W d    n1 sw   Y  tjg dtjd}t || tjg dt	d}t || d S )N)             @      ?0factorize with argument that is not not a Seriesmatch)r   r!   r"   dtype)      ?        y       @        r#   )
tmassert_produces_warningFutureWarningr   	factorizenparrayintpassert_numpy_array_equalobject)selfr/   msglabelsuniquesZexpected_labelsexpected_uniques r8   7lib/python3.10/site-packages/pandas/tests/test_algos.pytest_factorize_complex6   s   z$TestFactorize.test_factorize_complexzTODO(infer_string)F)reasonstrictsortTc           
         s   |}|j |d\}}t}t|trtj}| }|jtjkr$|	tj
}||}t|tr<|jtkr<|jtkr<|	t}|rB| }t|  fdd|D }	tj|	tjd}	t||	 tj||dd d S )Nr=   c                    s   g | ]}  |qS r8   )index).0valZexpected_uniques_listr8   r9   
<listcomp>^       z0TestFactorize.test_factorize.<locals>.<listcomp>r'   Texact)r-   r   
isinstancer   from_tuplesuniquer(   r.   Zfloat16astypefloat32boolr2   Zsort_valueslistasarrayr0   r*   r1   assert_index_equal)
r3   Zindex_or_series_objr=   objZresult_codesZresult_uniquesconstructorZexpected_arrr7   expected_codesr8   rB   r9   test_factorizeD   s*   



zTestFactorize.test_factorizec                 C   sl   t dddt jg}t|}|jdd\}}t jg dt jd}tddt jg}t|| t	|| d S )	Nr!   r"   Fuse_na_sentinelr   r!   r   r"   r'         ?       @)
r.   r/   nanr   r-   r0   r   r*   r1   rO   )r3   valuessercodesr6   rR   r7   r8   r8   r9   +test_series_factorize_use_na_sentinel_falsed   s   z9TestFactorize.test_series_factorize_use_na_sentinel_falsec                 C   s  t jg dtd}t|\}}t|t jg dtd tj|dd\}}t jg dt jd}t|| t jg dtd}t|| t jdt jdd d d }t|\}}t jg d	t jd}t|| t jg d
|j	d}t|| tj|dd\}}t jg d
t jd}t|| t jg d	|j	d}t|| t dd d d }t|\}}t jg d	t jd}t|| t jg d|j	d}t|| tj|dd\}}t jg d
t jd}t|| t jg d|j	d}t|| d S )N)abr_   r^   r^   cr`   r`   r'   r^   r_   r`   Tr>   )r   r!   r!   r   r   r"   r"   r"      )r   r!   r"         )re   rd   r"   r!   r         @)      @      @rX   rW           )ri   rW   rX   rh   rg   )
r.   r/   r2   r   r-   r*   r1   r0   aranger(   )r3   itemsr\   r6   exparrr8   r8   r9   
test_basicp   s<   zTestFactorize.test_basicc                 C   s   t ddtjddtjg}t|\}}tjg dtjd}t	|| t
dddtjg}t|| tj|dd\}}tjg dtjd}t	|| t
dtjddg}t|| d S )	NABgQ	@)r   r   rc   r!   r"   rd   r'   Tr>   )r"   r"   rc   rd   r   r!   )r   r.   rY   infr   r-   r/   r0   r*   r1   r   rO   )r3   xr\   r6   rl   r8   r8   r9   
test_mixed   s   zTestFactorize.test_mixedc                 C   s   t d}t d}t||||||g}t|\}}tjg dtjd}t|| t	||g}t
|| tj|dd\}}tjg dtjd}t|| t	||g}t
|| d S )Nz20130101 09:00:00.0000420130101r   r   r   r!   r!   r   r'   Tr>   )r!   r!   r!   r   r   r!   )r   r   r   r-   r.   r/   r0   r*   r1   r   rO   r3   Zv1Zv2rr   r\   r6   rl   r8   r8   r9   test_factorize_datetime64   s   z'TestFactorize.test_factorize_datetime64c                 C   s   t ddd}t ddd}t||||||g}t|\}}tjg dtjd}t|| t	|t
||g tj|dd\}}tjg dtjd}t|| t	|t
||g d S )	NZ201302MfreqZ201303ru   r'   Tr>   )r   r   r   r-   r.   r/   r0   r*   r1   rO   r   rv   r8   r8   r9   test_factorize_period   s   z#TestFactorize.test_factorize_periodc                 C   s   t d}t d}t|||||||g}t|\}}tjg dtjd}t|| t	|t ||g tj|dd\}}tjg dtjd}t|| t	|t ||g d S )Nz1 day 1 min1 day)r   r!   r   r   r!   r!   r   r'   Tr>   )r!   r   r!   r!   r   r   r!   )
r   r   r   r-   r.   r/   r0   r*   r1   rO   rv   r8   r8   r9   test_factorize_timedelta   s   z&TestFactorize.test_factorize_timedeltac                 C   s   t jdddt jgdd}tt|}dD ]4}|j||d}t jddd|gt jd}tt|tt|ks8J t	
t|||k t	
|| qd S )Nr!   r"   Or'   )rc      )na_sentinelr   )r.   r/   rY   htObjectFactorizerlenr-   r0   setr*   r1   pdisna)r3   keyrizerr   idsexpectedr8   r8   r9   test_factorize_nan   s   z TestFactorize.test_factorize_nanc                 C   s   t jg ddd}t g d}tt|}|j||d}t jg dt jd}t|| t jg ddd}t|j	
 | d S )N)r!   r"   rd   r!   r!   r   int64r'   )FFFFFT)mask)r   r!   r"   r   r   rc   r!   r"   rd   )r.   r/   r   ZInt64Factorizerr   r-   r0   r*   r1   r6   to_array)r3   datar   r   resultr   r7   r8   r8   r9   test_factorizer_with_mask   s   z'TestFactorize.test_factorizer_with_maskc                 C   s|   t ddddt jg}tt|}||t}t jg dt j	d}t
|| t jg dtd}t
|j | d S )Nr!   r"   rd   )r   r!   r"   r   rc   r'   r   )r.   r/   rY   r   r   r   r-   rJ   r2   r0   r*   r1   r6   r   )r3   r   r   r   r   r7   r8   r8   r9   test_factorizer_object_with_nan   s   z-TestFactorize.test_factorizer_object_with_nanz&data, expected_codes, expected_uniques)r!   r!   r!   r"   r   r   r   nonsense)r   r!   r"   r!   rd   )r   r   r   r   )r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r!   r"   r!   )r   r   r   c                 C   sv   d}t jt|d t|\}}W d    n1 sw   Y  t |tj|tjd t	j
|td}t || d S )Nr$   r%   r'   )r*   r+   r,   r   r-   r1   r.   r/   r0   comZasarray_tuplesafer2   )r3   r   rR   r7   r4   r\   r6   Zexpected_uniques_arrayr8   r8   r9   test_factorize_tuple_list   s   z'TestFactorize.test_factorize_tuple_listc                 C   sl   t jdd tdD td}d}tjt|d tj|d d d dd	 W d    d S 1 s/w   Y  d S )
Nc                 S      g | ]}t |qS r8   )complexr@   ir8   r8   r9   rC         z6TestFactorize.test_complex_sorting.<locals>.<listcomp>   r'   z,'[<>]' not supported between instances of .*r%   rc   Tr>   )	r.   r/   ranger2   pytestraises	TypeErrorr   r-   )r3   Zx17r4   r8   r8   r9   test_complex_sorting  s
   "z"TestFactorize.test_complex_sortingc                 C   sf   |}t jg d|d}t jg dt jd}t jddg|d}t|\}}t|| t|| d S )N)r!   r"   r"   r!   r'   )r   r!   r!   r   r!   r"   )r.   r/   r0   r   r-   r*   r1   )r3   Zany_real_numpy_dtyper(   r   rR   r7   r\   r6   r8   r8   r9   test_numeric_dtype_factorize  s   z*TestFactorize.test_numeric_dtype_factorizec                 C   sr   t jg dt jd}|j|d t jg dt jd}t jg dt jd}t|\}}t|| t|| d S )N)rW       חArW   :0yE>r   rW   r'   write)r   r!   r   r"   r!   r   )rW   r   r   )	r.   r/   float64setflagsr0   r   r-   r*   r1   r3   writabler   rR   r7   r\   r6   r8   r8   r9   test_float64_factorize)     z$TestFactorize.test_float64_factorizec                 C   r   t jg dt jd}|j|d t jg dt jd}t jddgt jd}t|\}}t|| t|| d S )N)    r!   r   r'   r   r   r!   r   r   r!   )	r.   r/   uint64r   r0   r   r-   r*   r1   r   r8   r8   r9   test_uint64_factorize3  r   z#TestFactorize.test_uint64_factorizec                 C   r   )N)             r   r'   r   r   r   r   )	r.   r/   r   r   r0   r   r-   r*   r1   r   r8   r8   r9   test_int64_factorize=  r   z"TestFactorize.test_int64_factorizec                 C   sn   t jg dtd}|j|d t jg dt jd}t jg dtd}t|\}}t|| t|| d S )N)r^   r`   r^   r_   r`   r'   r   )r   r!   r   r"   r!   r^   r`   r_   )	r.   r/   r2   r   r0   r   r-   r*   r1   r   r8   r8   r9   test_string_factorizeG  s   z#TestFactorize.test_string_factorizec              	   C   s|   t jddd t jddtdgtd}|j|d t jg dt jd}t jg dtd}t|\}}t	
|| t	
|| d S )Nr^   r`   r_   r'   r   )r   r!   rc   rc   r   r"   rc   r!   r   )r.   r/   rY   r   r2   r   r0   r   r-   r*   r1   r   r8   r8   r9   test_object_factorizeQ  s    z#TestFactorize.test_object_factorizec                 C   sn   t jt dgdd}|j|d t jdgt jd}t jdgdd}t|\}}t|| t|| d S )Nz2020-01-01T00:00:00.000M8[ns]r'   r   r   z2020-01-01T00:00:00.000000000zdatetime64[ns])	r.   r/   
datetime64r   r0   r   r-   r*   r1   r   r8   r8   r9   test_datetime64_factorize[  s   z'TestFactorize.test_datetime64_factorizec                 C   s   t jtd}tjdtjd|f}tj||d}t	
|d |d  t	j|d |d dd |j|d}t	
|d |d  t	j|d |d dd d S )N
   r'   r>   r   r!   TrE   r   
RangeIndexZ
from_ranger   r.   rj   r0   r   r-   r*   r1   rO   )r3   r=   rir   r   r8   r8   r9   test_factorize_rangeindexh  s   z'TestFactorize.test_factorize_rangeindexc                 C   s   t jtd}tjdtjd|f}|d d d }|d |f}|r3|d d d d |d d d d f}tj||d}t	
|d |d  t	j|d |d dd |j|d}t	
|d |d  t	j|d |d dd d S )	Nr   r'   rc   r   r!   r>   TrE   r   )r3   r=   r   r   Zri2r   r8   r8   r9   $test_factorize_rangeindex_decreasingv  s   $z2TestFactorize.test_factorize_rangeindex_decreasingc                 C   s   t jg dt jd}tjtdd tj|dd W d    n1 s#w   Y  t	d t| W d    d S 1 s>w   Y  d S )N)            r!   r   r'   zgot an unexpected keywordr%   T)ZorderF)
r.   r/   r   r   r   r   r   r-   r*   r+   )r3   r   r8   r8   r9   test_deprecate_order  s   "z"TestFactorize.test_deprecate_orderr   r   u8r'   )r   r!   r   i8)__nan__foor   r2   c                 C   sJ   t |\}}|ddg }tjg dtjd}t|| t|| d S )Nr   r!   r   r'   )r   r-   r.   r/   r0   r*   r1   )r3   r   r\   r6   r7   rR   r8   r8   r9   ,test_parametrized_factorize_na_value_default  s
   
z:TestFactorize.test_parametrized_factorize_na_value_defaultzdata, na_valuerV   r   )r!   r   r!   r"   r!   )r   r!   r   r   r   )r!   r   r!   r   )r^    r^   r_   r^   )r8   r^   r!   r8   r^   r"   r8   )r   r8   r   r   r   c                 C   sN   t j||d\}}|ddg }tjg dtjd}t|| t|| d S )N)na_valuer!   rd   )rc   r   rc   r!   r'   )r   Zfactorize_arrayr.   r/   r0   r*   r1   )r3   r   r   r\   r6   r7   rR   r8   r8   r9   $test_parametrized_factorize_na_value  s
   z2TestFactorize.test_parametrized_factorize_na_valuezdata, uniques)r_   r^   Nr_   r_   r"   ZInt64Znumpy_arrayZextension_array)r   c                 C   s   t j||dd\}}|rtjg dtjd}t |}ntjg dtjd}|}t|| t|tj	r<t|| d S t
|| d S )NT)r=   rU   )r!   r   rc   r!   r'   )r   r!   rc   r   )r   r-   r.   r/   r0   Z	safe_sortr*   r1   rG   ndarrayassert_extension_array_equal)r3   r=   r   r6   r\   rR   r7   r8   r8   r9   test_factorize_use_na_sentinel  s   z,TestFactorize.test_factorize_use_na_sentinel)r^   Nr_   r^   r   r!   r"   r   r0   c                 C   s@   t jtj|tddd\}}tj||dd tj||dd d S )Nr'   FrT   TZ
strict_nan)r   r-   r.   r/   r2   r*   r1   r3   r   rR   r7   r\   r6   r8   r8   r9   +test_object_factorize_use_na_sentinel_false  s
   
z9TestFactorize.test_object_factorize_use_na_sentinel_false)r!   Nr!   r"   r~   c                 C   sh   d}t jt|d tj|dd\}}W d    n1 sw   Y  t j||dd t j||dd d S )Nr$   r%   FrT   Tr   )r*   r+   r,   r   r-   r1   )r3   r   rR   r7   r4   r\   r6   r8   r8   r9   (test_int_factorize_use_na_sentinel_false  s   z6TestFactorize.test_int_factorize_use_na_sentinel_false)r^   r^   r_   )r   r   r!   category)
categoriesr(   Z2017
US/Easterntzc                 C   s*   t |\}}t|| t|| d S )N)r   r-   r*   r1   rO   r   r8   r8   r9   test_factorize_mixed_values  s   z)TestFactorize.test_factorize_mixed_valuesc                 C   s   t dtjdg|}t dtjdg|}t||}| \}}|jd| dks-J td|}t|| || }| \}	}
|
jd| dksOJ t|	d	|	d	}| \}}|jd| d
kslJ d S )N
2016-01-01z
2015-10-11z
2016-01-02z
2015-10-15zinterval[datetime64[z	], right]r   zinterval[timedelta64[
US/Pacificz, US/Pacific], right])
r   r.   rY   as_unitr   from_arraysr-   r(   r   Ztz_localize)r3   unitleftrightidxr\   catstsZidx2Zcodes2Zcats2Zidx3Zcodes3Zcats3r8   r8   r9    test_factorize_interval_non_nano  s   z.TestFactorize.test_factorize_interval_non_nanoN)3__name__
__module____qualname__r:   r   markZxfailr   parametrizerS   r]   rn   rs   rw   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r/   r   r2   r   r   rY   r   r(   r   r   r   r   r   r0   r   r   r   r   r   r8   r8   r8   r9   r    5   s    '








	







r    c                	   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z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"ejd#d$ged%fd&ejd'ged%fgd(d) Zd*d+ Zd,d- Zd.d/ Zejd0ejegd1d2 Zd3d4 Zd5d6 Z d7S )8
TestUniquec                 C   s6   t jdjdddd}t|}t|t jsJ d S )Nr"   r   d   2   size)r.   randomdefault_rngintegersr   rI   rG   r   r3   rm   r   r8   r8   r9   	test_ints3  s   
zTestUnique.test_intsc                 C   s<   t jdjddddd}t|}t|t jsJ d S )Nr"   r   r   r   r   r~   )	r.   r   r   r   rJ   r   rI   rG   r   r   r8   r8   r9   test_objects9  s   
zTestUnique.test_objectsc                 C   s2   t jg dtd}tdD ]	}tt| qd S )N)ro   rp   CDEr'     )r.   r/   r2   r   r   r   rI   )r3   Zlstr   r8   r8   r9   test_object_refcount_bug?  s   z#TestUnique.test_object_refcount_bugc                 C   sb   t tddttddg}|j}|  |d}t	|}|  t
|| d S )Nrb   r"   )r   r   r.   rj   repeattilerZ   r=   r   rI   r*   assert_almost_equal)r3   Zmindexr   r   r8   r8   r9   test_on_index_objectD  s    

zTestUnique.test_on_index_objectc                 C   s>  |t jt j v rg d}ddg}nYt|rg d}ddg}nLt|r+g d}ddg}n?t|rHtddtddtddg}tddtddg}n"t|rUg d}dd	g}nt|rbg d
}ddg}ng d}ddg}t	||d
 }tj||d}|t jv r|t}|jjdv rt|ttfsJ t|}t || d S )N)r!   r"   r"   r!   r"   rW   rX   r   TTFTF)ro   rp   rp   ro   rp   r'   )mrx   )r*   ZBYTES_DTYPESZSTRING_DTYPESr	   r   r   r   r   r
   r   rI   r.   r/   rJ   r2   r(   kindrG   r   r   r1   )r3   Zany_numpy_dtyper   r6   r   r   r8   r8   r9   test_dtype_preservationR  s8   







z"TestUnique.test_dtype_preservationc                 C   s   t jddgdd}tg d}t|}t|| |j|jks"J t|}t|}t|| |j|jks9J |j	}t|}t|| |j|jksOJ d S )N2015-01-03T00:00:00.0000000002015-01-01T00:00:00.000000000r   r'   )r  r  r  )
r.   r/   r   r   rI   r*   r1   r(   r   rZ   )r3   r   Zdt_indexr   srm   r8   r8   r9   $test_datetime64_dtype_array_returnedw  s(   


z/TestUnique.test_datetime64_dtype_array_returnedc                 C   >   t jg ddd}t|}t jddgdd}t|| d S )N2000r  2001zdatetime64[s]r'   r  r  r.   r/   r   rI   r*   r1   r3   r^   r   r   r8   r8   r9   test_datetime_non_ns     
zTestUnique.test_datetime_non_nsc                 C   r
  )Nr  ztimedelta64[s]r'   i  i  r  r  r8   r8   r9   test_timedelta_non_ns  r  z TestUnique.test_timedelta_non_nsc                 C   s   t jg ddd}tg d}t|}t|| |j|jks"J t|}t|}t|| |j|jks9J |j	}t|}t|| |j|jksOJ d S )N)y  n  '  m8[ns]r'   )r  r  r  r  r  )
r.   r/   r   r   rI   r*   r1   r(   r   rZ   )r3   r   Ztd_indexr   r  rm   r8   r8   r9   %test_timedelta64_dtype_array_returned  s   


z0TestUnique.test_timedelta64_dtype_array_returnedc                 C   s<   t g dtjd}tjg dtjd}tt|| d S )N)r!   r"   r   r   r'   )r!   r"   r   )r   r.   r   r/   r*   r1   r   rI   )r3   r  rl   r8   r8   r9   test_uint64_overflow  s   zTestUnique.test_uint64_overflowc                 C   sH   dt jddg}tt j|td}t jdt jdgtd}t|| d S )Nr^   r`   r'   )r.   rY   r   rI   r/   r2   r*   r1   )r3   Zduplicated_itemsr   r   r8   r8   r9   test_nan_in_object_array  s   z#TestUnique.test_nan_in_object_arrayc                 C   s  t td}t tdtddd}t td}| }t|| t|}t|| t tddd}| }t|| t|}t|| tt tddd}| }t|| t|}t|| tt tdtdd	}t|}| }t	|| t|}t	|| d S )
NZbacabcTr   orderedZbaabcr  r   namer   )
r   rM   rI   r*   assert_categorical_equalr   r   r   r   rO   )r3   r   Z
expected_or`   r   r  Zcir8   r8   r9   test_categorical  s.   



zTestUnique.test_categoricalc                 C   s   t tdddtdddg|}t|}| }|d d j}t|| | }|d d }t|| t	|}|d d j}t|| t	|}|d d }t|| d S )N20160101r   r   r!   )
r   r   r   r   rI   _datar*   r   rO   r   )r3   r   dtir[   r   r   r8   r8   r9   test_datetime64tz_aware  s(   



z"TestUnique.test_datetime64tz_awarec                 C   s   t tg d}t|tjg ddd t tdgdgd  }t|tjddgdd d}tjt|d	 t t	d
}W d    n1 sKw   Y  tjg dt
d}t|| t ttt	d
}tt	d}t|| d S )N)r"   r!   rd   rd   )r"   r!   rd   r   r'   r"   r!   rb   z5unique with argument that is not not a Series, Index,r%   Zaabcra   r  )r   rI   r   r*   r1   r.   r/   r+   r,   rM   r2   r   r!  )r3   r   r4   r   r8   r8   r9   test_order_of_appearance  s   z#TestUnique.test_order_of_appearancec                 C   sN   t tdtdgj|}t|}tjdgd| dd}t	|| d S )Nr#  z2016-01-01T00:00:00.000000000zM8[]r'   )
r   r   dtr   r   rI   r.   r/   r*   r1   )r3   r   r[   r   r   r8   r8   r9   test_order_of_appearance_dt64  s   
z(TestUnique.test_order_of_appearance_dt64c                 C   sT   t tdddtdddg|}t|}t dgd| dd d}t|| d S )Nr#  r   r   z2016-01-01 00:00:00zdatetime64[z, US/Eastern])r(   rz   )r   r   r   r   rI   r*   rO   )r3   r   r%  r   r   r8   r8   r9   test_order_of_appearance_dt64tz  s   


z*TestUnique.test_order_of_appearance_dt64tzzarg ,expected)1r,  2r,  r-  r'   )r   r   c                 C   L   d}t jt|d t|}W d    n1 sw   Y  t || d S N-unique with argument that is not not a Seriesr%   r*   r+   r,   r   rI   r1   )r3   argr   r4   r   r8   r8   r9   test_tuple_with_strings+  s
   	z"TestUnique.test_tuple_with_stringsc                 C   sB   t jdd gtd}t|}t jdd gtd}tj||dd d S )Nr   r'   Tr   )r.   r/   r2   r   rI   r*   r1   r3   rm   r   r   r8   r8   r9   test_obj_none_preservation9  s   
z%TestUnique.test_obj_none_preservationc                 C   s4   t ddg}t|}t dg}t|| d S )Ng       ri   r  r  r8   r8   r9   test_signed_zeroA  s   
zTestUnique.test_signed_zeroc                 C   s~   t dt ddd }t dt ddd }||ksJ ||ks$J t||g}t|}ttjg}t	|| d S )Nd=Q          r            )
structunpackpackr.   r/   r   rI   rY   r*   r1   )r3   NAN1NAN2r^   r   r   r8   r8   r9   test_different_nansH  s   
zTestUnique.test_different_nansel_typec           	      C   s   d}d}t dt d|d }t dt d|d }||ks"J ||ks(J tj||g|d}t|}|jdks=J t dt d|d d }||ksQJ d S )Nl         r:  r7  r8  r   r'   r!   )r;  r<  r=  r.   r/   r   rI   r   )	r3   rA  Zbits_for_nan1Zbits_for_nan2r>  r?  r^   r   Zresult_nan_bitsr8   r8   r9   test_first_nan_keptT  s   
zTestUnique.test_first_nan_keptc                 C   sZ   ||u rd S t j||gtd}t|}|jdksJ |d |u s#J |d |u s+J d S )Nr'   r"   r   r!   )r.   r/   r2   r   rI   r   )r3   Zunique_nulls_fixtureZunique_nulls_fixture2r^   r   r8   r8   r9   test_do_not_mangle_na_valuese  s   
z'TestUnique.test_do_not_mangle_na_valuesc                 C   sH   t dtjdgd |d}t|}tjdtjdg|d}t|| d S )Nr!   r"   rd   r'   )r   r   ZNArI   r/   r*   r   )r3   Zany_numeric_ea_dtyper[   r   r   r8   r8   r9   test_unique_maskedo  s   
zTestUnique.test_unique_maskedN)!r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r"  r&  r'  r*  r+  r   r   r   r.   r/   r2   r3  r5  r6  r@  r   rB  rC  rD  r8   r8   r8   r9   r   2  s>    %)


r   c                 C   sB   | t jdddd}t|}tt|}||ksJ d S )Nr"   r   r      )r.   r   r   r   r   Znunique_intsr   rI   )Zindex_or_series_or_arrayrZ   r   r   r8   r8   r9   test_nunique_intsw  s   
rF  c                   @   s,  e Zd Zdd Zdd Zdd Zejdg dejd	g d
dd Z	dd Z
ejd	g ddd Zejd	g ddd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zejd&g eed'eg gd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6S )7TestIsinc                 C   s   d}t jt|d tdd W d    n1 sw   Y  t jt|d tddg W d    n1 s8w   Y  t jt|d tdgd W d    d S 1 sWw   Y  d S )NzOonly list-like objects are allowed to be passed to isin\(\), you passed a `int`r%   r!   )r   r   r   r   isin)r3   r4   r8   r8   r9   test_invalid  s   "zTestIsin.test_invalidc                 C   sB  d}t jt|d tddgdg}W d    n1 sw   Y  tddg}t || ttddgdg}tddg}t || ttddgdg}tddg}t || ttddgtdg}tddg}t || ttddgdh}tddg}t || t jt|d tddgdg}W d    n1 sw   Y  tddg}t || ttddgtdg}tddg}t || ttddgdh}tddg}t || t jt|d tddgdg}W d    n	1 sw   Y  tddg}t || d S )	N+isin with argument that is not not a Seriesr%   r!   r"   TFr^   r_   )	r*   r+   r,   r   rH  r.   r/   r1   r   )r3   r4   r   r   r8   r8   r9   rn     sD   zTestIsin.test_basicc                 C   s8  t dddj}t||d g}tg d}t|| t||dd }tg d}t|| t|t|dd }tg d}t|| t	dddj}t||d g}tg d}t|| t||dd }tg d}t|| t|t|dd }tg d}t|| d S )	Nrt   rd   periodsr   TFFr"   r  r|   )
r   rZ   r   rH  r.   r/   r*   r1   r   r   r4  r8   r8   r9   test_i8  s(   zTestIsin.test_i8dtype1)r  r   M8[ns, UTC]z	period[D]r(   )r   Zf8r   c                 C   s`   t dddj}t|dj|}|d|}t||}tj	|j
td}t|| d S )N
2013-01-01rd   rK  r   r'   )r   _valuesr   viewr/   rJ   r   rH  r.   zerosshaperL   r*   r1   )r3   r(   rO  dtarm   compsr   r   r8   r8   r9   +test_isin_datetimelike_values_numeric_comps  s   z4TestIsin.test_isin_datetimelike_values_numeric_compsc                 C   sV   t ddddj}t||dd }tjt|td}d|d< d|d	< t	|| d S )
NZ20000101i r  )rL  rz   r   r"   r'   Tr!   )
r   rZ   r   rH  r.   rT  r   rL   r*   r1   r3   r  r   r   r8   r8   r9   
test_large  s   zTestIsin.test_largec                 C   s\   t dddj}t|dj|}t|d< t|tg}tjg dt	d}t
|| d S )NrQ  rd   rK  r   r   rM  r'   )r   rR  r   rS  r/   r   r   rH  r.   rL   r*   r1   )r3   r(   rV  rm   r   r   r8   r8   r9   test_isin_datetimelike_all_nat  s   z'TestIsin.test_isin_datetimelike_all_nat)r  r   rP  c           	      C   s   t dddj}t|dj|}dd |D }d}tjt|d t	||}W d    n1 s3w   Y  |
 s>J tj|td	}tjt|d t	||}W d    n1 s]w   Y  |
 shJ d S )
NrQ  rd   rK  r   c                 S   r   r8   )str)r@   rr   r8   r8   r9   rC     r   zFTestIsin.test_isin_datetimelike_strings_deprecated.<locals>.<listcomp>z2The behavior of 'isin' with dtype=.* is deprecatedr%   r'   )r   rR  r   rS  r/   r*   r+   r,   r   rH  allr.   r\  )	r3   r(   rV  rm   valsr4   resZvals2Zres2r8   r8   r9   )test_isin_datetimelike_strings_deprecated  s   z2TestIsin.test_isin_datetimelike_strings_deprecatedc                 C   sP   t dddd}t|}t|d< t|jtg}tjg dtd}t	
|| d S )Nr   rd   ZUTCrL  r   r   rM  r'   )r   r   r   r   rH  rR  r.   r/   rL   r*   r1   )r3   r%  r[   r_  rl   r8   r8   r9   test_isin_dt64tz_with_nat  s   z"TestIsin.test_isin_dt64tz_with_natc                 C   sv   t g d}g d}ttdg||}ttdgt ddg|}t g d}t||}t|| d S Nr   ra   r!   r   )TTFT)	r.   r/   r   r   
from_codesr   rH  r*   r1   )r3   r^  r   ZSdZStr   r   r8   r8   r9   test_categorical_from_codes  s    z$TestIsin.test_categorical_from_codesc                 C   sn   t g d}g d}tdg||}tdgt ddg|}t g d}t||}t|| d S rc  )r.   r/   r   rd  r   rH  r*   r1   )r3   r^  r   catotherr   r   r8   r8   r9   test_categorical_isin  s   zTestIsin.test_categorical_isinc                 C   sj   t jg}t jg}t dg}d}tjt|d t||}W d    n1 s(w   Y  t|| d S )NTrJ  r%   )	r.   rY   r/   r*   r+   r,   r   rH  r1   r3   rW  rZ   r   r4   r   r8   r8   r9   test_same_nan_is_in!  s   zTestIsin.test_same_nan_is_inc                 C   sP   t dd}t j|d< t|t t jdg}t jt|td}t	
|| d S NrW   iAB r   r!   r'   )r.   r   rY   r   rH  r/   onesr   rL   r*   r1   rY  r8   r8   r9   test_same_nan_is_in_large/  s
   
z"TestIsin.test_same_nan_is_in_largec                 C   sZ   t dd}t|}t j|d< |t t jdg}tt jt|td}t	
|| d S rk  )r.   r   r   rY   rH  r/   rl  r   rL   r*   assert_series_equal)r3   r  Zseriesr   r   r8   r8   r9    test_same_nan_is_in_large_series7  s   
z)TestIsin.test_same_nan_is_in_large_seriesc                 C   s   G dd d}| | }}d}t jt|d) t t|g|gtdg t t|g|gtdg W d    d S 1 sCw   Y  d S )Nc                   @   s"   e Zd ZdefddZdd ZdS )z0TestIsin.test_same_object_is_in.<locals>.LikeNanreturnc                 S      dS )NFr8   )r3   rg  r8   r8   r9   __eq__G     z7TestIsin.test_same_object_is_in.<locals>.LikeNan.__eq__c                 S   rq  )Nr   r8   )r3   r8   r8   r9   __hash__J  rs  z9TestIsin.test_same_object_is_in.<locals>.LikeNan.__hash__N)r   r   r   rL   rr  rt  r8   r8   r8   r9   LikeNanF  s    ru  rJ  r%   TF)r*   r+   r,   r1   r   rH  r.   r/   )r3   ru  r^   r_   r4   r8   r8   r9   test_same_object_is_in@  s    ""zTestIsin.test_same_object_is_inc                 C   s   t dg}t dg}|d |d usJ tt||}ttdg| ttj|tdtj|td}ttdg| ttj|tj	dtj|tj	d}ttdg| d S )NrY   r   Tr'   )
floatr   rH  r.   r/   r*   r1   rN   r2   r   )r3   rW  rZ   r   r8   r8   r9   r@  V  s   

zTestIsin.test_different_nansc                 C   sj   ddg}dg}t ddg}d}tjt|d t||}W d    n1 s(w   Y  t|| d S )Nss*   Z42Fz2isin with argument that is not not a Series, Indexr%   )r.   r/   r*   r+   r,   r   rH  r1   ri  r8   r8   r9   test_no_castn  s   zTestIsin.test_no_castemptyr'   c                 C   s6   t ddg}tddg}t||}t|| d S )Nr^   r_   F)r   r.   r/   r   rH  r*   r1   )r3   r{  r^  r   r   r8   r8   r9   
test_emptyy  s   zTestIsin.test_emptyc                 C   s\   t jdt jd tdgtd}t jtdgtd}t g d}t||}t|| d S )NrY                 ?r'   )FFT)	r.   r/   rY   rw  r2   r   rH  r*   r1   )r3   rW  r^  r   r   r8   r8   r9   test_different_nan_objects  s
   z#TestIsin.test_different_nan_objectsc                 C   s   t dt ddd }t dt ddd }||ksJ ||ks$J tj||gtjd}tj|gtjd}t||}tddg}t	|| tj|gtjd}t||}tddg}t	|| d S )Nr7  r8  r9  r   r:  r'   T)
r;  r<  r=  r.   r/   r   r   rH  r*   r1   )r3   r>  r?  rm   Zlookup1r   r   Zlookup2r8   r8   r9   test_different_nans_as_float64  s   z'TestIsin.test_different_nans_as_float64c                 C   s<   t dddgi}|dg}t dddgi}t|| dS )zComparing df with int`s (1,2) with a string at isin() ("1")
        -> should not match values because int 1 is not equal str 1rZ   r!   r"   r,  FN)r   rH  r*   assert_frame_equalr3   Zdfr   Zexpected_falser8   r8   r9   test_isin_int_df_string_search  s   z'TestIsin.test_isin_int_df_string_searchc                 C   sH   t dtjdgi}|tjdgtd}t dddgi}t|| dS )zComparing df with nan value (np.nan,2) with a string at isin() ("NaN")
        -> should not match values because np.nan is not equal str NaNrZ   r"   ZNaNr'   FN)r   r.   rY   rH  r/   r2   r*   r  r  r8   r8   r9   test_isin_nan_df_string_search  s   z'TestIsin.test_isin_nan_df_string_searchc                 C   sF   t dddgi}|tjdgtd}t dddgi}t|| dS )zComparing df with floats (1.4245,2.32441) with a string at isin() ("1.4245")
        -> should not match values because float 1.4245 is not equal str 1.4245rZ   gn?g#Ed@z1.4245r'   FN)r   rH  r.   r/   r2   r*   r  r  r8   r8   r9    test_isin_float_df_string_search  s   z)TestIsin.test_isin_float_df_string_searchc                 C   s4   t dgtjd}|dg}t d}t|| d S )Nl   
G r'   l    
G F)r   r.   r   rH  r*   rn  r3   r[   r   r   r8   r8   r9   test_isin_unsigned_dtype  s   z!TestIsin.test_isin_unsigned_dtypeN)!r   r   r   rI  rn   rN  r   r   r   rX  rZ  r[  r`  rb  re  rh  rj  rm  ro  rv  r@  rz  r   r2   r.   r/   r|  r~  r  r  r  r  r  r8   r8   r8   r9   rG    s:    )




	
rG  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zej	d	e
d
gdd Zdd Zdd Zdd Zdd Zej	d	eje
dfdd Zdd Zdd ZdS )TestValueCountsc                 C   s   t jdd}t|d}d}tjt|d t	|}W d    n1 s'w   Y  g d}t
|tdd}tg d|d	d
}t| |  d S )Ni  re   !pandas.value_counts is deprecatedr%   )gV-g}?5^Ig/$ۿgףp=
?gʡE?Tr  )r!   r   r"   r!   countr?   r  )r.   r   r   Zstandard_normalr   r*   r+   r,   r   value_countsr   Zfrom_breaksrJ   r   r   rn  Z
sort_index)r3   rm   Zfactorr4   r   Zbreaksr?   r   r8   r8   r9   test_value_counts  s   
z!TestValueCounts.test_value_countsc                 C   s   g d}d}t jt|d tj|dd}W d    n1 sw   Y  tdgtdgdd	}t || t jt|d tj|d
dd}W d    n1 sPw   Y  td
d
gtddgdd	}t || d S )N)r!   r"   rd   re   r  r%   r!   binsre   )Zd;?rg   r  r  r"   F)r  r=   )r        @)r  rg   )	r*   r+   r,   r   r  r   r   rH   rn  )r3   r  r4   r   r   r8   r8   r9   test_value_counts_bins  s$   z&TestValueCounts.test_value_counts_binsc              	   C   s  d}t jt|d ttddg}W d    n1 sw   Y  t|dks+J t jt|d tjtddgdd}W d    n1 sIw   Y  t|dksVJ t jt|d ttg d}W d    n1 sqw   Y  t|dks~J d}t	j
t|d6 t jt|d tjtjd	dgtd
dd W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr  r%   r!   rW   r  )r!   rW   r,  r"   z*bins argument only works with numeric datar,  r'   )r*   r+   r,   r   r  r.   r/   r   r   r   r   r   r2   )r3   Zmsg2r   r4   r8   r8   r9   test_value_counts_dtypes  s*   "z(TestValueCounts.test_value_counts_dtypesc              	   C   sR  t tdtgdd}tddg}d}||fD ]5}tjt|d t	|}tj	|dd	}W d    n1 s7w   Y  t
|d
ksDJ t
|dksLJ qt tdd
idd}tjt|d t	|}W d    n1 snw   Y  t|| t d
gtdgdd}	tjt|d t	|}
W d    n1 sw   Y  t|
|	 d S )Nr  timedelta64[ns]r'   r   z
2014-01-01r  r%   Fdropnar!   r"   z2014-01-01 00:00:00r  r  r  )r   r.   timedelta64r   r   r*   r+   r,   r   r  r   r   rn  )r3   tdr)  r4   r[   ZvcZ
vc_with_naZexp_dtZ	result_dtZexp_tdZ	result_tdr8   r8   r9   test_value_counts_nat  s(   
z%TestValueCounts.test_value_counts_natr(   zM8[us]c              
   C   s   t tdddtdddtdddtdddtdddtdddg|d}| }ttdddtdddtdddg|d}t g d|dd}t|| d S )	Ni  r!   i  ip  r'   rd   r"   r!   r  r  )r   r   r  r   r*   rn  )r3   r(   r[   r_  Z	exp_indexrl   r8   r8   r9   &test_value_counts_datetime_outofbounds  s"   





 z6TestValueCounts.test_value_counts_datetime_outofboundsc                 C   st   t ttd}| }t g dtg ddd}tj||dd |j }| }|j	 |_	tj||dd d S )NZaaabbcr  ra   r  r  TZcheck_index_type)
r   r   rM   r  r   r*   rn  rf  Z
as_orderedr?   rY  r8   r8   r9   r"  "  s   
z TestValueCounts.test_categoricalc                 C   s>  t ttd}tj|jd< | }t g dtg dg dddd}tj	||dd	 |jd
d}t g dtdddtjgdd}tj	||dd	 t ttddg dd}tj|jd< | }t g dtg dg ddddd}tj	||dd	 |jd
d}t g dtdddtjgg ddddd}tj	||dd	 d S )NZ
aaaaabbbccr!   )re   rd   r"   ra   r   r  r  Tr  Fr  )re   rd   r"   r!   r^   r_   r`   )r_   r^   r`   )r  r   r  )
r   r   rM   r.   rY   Zilocr  r   r*   rn  rY  r8   r8   r9   test_categorical_nans1  sL   	z%TestValueCounts.test_categorical_nansc                 C   sZ   t ttdtddd}| }t g dtg dtddddd}tj||dd	 d S )
NZbbbaacZabcdTr  )rd   r"   r!   r   )r_   r^   r`   r7  r  r  r  )r   r   rM   r  r*   rn  rY  r8   r8   r9   test_categorical_zeroes\  s   z'TestValueCounts.test_categorical_zeroesc              	   C   s  t tg djddtddgddgdd t tg djddtddgddgdd t tdgd	 dgd  d gd
  jddtd	dgtddgtddd t tdgd
 dgd	  d gd  jddtg dg ddd t tg djddtddgddgdd t tg djddtddgddgdd t tg djddtddgddgdd tg djdd}tg dg ddd}t || d S )Nr  Tr  r"   r!   Fr  r  rd   rb   r'   )rb   rd   r"   )TFN)皙$@rf   rf   rf   r  )r  rf   rf   N)r  r  rf   rf   rf   Nr  )rf   r  N)r*   rn  r   r  r   r2   )r3   r   r   r8   r8   r9   test_value_counts_dropnai  s>   ((z(TestValueCounts.test_value_counts_dropnar   c                 C   s   t dgd dgd  tjgd  }||}|jddd}t g dt tjd	d
g|ddd}t|| |jddd}t ddgt d	d
g|ddd}t|| d S )Nr!   r"   rd   rb   TF)	normalizer  )g      ?g333333?g?rX   rW   r'   Z
proportionr  g333333?g?)r   r.   rY   rJ   r  r*   rn  )r3   r(   r  Zs_typedr   r   r8   r8   r9   test_value_counts_normalized  s   $
z,TestValueCounts.test_value_counts_normalizedc                 C   s   t jdgt jd}tdgdgdd}d}tjt|d t|}W d    n1 s+w   Y  t	|| t jddgt
d}tddgddgdd}tjt|d t|}W d    n1 saw   Y  t	|| d S )	Nr   r'   r!   r  r  r  r%   rc   )r.   r/   r   r   r*   r+   r,   r   r  rn  r2   )r3   rm   r   r4   r   r8   r8   r9   test_value_counts_uint64  s   z(TestValueCounts.test_value_counts_uint64c                 C   sX   t dddddt jg}t|jdd}tg dtjg ddd	d
d}t|| d S )Nrd   r!   r"   re   r  )r"   r"   r!   ))r  rX   )rX   rh   )rh   rg   zinterval[float64, right]r'   r  r  )	r.   r/   rY   r   r  r   rH   r*   rn  )r3   rZ   r   r   r8   r8   r9   test_value_counts_series  s   z(TestValueCounts.test_value_counts_seriesN)r   r   r   r  r  r  r  r   r   r   r2   r  r"  r  r  r  r.   r   r  r  r  r8   r8   r8   r9   r    s    
+&
r  c                   @   s$  e Zd Zdd Zejdeg dedddej	ddddej	d	g
eg d
ejg de
dejg dejdgdd Zdd Zejdeg deddgdd Zejdg dg dfg dddgfg dg dfgdd  Zejd!g d"ejg d#e
dfgd$d% Zd&S )'TestDuplicatedc                 C   s  t jddt jddt jgtd}t|}t g d}t|| tj|dd}t g d}t|| tj|dd}t g d	}t|| tj|d
d}t g d}t|| t jdtd}t	t
ddt jt jgd dt jdt jgd D ]\}}|||< q{t|}d
gd }dgd }t || }t|| tj|dd}t || }t|| tj|d
d}t || }t|| d S )Nr   r!   r"   r'   )FFFTFTfirstZkeeplast)TFTFFFF)TFTTFT   re   T)r.   r/   rY   r2   r   
duplicatedr*   r1   r{  	enumeratezip)r3   keysr   r   r   tZfalsesZtruesr8   r8   r9   test_duplicated_with_nas  s:   
(



z'TestDuplicated.test_duplicated_with_nascase)
r!   r"   r!   rb   rd   r"   re   r!   rb      g?g@gffffff
@g@gffffff@)
      ?      ?       @       @r        @      @y      @      @r  y      @      @r  r  y      @      @)
r^   r_   r^   er`   r_   r7  r^   r  fr'   )
r!   r   r!      r   r   '   r!   r     c           
      C   sF  t g d}t g d}||B }tj|dd}t|| tj|dd}t|| tj|dd}t|| t|t|ddfD ]&}|jdd}t|| |jdd}t|| |jdd}t|| qCt|t|ddfD ],}	|	jdd}t|t| |	jdd}t|t| |	jdd}t|t| qtd S )	N
FFTFFTFTTF
TTTTFFFFFFr  r  r  Fr   r'   )	r.   r/   r   r  r*   r1   r   r   rn  )
r3   r  	exp_firstexp_last	exp_false	res_firstres_last	res_falser   r  r8   r8   r9   test_numeric_object_likes  s8   z(TestDuplicated.test_numeric_object_likesc                 C   s  g d}g d}t dd |D t dd |D t dd |D t dd |D t dd |D g}t g d	}t g d
}||B }|D ]}tj|dd}t|| tj|dd}	t|	| tj|dd}
t|
| t|t|ddt|tdfD ]&}|jdd}t|| |jdd}	t|	| |jdd}
t|
| qt|t|ddt|tdfD ],}|jdd}t	|t| |jdd}	t	|	t| |jdd}
t	|
t| qqKd S )N)

2011-01-01
2011-01-02r  r   
2011-01-03r  z
2011-01-04r  r   z
2011-01-06)
1 days2 daysr  r   z3 daysr  z4 daysr  r   z6 daysc                 S   r   r8   r   r@   r7  r8   r8   r9   rC   D  r   z6TestDuplicated.test_datetime_likes.<locals>.<listcomp>c                 S      g | ]}t |d dqS )r   r   r  r  r8   r8   r9   rC   E      c                 S   r  )r   ry   )r   r  r8   r8   r9   rC   F  r  c                 S   s   g | ]}t |qS r8   )r.   r   r  r8   r8   r9   rC   G  rD   c                 S   r   r8   )r   r  r8   r8   r9   rC   H  r   r  r  r  r  r  Fr   r'   )
r.   r/   r   r  r*   r1   r   r2   r   rn  )r3   r)  r  casesr  r  r  r  r  r  r  r   r  r8   r8   r9   test_datetime_likes)  sX   



z"TestDuplicated.test_datetime_likesr   r   rd   c                 C   s,   |j du sJ t| tg d d S )NT)FFF)Z	is_uniquer*   r1   r  r.   r/   )r3   r  r8   r8   r9   test_unique_index{  s   z TestDuplicated.test_unique_indexzarr, uniques)r   r   r!   r!   r   r   r   r  r  r   )r   r  r  r   )r_   r`   r^   r_   r  r  r  r  )r   r_   r"   r^   rd   r   )r   r  r  c                 C   sj   t jt|td}||d d < d}tjt|d t|}W d    n1 s(w   Y  t	|| d S )Nr'   r0  r%   )
r.   r{  r   r2   r*   r+   r,   r   rI   r1   )r3   rm   r6   r   r4   r   r8   r8   r9   test_unique_tuples  s   z!TestDuplicated.test_unique_tupleszarray,expected)r  r   r!   r}        ?       @r  )r  y                r)   r}  r  c                 C   r.  r/  r1  )r3   r/   r   r4   r   r8   r8   r9   test_unique_complex_numbers  s
   z*TestDuplicated.test_unique_complex_numbersN)r   r   r   r  r   r   r   r.   r/   rY   r2   r   r  r  r   r   r   r  r  r  r8   r8   r8   r9   r    sN    ' 

( R



r  c                   @   s0  e Zd Zejdejej	dd e
dD edfejej	dd e
dD edfejejdejdfejejdejdfejejdejdfgdd Zejdejej	d	d e
dD edfejej	d
d e
dD edfejejdejdfejejdejdfejejdejdfgdd ZdS )TestHashTablezhtable, datac                 C      g | ]}d | qS Zfoo_r8   r   r8   r8   r9   rC     rD   zTestHashTable.<listcomp>r   r'   c                 C   r  r  r8   r   r8   r8   r9   rC     rD   c           
      C   s   t ||jd}|tjkrtj|jd< n|tjkr#tjd tg|jdd< |j	dddj
dd}|jj|d |jd	d
j}| |j}t|| | j|jdd\}}t|| || }	t|	|j d S )Nr'       rd   TZfracreplaceZdropr   r  r  )Zreturn_inverse)r   r(   r   Float64HashTabler.   rY   locPyObjectHashTabler   samplereset_indexrZ   r   drop_duplicatesrI   r*   r1   )
r3   htabler   r   r  s_duplicatedexpected_uniqueresult_uniqueresult_inverseZreconstrr8   r8   r9   test_hashtable_unique  s    


z#TestHashTable.test_hashtable_uniquec                 C   r  r  r8   r   r8   r8   r9   rC     rD   c                 C   r  r  r8   r   r8   r8   r9   rC     rD   c                 C   s   t ||jd}|tjkrtj|jd< n|tjkr#tjd tg|jdd< |j	dddj
dd}|jj|d | j}| |j\}}|  j}	t||	 |||   }
| j}t|
| d S )	Nr'   r  r  rd   Tr  r  r   )r   r(   r   r  r.   rY   r  r  r   r  r  rZ   r   r   r-   r  r  r*   r1   )r3   r  r   r   r  r  Zna_maskr  r  r  Zresult_reconstructZexpected_reconstructr8   r8   r9   test_hashtable_factorize  s   



z&TestHashTable.test_hashtable_factorizeN)r   r   r   r   r   r   r   r  r.   r/   r   r2   ZStringHashTabler  rj   r   ZInt64HashTabler   ZUInt64HashTabler   r  r  r8   r8   r8   r9   r    s:    
r  c                   @   s   e Zd Zejdejejdddejdddejg
dejdddejdddejg
gdd Zejd	ej	d
 dd Z
ejd	ejejgdd Zdd Zejjdd ZdS )TestRankrm   rf   r!   r"   rd   rg   c                 C   s`   t d}t|}t| }| }t|}tj||< |	|}tj
||< t|| d S )Nzscipy.stats)r   Zimportorskipr.   r/   ZisfinitecopylibalgosZrank_1drq   ZrankdatarY   r*   r   )r3   rm   Zsp_statsr   r   rl   r8   r8   r9   test_scipy_compat  s   





zTestRank.test_scipy_compatr(   
AllIntegerc                 C   sT   t jddgt jd}t jddg|d}|j|d t|}t|}t|| d S )Nr!   r"   r'   r   r   )	r.   r/   r   r   r   r   rankr*   r1   )r3   r   r(   rl   r   r[   r   r8   r8   r9   rn     s   
zTestRank.test_basicc                 C   s:   t jddgt jd}tddg|d}tt|| d S )Nr!   r"   r'   r   )r.   r/   r   r   r*   r1   r   r  )r3   r(   rl   r  r8   r8   r9   r  %  s   zTestRank.test_uint64_overflowc                 C   s`   t g dg dg dgg}d}tjt|d t| W d    d S 1 s)w   Y  d S )Nr   )re   rb   r  )r  r  	   z%Array with ndim > 2 are not supportedr%   )r.   r/   r   r   r   r   r  )r3   rm   r4   r8   r8   r9   test_too_many_ndims,  s
   "zTestRank.test_too_many_ndimsc                 C   s\   t d}tj|dd }|dksJ t ddd}tj|dd }|dks,J d S )Ni  T)Zpctr!   i  r"   )r.   rj   r   r  maxreshape)r3   rZ   r   r8   r8   r9   test_pct_max_many_rows3  s   
zTestRank.test_pct_max_many_rowsN)r   r   r   r   r   r   r.   rY   r  	typecodesrn   r   r   r  r  Z
single_cpur  r8   r8   r8   r9   r    s    

	
r  c                   @   s   e Zd Zdd Zejdejd ejd  dd Z	dd	 Z
ejdejd ejd  d
d Zdd Zejdeegdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestModec                 C   s6   t g tjtg tdd}ttt	g |j
 d S )Nr'   )r(   r?   )r   r.   r   r   intr*   r1   r   moder/   rZ   r3   rl   r8   r8   r9   test_no_mode@  s   zTestMode.test_no_moder)  r  ZFloatc                 C   s   dg}dg}dg}ddg}t ||d}t ||d}tt|j|j t| | t ||d}t ||d}tt|j|j t| | d S )Nr!   r'   r   r*   r1   r   r  rZ   rn  r3   r)  Z
exp_singleZdata_singleZ	exp_multiZ
data_multir[   rl   r8   r8   r9   test_mode_singleD  s   zTestMode.test_mode_singlec                 C   sN   t dgtd}tt|j|j t g dtd}tt|j|j d S )Nr!   r'   ra   )r   r  r*   r1   r   r  rZ   r2   r  r8   r8   r9   test_mode_obj_intW  s   zTestMode.test_mode_obj_intc                 C   s   dg}dgd dgd  }ddg}dgd dgd  dgd  }t ||d}t ||d}tt|j|j t| | t ||d}t ||d}tt|j|j t| | d S )Nr!   rb   r"   rd   r'   r  r  r8   r8   r9   test_number_mode^  s   zTestMode.test_number_modec                 C   s\   dg}dgd dgd  }t |dd}t |dd}tt|j|j t| | d S )Nr_   r^   r"   rd   r`   r'   r  )r3   rl   r   r[   r8   r8   r9   test_strobj_modep  s   zTestMode.test_strobj_modec                 C   s   dg}dgd dgd  }t ||d}t ||d}|r+|tu r+tt|j|j ntt|j|j t| | d S )NZbarr   r"   rd   r'   )	r   r\  r*   r   r   r  rZ   r1   rn  )r3   r)  Zusing_infer_stringrl   r   r[   r8   r8   r9   test_strobj_multi_chary  s   zTestMode.test_strobj_multi_charc                 C      t g ddd}t g ddd}tt|j|j t| | t ddgdd}t g ddd}tt|j|j t| | d S )N)
1900-05-03r  
2013-01-02r   r'   )r  r  r  r  r  )r  r  r  r  r  r   r*   r   r   r  rZ   rR  rn  r3   rl   r[   r8   r8   r9   test_datelike_mode     zTestMode.test_datelike_modec                 C   r  )N)-1 days0 daysr  r  r'   )r  r  r  2 minr|   r|   r|   z-1 dayz-1 day 2 minr  r  r  r  r8   r8   r9   test_timedelta_mode  r
  zTestMode.test_timedelta_modec                 C   sD   t dgtd}t g d}tt|j|j t| | d S )Nr   r'   )r!   r   r   )r   r2   r*   r1   r   r  rZ   rn  r  r8   r8   r9   test_mixed_dtype  s   zTestMode.test_mixed_dtypec                 C   s   t dgtjd}t g dtjd}tt|j|j t| | t ddgtjd}t ddgtjd}tt|j|j t| | d S )Nr   r'   )r!   r   r   r!   )	r   r.   r   r*   r1   r   r  rZ   rn  r  r8   r8   r9   r    s   zTestMode.test_uint64_overflowc                 C   s   t ddg}|}t| j}t|| t g d}t dgddgd}t| j}t|| t g d}t ddgg dd}t| j}t|| d S )	Nr!   r"   r!   r^   r^   r^   r   r!   r!   r"   rd   rd   rd   r   )r   r   r  rR  r*   r!  )r3   r`   rl   r_  r8   r8   r9   r"    s   zTestMode.test_categoricalc                 C   s   t g d}tg dtjd}tt||j t g d}tdgt	d}tt||j t g d}tddgtjd}tt||j t g dd	d}t
jtd
d t| W d    d S 1 siw   Y  d S )Nr   r'   r  r^   r  r!   rd   r  r  ZTimedeltaIndexr%   )r   r   r.   r   r*   r1   r   r  rZ   r2   r   r   AttributeError)r3   r   rl   r8   r8   r9   
test_index  s    "zTestMode.test_indexc                 C   s6   t g ddd}| }t dgdd}t|| d S )N)r!   r!   rd   r   r  r!   )r   r  r*   rn  r  r8   r8   r9   test_ser_mode_with_name  s   z TestMode.test_ser_mode_with_nameN)r   r   r   r  r   r   r   r.   r  r  r   r  r  r\  r2   r  r	  r  r  r  r"  r  r  r8   r8   r8   r9   r  ?  s"    

	
r  c                   @   sH   e Zd Zejdddgdd Zdd Zejddd	gd
d ZdS )TestDiffr(   r   r  c                 C   s   t dt j|dd}|jdd|d d df< tj	|ddd	}t j
|jd
dd }t dd|d d df< t dd|dd d f< t|| tj	|jddd	}t||j d S )N   rd   re   r   nsr"   r!   r   Zaxisr  r'   )r.   rj   rJ   r   rS  r  r(   typer   diffrl  rU  r  r*   r1   Tr3   r(   rm   r   r   r8   r8   r9   test_diff_datetimelike_nat  s    z#TestDiff.test_diff_datetimelike_natc                 C   sX   t ddddj}d}tjt|d tj|ddd W d    d S 1 s%w   Y  d S )	Nr   rd   r   ra  z#cannot diff DatetimeArray on axis=1r%   r!   r  )r   r$  r   r   
ValueErrorr   r  )r3   rV  r4   r8   r8   r9   test_diff_ea_axis  s
   "zTestDiff.test_diff_ea_axisZint8Zint16c                 C   sH   t jg d|d}t|d}t jt jddddgdd}t|| d S )N)r   r!   r!   r   r   r'   r!   r   rc   rK   )r.   r/   r   r  rY   r*   r1   r  r8   r8   r9   test_diff_low_precision_int  s   z$TestDiff.test_diff_low_precision_intN)	r   r   r   r   r   r   r  r   r!  r8   r8   r8   r9   r    s    
r  opc                 C   sh   | g d}| g d}| g d}t |tjr&t||}t|| d S t||}t|| d S )N)rd   r!   rd   re   )r"   rd   r!   r!   )rd   rd   r!   r!   re   r"   )rG   r.   r   r   Zunion_with_duplicatesr*   r1   r   )r"  ZlvalsZrvalsr   r   r8   r8   r9   test_union_with_duplicates   s   r#  )Br   r;  Znumpyr.   r   Zpandas._configr   Zpandas._libsr   r  r   r   Zpandas.core.dtypes.commonr   r   r   r	   r
   Zpandas.core.dtypes.dtypesr   Zpandasr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr*   Zpandas.core.algorithmscoreZ
algorithmsZpandas.core.arraysr   r   Zpandas.core.commoncommonr   r    r   rF  rG  r  r  r  r  r  r  r   r   r/   r#  r8   r8   r8   r9   <module>   sL    P      G  C   k\9 " 