U
    f/e)                     @   sp  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	 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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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d-d. ZdS )/    )productN)	hashtable)DatetimeIndex
MultiIndex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-tiezk1ph/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_level9   s    &

r#   c                 C   sJ   | dddddddg }| |ddg }| }|js:tt|| d S )Nr   r	   )Z_shallow_copyZ_get_unique_indexr   AssertionErrorr   r   )r!   r   r"   r   r   r   r   test_get_unique_indexM   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B tt, |j	dddddgddd	ddggdd W 5 Q R X 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    T)inplace)
pytestZraises
ValueErrorr   ranger   r   assert_produces_warningFutureWarningZ
set_levels)msgr   r   r   r   test_duplicate_multiindex_codesV   s    0"r3   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   r,   r
   r   )r   Zfrom_productr   r$   rename)r   r   r   r   r   test_duplicate_level_namese   s    
r6   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_duplicatesr$   drop_duplicatesr   )r   r!   r   r   r   test_duplicate_meta_datav   s     "
r<   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
   r7   r   r4   )Z	is_uniquer$   r:   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inrB      )r@   rA   rB      rC   rD   rB   w   )r@   rA   rB   	   rC   rD   rB      )r@   rA   rB      rC   rD   rB      )r@   rA   rB      rC   rD   rB      )r@   rA   rB      rC   rD   rB   z   )r@   rA   rB      rC   rD   rB      )r@   rA   rB      rC   rD   rB      )r@   rA   rB      rC   rD   rB      )r@   rA   rB      rC   rD   rB      )r@   rA   rB      rC   rD   rB      )r@   rA   rB      rC   rD   rB   o   )r@   rA   rB      rC   rD   rB   r   )r@   rA   rB      rC   rD   rB   y   )r@   rA   rB      rC   rD   rB   ~   )r@   rA   rB       rC   rD   rB      )r@   rA   rB   !   rC   rD   rB   {   )r@   rA   rB      rC   rD   rB      )r   from_tuplesr:   r$   )tr   r   r   r   test_has_duplicates_from_tuples   s*    
rj   c                  C   s4   dd } | dd | dd | dd | dd d S )Nc                    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r9   r   r   
<listcomp>   s     z?test_has_duplicates_overflow.<locals>.check.<locals>.<listcomp>r	   r   r7   c                 S   s   t | d| d S )N  r   )npinsert)r   r   r   r   f   s    z6test_has_duplicates_overflow.<locals>.check.<locals>.f)rq   Ztilearanger/   arrayrepeatr   r:   r$   r   mapvaluestolistrh   )ZnlevelsZ
with_nullsr   rm   r8   r   rs   rx   r   rn   r   check   s&    


z+test_has_duplicates_overflow.<locals>.checkr   FT   r   )rz   r   r   r   test_has_duplicates_overflow   s
    #


r|   zkeep, expectedFT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>r7   r~   )	rq   rt   r   ZmakeStringIndexr   r   r   rx   r   )r   r8   r9   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WXYZr7   )r   r   rq   nanr:   r$   r   r   r   zerosr/   r   r   r   ZpermutationTlen)r   r   r   mr9   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   r$   r   r;   )r!   r"   r   r   r   r   test_duplicated_drop_duplicates  s&    &""r   c               	   C   sp   t ddddgddddgg} d}tjt|d | d}W 5 Q R X t dddgdddgg}t|| d S )Nr	   r
   r   z^In a future version of pandas all arguments of MultiIndex.drop_duplicates will be keyword-onlyr&   r}   )r   r   r   r0   r1   r;   r   )r!   r2   r   r"   r   r   r   /test_multi_drop_duplicates_pos_args_deprecation7  s    r   ) 	itertoolsr   Znumpyrq   r-   Zpandas._libsr   Zpandasr   r   Zpandas._testingZ_testingr   markZparametrizer   r   r#   r%   r3   r6   r<   r?   rj   r|   ru   r   Zarm_slowr   r   r   r   r   r   r   r   <module>   s>   

	$
-

