a
    Gb(+                  
   @   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g ddd Zdd Zejdg dg dg d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g d&fd'eg d(fd"eg d)fgd*d+ Zejjd,d- Zd.d/ Zd0d1 Zejd2ejej gd3d4 Z!d5d6 Z"dS )7    )productN)	hashtable)DatetimeIndex
MultiIndexSeriesnamesfirstsecondc                 C   s  t jg dg dg| d}| }t jg dg d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
   r   )r
   r
   r
   r   r   )r
   r   r   r
   r
   r   ZaaaaZababZaaZaba)r   from_arraysuniquer   tmassert_index_equallist)r   miresexp r   Ilib/python3.9/site-packages/pandas/tests/indexes/multi/test_duplicates.pytest_unique   s    r   c                  C   sh   t g d} t g ddd}t| |g }t g d}t g ddd}t||g}t|| d S )N)
2015-01-01r   r   r   NaTr   )r   r   
2015-01-02r   r   r   z
Asia/Tokyo)Ztz)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )Zidx1Zidx2resultZeidx1Zeidx2r   r   r   r   test_unique_datetimelike(   s    r   level)r   r   r
   r	   c                 C   s   | j |d}| |  }t|| tjg dg d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   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6 tdgd tdgdgd tdg}W d    n1 sN0    Y  tg dg dg}d} t jt| dT tt* |j	g d	g d
gdd W d    n1 s0    Y  W d    n1 s0    Y  d S )Nz3Level values must be unique: \[[A', ]+\] on level 0matchA
   r   )r)   r)   Br+   r+   )r
   r   r
   r   r!   z4Level values must be unique: \[[AB', ]+\] on level 0)r)   r+   r)   r)   r+   )r   r
   r!   r#   T)inplace)
pytestZraises
ValueErrorr   ranger   r   assert_produces_warningFutureWarningZ
set_levels)msgr   r   r   r   test_duplicate_multiindex_codesN   s    Dr4   )r   br   r   )r
   r   r
   c                 C   s   t jddggd | d}|j| ks&J t ddggd }|| }|j| ksRJ |j| d ddd |j| d | d gddgd}|j| ksJ d S )	Nr   r
   r!   r   T)r   r-   r   r    )r   Zfrom_productr   rename)r   r   r   r   r   test_duplicate_level_names]   s    
r7   c                  C   sv   t ddgg dgg dg dgd} | | d d g| d dg| ddgfD ]"}|js\J | j|jksNJ qNd S )	Nr   r
   r   r
   r   r   r   r   r   r
   r
   r
   r   r
   r   r   r   r
   r   levelscodesZNumZUpper)r   Z	set_nameshas_duplicatesdrop_duplicatesr   )r   r$   r   r   r   test_duplicate_meta_datan   s    
r@   c                 C   s   | j du sJ | jdu sJ |j du s*J |jdu s8J tddgg dgg dg dgd}|j du sjJ |jdu sxJ td	d
gddggg dg dgd}|j du sJ |jdu sJ td	d
gddggg dg dgd}|j du sJ |jdu sJ d S )NTFr   r
   r8   r9   r:   r;   r   r5   )r   r   r
   r
   )rA   r   r
   r   r
   )rA   rA   r   r   r
   r
   )rA   rA   r   r
   r   r
   )Z	is_uniquer>   r   )r$   idx_dupr   Zmi_nanZ
mi_nan_dupr   r   r   test_has_duplicates~   s&    rC   c                  C   s    g d} t | }|jrJ d S )N))xoutzr#   yinrF      )rD   rE   rF      rG   rH   rF   w   )rD   rE   rF   	   rG   rH   rF      )rD   rE   rF      rG   rH   rF      )rD   rE   rF      rG   rH   rF      )rD   rE   rF      rG   rH   rF   z   )rD   rE   rF      rG   rH   rF      )rD   rE   rF      rG   rH   rF      )rD   rE   rF      rG   rH   rF      )rD   rE   rF      rG   rH   rF      )rD   rE   rF      rG   rH   rF      )rD   rE   rF      rG   rH   rF   o   )rD   rE   rF      rG   rH   rF   r   )rD   rE   rF      rG   rH   rF   y   )rD   rE   rF      rG   rH   rF   ~   )rD   rE   rF       rG   rH   rF      )rD   rE   rF   !   rG   rH   rF   {   )rD   rE   rF      rG   rH   rF      )r   from_tuplesr>   )tr   r   r   r   test_has_duplicates_from_tuples   s    
rn   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rJ |rd	d
 }tt	|  t| d}n|j
 }t||d g }|jsJ d S )Ni  r   rA   c                    s   g | ]}   qS r   )copy).0ir=   r   r   
<listcomp>       z0test_has_duplicates_overflow.<locals>.<listcomp>r
   r   r;   c                 S   s   t | d| d S )N  r   )npinsert)r   r   r   r   f   s    z'test_has_duplicates_overflow.<locals>.f)ry   Ztilearanger0   arrayrepeatr   r>   r   mapvaluestolistrl   )ro   rq   r   rt   r<   r   r{   r   r   ru   r   test_has_duplicates_overflow   s&    


r   zkeep, expected)FFFTTFlast)FTTFFF)FTTTTFc                 C   s   | j |d}t|| d S )Nkeep)
duplicatedr   assert_numpy_array_equal)rB   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  rx   c                    s   g | ]}t j  qS r   )ry   randomZchoice)rs   Zlevknr   r   rv      rw   z)test_duplicated_large.<locals>.<listcomp>r;   r   )	ry   r|   r   ZmakeStringIndexr   r   r   r   r   )r   r<   r=   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*J 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sJ |jrJ t| tjt|dd q^qPd S )N)e   f   r   g      @r   booldtyper
      r#   rA   ZabcdeZWXYZr;   )r   r   ry   nanr>   r   r   r   Zzerosr0   r   r   r   ZpermutationTlen)r   r   r   mr=   r   r   r   test_duplicated2   s     

r   c                  C   s2  t g dg df} tjg dtd}|  }t|| |jtksJJ t g dg df}t	| 
 | tg d}| jdd	}t|| |jtksJ t g d
g df}t	| j
dd	| tg d}| jdd	}t|| |jtksJ t g dg df}t	| j
dd	| d S )N)r
   r   r!   r
   r   r!   )r
   r
   r
   r
   r   r   )FFFTFFr   )r
   r   r!   r   r!   )r
   r
   r
   r   r   )TFFFFFr   r   )r   r!   r
   r   r!   )TFFTFFF)r   r!   r   r!   )r
   r
   r   r   )r   r   ry   r}   r   r   r   r   r   r   r?   )r$   r%   r   r   r   r   test_duplicated_drop_duplicates  s&    r   r   c                 C   s^   t g d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 )N)
FFFTFFFTFTr   y              ?r   r
   y      ?      ?y      ?       @)r   r   ry   r   r   r   Zassert_series_equal)r   r%   r   r   r   r   &test_duplicated_series_complex_numbers*  s&    	
r   c                  C   sx   t g dg dg} d}tjt|d | d}W d    n1 sH0    Y  t g dg dg}t|| d S )N)r
   r   r!   r
   z^In a future version of pandas all arguments of MultiIndex.drop_duplicates will be keyword-onlyr'   r   )r   r!   r
   )r   r   r   r1   r2   r?   r   )r$   r3   r   r%   r   r   r   /test_multi_drop_duplicates_pos_args_deprecationI  s    (r   )#	itertoolsr   Znumpyry   r.   Zpandas._libsr   Zpandasr   r   r   Zpandas._testingZ_testingr   ZmarkZparametrizer   r   r&   r4   r7   r@   rC   rn   r   r}   r   Zarm_slowr   r   r   Z	complex64Z
complex128r   r   r   r   r   r   <module>   sN   


&


