o
    d*                  
   @   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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)NA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aaaba)r   from_arraysuniquer   tmassert_index_equallist)r   miresexp r   ^/app/.heroku/python/lib/python3.10/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)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 tdgd tdgdgd tdg}W d    n1 s'w   Y  tg dg dg}d} t jt| d |g d	g d
g W d    d S 1 sWw   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&   )pytestZraises
ValueErrorr   ranger   Z
set_levels)msgr   r   r   r   test_duplicate_multiindex_codesO   s   ("r3   )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s)J |j| d ddd |j| d | d gddgd}|j| ksIJ d S )	Nr   r   r$   r   T)r"   Zinplacer   r#   )r   Zfrom_productr   rename)r   r   r   r   r   test_duplicate_level_names]   s   
r6   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s8J q'd S )	Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   levelscodes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 sJ tddgg dgg dg dgd}|j du s5J |jdu s<J td	d
gddggg dg dgd}|j du sUJ |jdu s\J td	d
gddggg dg dgd}|j du suJ |jdu s|J d S )NTFr   r   r7   r8   r9   r:   r   r4   )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}|r@d d<  fddt| D  t| D ]}d | d| | d  < q# t ddgdg7  n g|  t ddg  |g|  ddgg }t| d}|jrcJ |rwd	d
 }tt	|  t| d}n|j
 }t||d g }|jsJ d S )Ni  r   rA   c                    s   g | ]}   qS r   )copy).0ir<   r   r   
<listcomp>   s    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)rx   Ztilearanger1   arrayrepeatr   r>   r   mapvaluestolistrl   )ro   rq   r"   rt   r;   r   rz   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  rw   c                    s   g | ]}t j  qS r   )rx   randomchoice)rs   Zlevknr   r   rv      s    z)test_duplicated_large.<locals>.<listcomp>r:   r   )	rx   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 ]R}t	dd	D ]J}t
t	d
|t	d
|}t tdd | tdd | gtjt|jd}t||d |d  kseJ |jrjJ t| tjt|dd q/q(d S )N)e   f   r   g      @r   booldtyper      r&   rA   ZabcdeZWXYZr:   )r   r   rx   nanr>   r   r   r   Zzerosr1   r   r   r   ZpermutationTlen)r   r   r   mr<   r   r   r   test_duplicated2   s$   

r   c                  C   s0  t g dg df} tjg dtd}|  }t|| |jtks%J t g dg df}t	| 
 | tg d}| jdd	}t|| |jtksRJ t g d
g df}t	| j
dd	| tg d}| jdd	}t|| |jtksJ 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   rx   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   rx   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g d}tj| |gddgd}| }t ddtgdd}tg d	}tj||gddgd}t|| d S )
Nr   r   ZInt64r   )r   r   r$   r$   r   r4   r   )r   r   r$   )	r   r   rx   r|   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   numpyrx   r/   Zpandas._libsr   Zpandasr   r   r   r   Zpandas._testingZ_testingr   markZparametrizer   r!   r)   r3   r6   r@   rC   rn   r   r|   r   Zarm_slowr   r   r   Z	complex64Z
complex128r   r   r   r   r   r   <module>   sP    


&


