U
    sVc}                     @   sl   d dl Zd dlZd dlm  mZ d dlmZ d dl	Z
d dl	mZmZmZmZ d dlmZ G dd dZdS )    N)PerformanceWarning)	DataFrameIndex
MultiIndexSeriesc                
   @   sN  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejddejfejejfgejejfdejfgddgddggdejfejejfgdejfejejfgddgddggfdejfejejfgejejfdejfgddgddggdejfejejfgdejfejejfgddgddggfgdd Zdd Zdd ZdS )TestMultiIndexBasicc              	   C   s   t ddddgddddgtjdddd	g}tt |jd
  W 5 Q R X |j	ddddg }tt |jd  W 5 Q R X d S )Nr      xzy   )jimjoeZjolier   r   )r   r
         )r   )
r   nprandomZrand	set_indextmZassert_produces_warningr   locZiloc)selfdf r   T/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/indexing/multiindex/test_multiindex.pytest_multiindex_perf_warn   s    


z-TestMultiIndexBasic.test_multiindex_perf_warnc                 C   sp   d}t j}dt _tt|tdg| t|f}|d dksFt|d dksVt|d d	ksft|t _d S )
Ni'  i N  a)r      r   )r      r   )r      r   )_indexZ_SIZE_CUTOFFr   r   Zaranger   from_arraysAssertionError)r   nZ
old_cutoffsr   r   r   (test_indexing_over_hashtable_size_cutoff"   s    &z<TestMultiIndexBasic.test_indexing_over_hashtable_size_cutoffc                 C   s   t ddtjdgddddgdd	tjd
gd}|jddgdd}t ddtjdgddddgdd	tjd
gdtddtjdgddtddddgddgd}t|| d S )NZR1ZR2ZR4C1C2C3C4
         r   bcr   r-   F)Zdropnameindex)r   r   nanr   r   r   assert_frame_equal)r   r   resultexpectedr   r   r   test_multi_nan_indexing1   s"    

z+TestMultiIndexBasic.test_multi_nan_indexingc                 C   s   t tjtjtjtjgddddgddtjdgd}|d	d
g}t dddtjdgittjtjtjtjgd	dtddddgd
dgd}t|| d S )Nr%   r&   r'   r(   r)   r*   r+   r,   r   r-   r.   r/   r1   )	r   pdZNaTr   r3   r   r   r   r4   )r   r   r6   r   r   r   "test_exclusive_nat_column_indexingH   s     
 	z6TestMultiIndexBasic.test_exclusive_nat_column_indexingc                 C   s   t dddg}tdddg}tj||gddgd}tdd	d
gtjtjtjgd|d}t|d ddtjgd|d}|jdd}d|j	|d dfdf< t
|| |jdd}d|j	|d dfgdf< t
|| d S )NZ20190101Z20190102r   r.   Zindex1index2namesr   r   r   )c1c2r1   r=   g      ?T)deepr   r>   )r8   Zto_datetimer   r   r    r   r   r3   copyr   r   r4   )r   dtiidxmir   r6   Zdf2Zdf3r   r   r   test_nested_tuples_duplicates^   s    $z1TestMultiIndexBasic.test_nested_tuples_duplicatesc                 C   sr   t tddd}tjddddd}t||g}ttj	d	d|d
}|j
d j}t|| |j|jksntd S )Nr   Ar/   z
2020-01-01r   DB)Zperiodsfreqr0      r1   r   )r   ranger8   Z
date_ranger   Zfrom_productr   r   r   Zrandnr   r2   r   Zassert_index_equalrH   r!   )r   rB   rA   rC   r   r5   r   r   r   2test_multiindex_with_datatime_level_preserves_freqq   s    zFTestMultiIndexBasic.test_multiindex_with_datatime_level_preserves_freqc                 C   sd   dddg}dddg}t |||d}|jdd	gd
d t d|itj||gddd}t|| d S )Ny      ?       @y      @      y      $@      r   r   r   )r	   r   r
   r	   r   T)Zinplacer
   )r	   r   r;   r1   )r   r   r   r    r   r4   )r   Zcomplex_dataZnon_complex_datar5   r6   r   r   r   test_multiindex_complex{   s"    

z+TestMultiIndexBasic.test_multiindex_complexc                 C   sV   t dddg}t|d}|jddidd}t dddg}t|d}t|| d S )	N)rE   cat)rG   rM   r1   rE   Appler   )r2   level)rN   rM   )r   from_tuplesr   renamer   r4   )r   rC   r   Zmi2r6   r   r   r   &test_rename_multiindex_with_duplicates   s    

z:TestMultiIndexBasic.test_rename_multiindex_with_duplicateszdata_result, data_expectedg     @T@g     T@r   r   c                 C   s  t |d }t |d }t|d |d}t|d |d}||}t |d }t |d }	t|d |d}
t|d |	d}|
j|
jjd d|
jjd dg|
_|j|jjd d|jjd dg|_t	|d |
 t	|d | d S )Nr   r   r   r1   r   float)
r   rP   r   Zalignr2   Z
set_levelslevelsZastyper   assert_series_equal)r   Zdata_resultZdata_expectedZa_index_resultZb_index_resultZa_series_resultZb_series_resultr5   Za_index_expectedZb_index_expectedZa_series_expectedZb_series_expectedr   r   r   Btest_subtracting_two_series_with_unordered_index_and_all_nan_index   s*    %
zVTestMultiIndexBasic.test_subtracting_two_series_with_unordered_index_and_all_nan_indexc                 C   s4   t ddgddggddgj }|dks0td S )Nr   r   r   )r   r   r2   Znuniquer!   )r   r"   r   r   r   test_nunique_smoke   s    $z&TestMultiIndexBasic.test_nunique_smokec                 C   sR   t tddgtddggjddddg tddddgtddddgg d S )Nr   r   r   r-   )r   rU   r   r   r    r   )r   r   r   r   test_multiindex_repeated_keys   s    
 z1TestMultiIndexBasic.test_multiindex_repeated_keysN)__name__
__module____qualname__r   r$   r7   r9   rD   rK   rL   rR   pytestmarkZparametrizer   r3   rV   rW   rX   r   r   r   r   r      sJ   

!
r   )Znumpyr   r\   Zpandas._libs.indexZ_libsr2   r   Zpandas.errorsr   Zpandasr8   r   r   r   r   Zpandas._testingZ_testingr   r   r   r   r   r   <module>   s   