U
    sVc(+                     @   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
 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)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-xj8nt62q/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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_codesN   s    0"r2   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   AssertionErrorrename)r   r   r   r   r   test_duplicate_level_names]   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_duplicatesr4   drop_duplicatesr   )r   r"   r   r   r   test_duplicate_meta_datan   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   r3   )Z	is_uniquer4   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:   r4   )tr   r   r   r   test_has_duplicates_from_tuples   s*    
rj   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r9   r   r   
<listcomp>   s     z0test_has_duplicates_overflow.<locals>.<listcomp>r
   r   r7   c                 S   s   t | d| d S )N  r   )npinsert)r   r   r   r   f   s    z'test_has_duplicates_overflow.<locals>.f)rt   Ztilearanger.   arrayrepeatr   r:   r4   r   mapvaluestolistrh   )rk   rm   r   rp   r8   r   rv   r{   r   rq   r   test_has_duplicates_overflow   s&    


r}   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  rs   c                    s   g | ]}t j  qS r   )rt   randomchoice)ro   Zlevknr   r   rr      s     z)test_duplicated_large.<locals>.<listcomp>r7   r   )	rt   rw   r   ZmakeStringIndexr   r   r   r{   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   rt   nanr:   r4   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   rt   rx   r   r   r   r   r   r4   r   r;   )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   rt   r   r   r   Zassert_series_equal)r   r#   r   r   r   r   &test_duplicated_series_complex_numbers*  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   r/   r0   r;   r   )r"   r1   r   r#   r   r   r   /test_multi_drop_duplicates_pos_args_deprecationI  s    r   )#	itertoolsr   Znumpyrt   r,   Zpandas._libsr   Zpandasr   r   r   Zpandas._testingZ_testingr   markZparametrizer   r   r$   r2   r6   r<   r?   rj   r}   rx   r   Zarm_slowr   r   r   Z	complex64Z
complex128r   r   r   r   r   r   <module>   sN   

$
&


