U
    >vf*                     @   s  d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZ d dlmZ ejddddggdd	 Zd
d Zejdd dddgdd Zdd Zejddddgdddgdddggdd Zdd Zdd Zdd Zejdddgejd d!d"gd#d$ Zejd%ded"d"d"d!d!d"gfd&ed"d!d!d"d"d"gfd"ed"d!d!d!d!d"gfgd'd( Zejjd)d* Zd+d, Zd-d. Zejd/ej ej!gd0d1 Z"d2d3 Z#dS )4    )productN)	hashtable)NADatetimeIndex
MultiIndexSeriesnamesfirstsecondc                 C   s  t jddddgddddgg| d}| }t jdddgdddgg|jd}t|| t jtdtdg| d}| }t jtdtdg|jd}t|| t jtdtdg| d}| }t jdgdgg|jd}t|| t jg g g| d}| }t|| d S )	N      r   ZaaaaZababZaaaba)r   from_arraysuniquer   tmassert_index_equallist)r   miresexp r   N/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/indexes/multi/test_duplicates.pytest_unique   s    " r   c                  C   s   t ddddddg} t ddddddgdd}t| |g }t ddddg}t ddddgdd}t||g}t|| d S )Nz
2015-01-01ZNaTz
2015-01-02z
Asia/Tokyo)tz)r   r   r   r   r   r   )Zidx1Zidx2resultZeidx1Zeidx2r   r   r   r   test_unique_datetimelike)   s    
 r   levelr   c                 C   s   | j |d}| |  }t|| tjddddgddddggddgd	}|j |d}||}t|| tjg g gddgd	}|j |d}||}t|| d S )
Nr   r      r         r	   r
   r   )r   Zget_level_valuesr   r   r   r   )idxr   r   expectedr   r   r   r   test_unique_level;   s    &

r%   c               	   C   s   d} t jt| d, tdgd tdgdgd tdg}W 5 Q R X tdddddgddddd	gg}d
} t jt| d( |dddddgddd	ddgg W 5 Q R X d S )Nz3Level values must be unique: \[[A', ]+\] on level 0)matchA
   r   Br   r   r    z4Level values must be unique: \[[AB', ]+\] on level 0r"   )pytestZraises
ValueErrorr   ranger   Z
set_levels)msgr   r   r   r   test_duplicate_multiindex_codesO   s    0"r/   r   br   c                 C   s   t jddggd | d}|j| ks&tt ddggd }|| }|j| ksRt|j| d ddd |j| d | d gddgd}|j| kstd S )	Nr   r   r    r   T)r   Zinplacer   r   )r   Zfrom_productr   AssertionErrorrename)r   r   r   r   r   test_duplicate_level_names]   s    
r3   c               
   C   s   t ddgdddggdddddddgdddddddggd} | | d d g| d dg| ddgfD ]"}|jsrt| j|jksdtqdd S )Nr   r   r   levelscodesZNumZUpper)r   Z	set_nameshas_duplicatesr1   drop_duplicatesr   )r   r#   r   r   r   test_duplicate_meta_datan   s     "
r9   c              
   C   s2  | j dkst| jdkst|j dks*t|jdks8ttddgdddggdddddddgdddddddggd}|j dkst|jdksttddgddggd	ddddgd	ddddggd}|j dkst|jdksttddgddggd	d	ddddgd	d	ddddggd}|j dkst|jdks.td S )
NTFr   r   r   r4   r   r0   )Z	is_uniquer1   r7   r   )r#   idx_dupr   Zmi_nanZ
mi_nan_dupr   r   r   test_has_duplicates~   s,     "  r<   c                  C   s@   ddddddddd	d
ddddddddg} t | }|jr<td S )N)xoutzr"   yinr?      )r=   r>   r?      r@   rA   r?   w   )r=   r>   r?   	   r@   rA   r?      )r=   r>   r?      r@   rA   r?      )r=   r>   r?      r@   rA   r?      )r=   r>   r?      r@   rA   r?   z   )r=   r>   r?      r@   rA   r?      )r=   r>   r?      r@   rA   r?      )r=   r>   r?      r@   rA   r?      )r=   r>   r?      r@   rA   r?      )r=   r>   r?      r@   rA   r?      )r=   r>   r?      r@   rA   r?   o   )r=   r>   r?      r@   rA   r?   r   )r=   r>   r?      r@   rA   r?   y   )r=   r>   r?      r@   rA   r?   ~   )r=   r>   r?       r@   rA   r?      )r=   r>   r?   !   r@   rA   r?   {   )r=   r>   r?      r@   rA   r?      )r   from_tuplesr7   r1   )tr   r   r   r   test_has_duplicates_from_tuples   s*    
rg   nlevelsr!      
with_nullsTFc                    s  t t dd t d}|rd d<  fddt| D  t| D ]}d | d| | d  < qF t ddgdg7  n g|  t ddg  |g|  ddgg }t| d}|jrt|rd	d
 }t	t
|  t| d}n|j }t||d g }|jstd S )Ni  r   r:   c                    s   g | ]}   qS r   )copy).0ir6   r   r   
<listcomp>   s     z0test_has_duplicates_overflow.<locals>.<listcomp>r   r   r4   c                 S   s   t | d| d S )N  r   )npinsert)r   r   r   r   f   s    z'test_has_duplicates_overflow.<locals>.f)rq   Ztilearanger-   arrayrepeatr   r7   r1   r   mapvaluestolistre   )rh   rj   r   rm   r5   r   rs   rx   r   rn   r   test_has_duplicates_overflow   s&    


rz   zkeep, expectedlastc                 C   s   | j |d}t|| d S )Nkeep)
duplicatedr   assert_numpy_array_equal)r;   r}   r$   r   r   r   r   test_duplicated   s    	r   c                    st   d\ t tdt  g} fdd|D }t||d}|j| d}tj|j| d}t|| d S )N)   i  rp   c                    s   g | ]}t j  qS r   )rq   randomchoice)rl   Zlevknr   r   ro      s     z)test_duplicated_large.<locals>.<listcomp>r4   r|   )	rq   rt   r   ZmakeStringIndexr   r~   r   rx   r   )r}   r5   r6   r   r   r$   r   r   r   test_duplicated_large   s     r   c               	   C   s   dD ]@} t d| gdtjgg}|jr*tt| tj	ddd qt
ddD ]}t
dd	D ]}tt
d
|t
d
|}t tdd | tdd | gtjt|jd}t||d |d  kst|jrtt| tj	t|dd q^qPd S )N)e   f   r   g      @r   booldtyper      r"   r:   ZabcdeZWXYZr4   )r   r   rq   nanr7   r1   r   r   r~   zerosr-   r   r   r   ZpermutationTlen)r   r   r   mr6   r   r   r   test_duplicated2   s"    

 r   c               	   C   sz  t ddddddgddddddgf} tjddddddgtd}|  }t|| |jtksbt	t dddddgdddddgf}t
|  | tddddddg}| jdd}t|| |jtkst	t dddddgdddddgf}t
| jdd| tddddddg}| jdd}t|| |jtksDt	t ddddgddddgf}t
| jdd| d S )	Nr   r   r    FTr   r{   r|   )r   r   rq   ru   r   r~   r   r   r   r1   r   r8   )r#   r$   r~   r   r   r   test_duplicated_drop_duplicates  s&    &""r   r   c                 C   sn   t ddddddddddg
td}t tjtjd  dddddddtjtjtjd  g
| d }t|| d S )	NFTr   y              ?r   r   y      ?      ?y      ?       @)r   r   rq   r   r~   r   Zassert_series_equal)r   r$   r   r   r   r   &test_duplicated_series_complex_numbers*  s&    	
r   c                  C   s   t ddttgdd} tddddg}tj| |gddgd}| }t ddtgdd}tdddg}tj||gddgd}t|| d S )	Nr   r   ZInt64r   r    r   r0   r   )	r   r   rq   ru   r   r   r   r   r   )Zvals_aZvals_bZmidxr   Z
exp_vals_aZ
exp_vals_br$   r   r   r   test_midx_unique_ea_dtypeI  s    r   )$	itertoolsr   Znumpyrq   r+   Zpandas._libsr   Zpandasr   r   r   r   Zpandas._testingZ_testingr   markZparametrizer   r   r%   r/   r3   r9   r<   rg   rz   ru   r   Zarm_slowr   r   r   Z	complex64Z
complex128r   r   r   r   r   r   <module>   sN   

$
&


