o
    d                     @   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                   @   st   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S )TestMultiIndexBasicc                 C   s   t g dg dtjddddg}tt |jd  W d    n1 s*w   Y  |j	g d }tt |jd	  W d    d S 1 sLw   Y  d S )
N)r   r      r   )xr	   zy   )jimjoeZjolier   r   )r   r
   )   r      r   )r   )
r   nprandomZrand	set_indextmZassert_produces_warningr   locZilocselfdf r   d/app/.heroku/python/lib/python3.10/site-packages/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s#J |d dks+J |d d	ks3J |t _d S )
Ni'  i N  a)r      r   )r      r   )r      r   )_indexZ_SIZE_CUTOFFr   r   Zaranger   from_arrays)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g dddtjdgd}|jd	d
gdd}t ddtjdgg dddtjdgdtddtjdgd	dtg dd
dgd}t|| d S )NZR1ZR2ZR4ZC1ZC2ZC3Z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g d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g ddd	gd
}t|| d S )Nr%   r&   r'   r(   r)   r   r*   r+   r,   r.   )	r   pdZNaTr   r0   r   r   r   r1   )r   r   r3   r   r   r   "test_exclusive_nat_column_indexingH   s   	z6TestMultiIndexBasic.test_exclusive_nat_column_indexingc                 C   s   t g d}tg d}tj||gddgd}tg d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 )N)20190101r7   Z20190102)r   r   r+   Zindex1index2namesr   r   r   )c1c2r.   r<         ?T)deepr   r   r=   )r5   to_datetimer   r   r!   r   r   r0   copyr   r   r1   )r   dtiidxmir   r3   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s7J d S )Nr   Ar,   z
2020-01-01r   DB)Zperiodsfreqr-      r.   r   )r   ranger5   Z
date_ranger   Zfrom_productr   r   r   Zrandnr   r/   r   Zassert_index_equalrI   )r   rC   rB   rD   r   r2   r   r   r   2test_multiindex_with_datatime_level_preserves_freqq   s   zFTestMultiIndexBasic.test_multiindex_with_datatime_level_preserves_freqc                 C   s`   g d}g d}t |||d}|jddgdd t d|itj||gd	d
d}t|| d S )N)y      ?       @y      @      y      $@      )r   r   r   )r	   r   r
   r	   r   T)Zinplacer
   )r	   r   r9   r.   )r   r   r   r!   r   r1   )r   Zcomplex_dataZnon_complex_datar2   r3   r   r   r   test_multiindex_complex{   s"   z+TestMultiIndexBasic.test_multiindex_complexc                 C   sR   t g d}t|d}|jddidd}t g d}t|d}t|| d S )N))rF   catrH   rN   rO   r.   rF   Appler   )r/   level))rP   rN   rO   rO   )r   from_tuplesr   renamer   r1   )r   rD   r   mi2r3   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   r.   r>   g       @r   r!   r   r0   r   alignr   assert_series_equal
r   Zmi1rT   Zser1Zser2Zresult1Zresult2rD   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 )NrV   r   r   r.   rW   rZ   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sJ d S )Nr   r   r   )r   r   r/   Znunique)r   r"   r   r   r   test_nunique_smoke   s   $z&TestMultiIndexBasic.test_nunique_smokec              	   C   sF   t tddgtddggjg d tg dtg dg d S )Nr   r   r   r*   )r   r   r*   r*   )r   r   r   r   )r   rY   r   r   r!   r   )r   r   r   r   test_multiindex_repeated_keys   s   z1TestMultiIndexBasic.test_multiindex_repeated_keysc                 C   s\   t g dg dg dd}tjtdd |dg  W d    d S 1 s'w   Y  d S )Nr;   )r   r   r   )   	   r   ))Zfoo)bar)Nmissing_key)match)rb   )r   	from_dictpytestZraisesKeyErrorr   r   r   r   #test_multiindex_with_na_missing_key   s   "z7TestMultiIndexBasic.test_multiindex_with_na_missing_keyN)__name__
__module____qualname__r   r$   r4   r6   rE   rL   rM   rU   r[   r\   r]   r^   rg   r   r   r   r   r      s    

	r   )numpyr   re   Zpandas._libs.indexZ_libsr/   r    Zpandas.errorsr   Zpandasr5   r   r   r   r   Zpandas._testingZ_testingr   r   r   r   r   r   <module>   s    