U
    >vf                     @   s|   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mZ d dlmZ d dlmZ G dd dZdS )    N)PerformanceWarning)CategoricalDtype	DataFrameIndex
MultiIndexSeries)BooleanDtypec                   @   s|   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
dd Zdd Zdd Z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-vdrwu74i/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   r0   F)Zdropnameindex)r   r   nanr   r   r   assert_frame_equal)r   r   resultexpectedr   r   r   test_multi_nan_indexing3   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   r0   r1   r2   r4   )	r   pdZNaTr   r6   r   r   r   r7   )r   r   r9   r   r   r   "test_exclusive_nat_column_indexingJ   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   r1   Zindex1index2namesr
   r   r   )c1c2r4   r@         ?T)deepr   rA   )r;   Zto_datetimer   r   r#   r   r   r6   copyr   r   r7   )r   dtiidxmir   r9   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   Ar2   z
2020-01-01r!   DB)Zperiodsfreqr3      r4   r   )r   ranger;   Z
date_ranger   Zfrom_productr   r   r   Zrandnr   r5   r   Zassert_index_equalrL   r$   )r   rF   rE   rG   r   r8   r   r   r   2test_multiindex_with_datatime_level_preserves_freqs   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>   r4   )r   r   r   r#   r   r7   )r   Zcomplex_dataZnon_complex_datar8   r9   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)rI   cat)rK   rQ   r4   rI   Appler   )r5   level)rR   rQ   )r   from_tuplesr   renamer   r7   )r   rG   r   mi2r9   r   r   r   &test_rename_multiindex_with_duplicates   s    

z:TestMultiIndexBasic.test_rename_multiindex_with_duplicatesc           
      C   s   t dtjgtjtjgg}t tjdgtjtjgg}tddg|d}tddg|d}||\}}t ddtjgtjtjtjgg}tdtjdg|d}ttjddg|d}	t|| t||	 d S )N     @T@g     T@r
   r   r4   rB   g       @r   r#   r   r6   r   Zalignr   assert_series_equal
r   Zmi1rV   Zser1Zser2Zresult1Zresult2rG   Z	expected1Z	expected2r   r   r   2test_series_align_multiindex_with_nan_overlap_only   s    "zFTestMultiIndexBasic.test_series_align_multiindex_with_nan_overlap_onlyc           
      C   s   t dtjgtjtjgg}t tjdgtjtjgg}tddg|d}tddg|d}||\}}t dtjgtjtjgg}tddg|d}tddg|d}	t|| t||	 d S )NrX   r
   r   r4   rY   r[   r   r   r   %test_series_align_multiindex_with_nan   s    z9TestMultiIndexBasic.test_series_align_multiindex_with_nanc                 C   s4   t ddgddggddgj }|dks0td S )Nr
   r   r   )r   r   r5   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   r0   )r   rZ   r   r   r#   r   )r   r   r   r   test_multiindex_repeated_keys   s    
 z1TestMultiIndexBasic.test_multiindex_repeated_keysc              	   C   sL   t dddgdddgddd	gd
}tjtdd |dg  W 5 Q R X d S )Nr
   r   r   r   r    r!      	   r   ))foo)bar)Nmissing_key)match)rd   )r   	from_dictpytestZraisesKeyErrorr   r   r   r   #test_multiindex_with_na_missing_key   s    z7TestMultiIndexBasic.test_multiindex_with_na_missing_keyc                 C   s   t jdgddgd}tdg|dd}|d }t|d	 jtsDttd
dgdd
ggddgddgddggdjt	ddgddd}t|d jt
std S )N)rI   rK   Zlvl1Zlvl2r>   value)columnscategoryrI   rK   r
   r   rb   locationr   r   TFboolean)dtype)boolsrp   )r   rT   r   Zastype
isinstancero   r   r$   Zassignr   r   )r   rk   r   Zdf_no_multiindexr   r   r   "test_multiindex_dtype_preservation   s    z6TestMultiIndexBasic.test_multiindex_dtype_preservationN)__name__
__module____qualname__r   r'   r:   r<   rH   rO   rP   rW   r\   r]   r^   r_   ri   rr   r   r   r   r   r	      s   

	r	   )Znumpyr   rg   Zpandas._libs.indexZ_libsr5   r"   Zpandas.errorsr   Zpandasr;   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.arrays.booleanr   r	   r   r   r   r   <module>   s   