U
    *if8                     @   sr   d dl Zd dlZd dlZd dlmZmZmZ d dlm	Z
 ddddddd	d
dddgZG dd dZG dd dZdS )    N)	DataFrame
MultiIndexSeriessumprodminmaxZmedianmeanZskewZmadstdvarZsemc                	   @   s  e Zd Zdd Zejdddddg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eejdddgejdddgejdddgd d! Zejdeejdddgejd"ddgejdddgejdddgd#d$ Zejd%d&d'gd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zejd4d5d4gd6d7 Zd8d9 Zd:d; Zd<S )=TestMultiLevelc              	   C   s   |}t t |jdd}W 5 Q R X |j|jdd}|jddtj}t 	|| |d j|jdd}|d jddtj}t j
||dd t t |jjddd}W 5 Q R X |j|jdd}|jddtjj}t 	|| d S )	Nmonthlevel   AFZcheck_namesaxisr   )columnsr   )tmassert_produces_warningFutureWarningr   reindexindexgroupby	transformnpassert_frame_equalassert_series_equalT)self/multiindex_year_month_day_dataframe_random_dataymd
month_sumsresultexpected r'   O/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/test_multilevel.pytest_reindex_level   s    z!TestMultiLevel.test_reindex_levelopnamesubaddmuldivc           	   	   C   s   |}t t|}tt |jdd}W 5 Q R X |||dd}|jddtj}|||}t	|| t t
|}||d |d dd}|d jddtj}||d |}d|_t|| d S )Nr   r   r   )getattrr   r   r   r   r   r   r   r   r   r   namer   )	r!   r*   r"   r#   opr$   r%   Zbroadcastedr&   r'   r'   r(   test_binops_level3   s    


z TestMultiLevel.test_binops_levelc                 C   s0   |}|j ddg }|jddg }t|| d S )Nr      fooonebarr6   )iloclocr   r   )r!    multiindex_dataframe_random_dataframer&   Z	reindexedr'   r'   r(   test_reindexJ   s    zTestMultiLevel.test_reindexc                 C   s   |}|j d d d }||}|j |ks,t|j| }|j |sFt|j}|j|d}|j|ksft|jd d |f }|j|std S )N
   r   )r   r   AssertionErrorr:   equalsr    r   )r!   r"   r#   Z	new_indexchunkZymdTr'   r'   r(   test_reindex_preserve_levelsQ   s    

z+TestMultiLevel.test_reindex_preserve_levelsc           	      C   s^   |}|d }|j d}||}|dd }|dd }||j }tj||dd d S )Nr   r   c                 S   s   | d S N   r'   xr'   r'   r(   <lambda>l       z7TestMultiLevel.test_groupby_transform.<locals>.<lambda>c                 S   s   | d S rD   r'   rF   r'   r'   r(   rH   m   rI   Fr   )r   get_level_valuesr   applyr   r   r   r   )	r!   r;   r<   sZgroupergroupedZappliedr&   r%   r'   r'   r(   test_groupby_transformd   s    
z%TestMultiLevel.test_groupby_transformc                 C   s\   t dgdgdggdgdgdggdddgd}ttjd	gd
dddg|d}|jdd d S )Nr5   r8   bazr   r6   twothreelevelscodesnames   abcd)r   r   r   )r   r   r   randomZrandr   )r!   midxdfr'   r'   r(   test_groupby_cornerq   s     z"TestMultiLevel.test_groupby_cornerc                 C   s   t ddddddg}tddd	d
ddgddddddgg|d}|jdd|jdd  }|jddd}| }|jddgk st	d S )N)f1s1)r_   s2)f2r`   )rb   ra   )f3r`   )rc   ra   r   rE   r3   rV               	   r>         r?   )r   c                 S   s   | d dkS )Nr   )rb   rc   r'   )ur'   r'   r(   rH      rI   z:TestMultiLevel.test_groupby_level_no_obs.<locals>.<lambda>r   r   rb   rc   )
r   from_tuplesr   r:   r   mapr   r   allr@   )r!   r\   r]   Zdf1rM   r%   r'   r'   r(   test_groupby_level_no_obs{   s    
(z(TestMultiLevel.test_groupby_level_no_obsc                 C   sJ   |}|d d j }|d |d< t|jts.t|d |d k sFtd S )Nrd   )  r   rf   )rp   r   r>   )r    
isinstancer   r   r@   rn   )r!   r"   r#   r]   r'   r'   r(   .test_setitem_with_expansion_multiindex_columns   s
    z=TestMultiLevel.test_setitem_with_expansion_multiindex_columnsc                 C   s   t dddgtdddgd}t dd	d
gtdddgd}|| }|j|j}|||| }t|| |d d d |d d d  }|j|j}|||| }t|| d S )Nr   rE   r3   )r   r   )r   rE   )Br3   )datar   rV   rd   re   )Zr   )ru   rE   )r   r   rl   r   unionr   r   r   )r!   rG   yresZ	exp_indexexpr'   r'   r(   test_alignment   s       zTestMultiLevel.test_alignmentr1   r   r   r   skipnaTFsortc           
   	      sn   |}|j ||d}| fdd}tt t| |d}	W 5 Q R X |r^|	j|d}	t||	 d S )N)r   r}   c                    s   t |  dS )N)r|   r/   rF   r1   r|   r'   r(   rH      rI   z:TestMultiLevel.test_series_group_min_max.<locals>.<lambda>)r   r|   r   )r   aggr   r   r   r/   
sort_indexr   )
r!   r1   r   r|   r}   Zseries_with_multilevel_indexZserrM   leftside	rightsider'   r   r(   test_series_group_min_max   s    z(TestMultiLevel.test_series_group_min_maxr   c              	      s  |}t j|jdddgf< t j|jdddgf< |jj| } dkrF|}n|j}|j| |d}	g  fdd}
|	|
}t	t
 t|| d}W 5 Q R X |r|j| d	}|j| d	}| j| |}t| | t| | t|| d S )
Nr   rE   rf   r   )r   r   r}   c                    s    |  t|  dS )N)r|   r   )appendr/   rF   r   r1   piecesr|   r'   r(   aggf   s    
z1TestMultiLevel.test_frame_group_ops.<locals>.aggf)r   r   r|   )r   r   )r   nanr9   r   rU   r    r   r   r   r   r   r/   r   Z	_get_axisrS   renameassert_index_equalr   )r!   r1   r   r   r|   r}   r;   r<   
level_namerM   r   r   r   Zlevel_indexr'   r   r(   test_frame_group_ops   s(    	
z#TestMultiLevel.test_frame_group_opsmethr   r
   c              	      s   t tddttddg}ttjt	|d|d}d  fdd}t
t t|d d d}W 5 Q R X |d jdd	|}t
|| t
t t|d d}W 5 Q R X |jdd	|}t
|| d S )
Nrd   r>   r   rV   c                    s   t |  dS )N)ddofr~   rF   r   r   r'   r(   rH      rI   z7TestMultiLevel.test_std_var_pass_ddof.<locals>.<lambda>r   )r   r   r   )r   Zfrom_arraysr   ZarangerepeatZtiler   r[   randnlenr   r   r   r/   r   r   r   r   )r!   r   r   r]   Zaltr%   r&   r'   r   r(   test_std_var_pass_ddof   s      z%TestMultiLevel.test_std_var_pass_ddofc              	   C   sZ   |}t ||}t t |jddgd}W 5 Q R X |jddgd }t || d S )Nyearr   r   )r   get_objr   r   r   r   Zassert_equal)r!   r"   Zframe_or_seriesr#   r%   r&   r'   r'   r(   test_agg_multiple_levels   s    z'TestMultiLevel.test_agg_multiple_levelsc                 C   s   |}|j ddgd }|jd}|jd}| ||g }tj||dd |jj|jjd d ksnt|j |jjd d d }t|| d S )Nr   r   r   Fr   rE   )r   r	   r   rJ   r   r   rU   r@   )r!   r"   r#   r%   Zk1Zk2r&   result2r'   r'   r(   test_groupby_multilevel
  s    z&TestMultiLevel.test_groupby_multilevelc                 C   sD   t ddddg}ttjdd||d}|d|d< | }d S )	Nr4   )r5   rP   r7   )r8   rP   rV   )r   r   r   )ZTotals )r   rl   r   r   r[   r   r   Z_consolidate)r!   r   r]   r'   r'   r(   test_multilevel_consolidate  s    
z*TestMultiLevel.test_multilevel_consolidatec              	   C   s  t dddgddggddddddgddddddggd}ttjd|d	}ttjdd
|d	}|d }|jd }|d d }|jd|_t	
|| t	
|| tjtdd |d  W 5 Q R X |jd }|d}|d d }|jd|_t	|| t	|| t dddgddggddddddgddddddggd}ttjd|d	}ttjdd
|d	}|d }|jd }|d d }|jd|_t	
|| t	
|| |jd }|d}|d d }|jd|_t	|| t	|| d S )Nr5   r8   r   )r5   rO   r   )r5   quxr   r   r   rE   )rS   rT   re   r   rV   z^\(\('foo', 'bar', 0\), 2\)$)match)r   rE   )r5   r8   )r5   rO   )r5   r   )r   r   r   r[   r   r   r:   r   Z	droplevelr   r   pytestZraisesKeyErrorZxsr   )r!   r   Zseriesr<   r%   r   r&   r'   r'   r(   test_level_with_tuples#  sL    





z%TestMultiLevel.test_level_with_tuplesc                 C   s   |}|j ddgdd}|jdddddd	g }t|| |jj ddgddd
}t||j |jddg }t|| |d jddg }t||d  |jjd d ddgf }t||j d S )Nr5   r   r   r   r   rE   rf   rg   rh   r   r   )r   r9   r   r   r    r:   r   )r!   r;   r<   r%   r&   r'   r'   r(   $test_reindex_level_partial_selectionS  s    z3TestMultiLevel.test_reindex_level_partial_selectionrZ   rV   c                 C   sx   dddg}t dgdgdg|gd}||jdk |}| j}tdgdgdggg g g gdddgd}t|| d S )	NrW   rX   rY   r   rE   r3   )rW   rX   rY   rZ   rR   )r   rW   r   firstr   r   r   r   )r!   rZ   Z
group_keysr]   gr%   r&   r'   r'   r(   +test_empty_frame_groupby_dtypes_consistencyf  s    

  z:TestMultiLevel.test_empty_frame_groupby_dtypes_consistencyc                 C   sZ   ddddg}ddddg}t j|ddgd}t||d}||j }t|d	ksVtd S )
N)600809Z20061231)r   Z20070331)r   Z20070630ZdemoZSTK_IDZRPT_Date)rU   r   r3   )r   rl   r   r   r   r   r   r@   )r!   Zidx_tpdtidxrL   r%   r'   r'   r(   test_duplicate_groupby_issuest  s    z,TestMultiLevel.test_duplicate_groupby_issuesc                 C   sP   ddgg}ddt jfdg}t|t|d}|jjj}|jjj}t	|| d S )NrG   r   rW   rX   )rW   rY   g        r?   )
r   r   r   r   rl   ZdtypesrW   rX   r   r   )r!   rt   r   r]   r&   r%   r'   r'   r(   test_subsets_multiindex_dtype  s    


z,TestMultiLevel.test_subsets_multiindex_dtypeN)__name__
__module____qualname__r)   r   markZparametrizer2   r=   rC   rN   r^   ro   rr   r{   AGG_FUNCTIONSr   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   r      s@   


'
0
r   c                   @   s   e Zd ZdZdd ZdS )
TestSortedz+everything you wanted to test about sortingc              	   C   s   t dddgdddggddd	ddd	gdd	dddd	gg}td
tt|i|dd}|jjdks`t| }|jjdksxttd
dddd	git ddddgdd}|j	t
jddddf d d f }t|| d S )Nr   rs   CrY   rX   rW   r   r   rE   colZint64)r   ZdtypeFTrV   rd   )rs   rW   )rs   rY   )r   rW   )r   rX   )r   r   ranger   r   Zis_monotonicr@   r   rl   r:   pdZ
IndexSlicer   r   )r!   r   r]   sortedr&   r%   r'   r'   r(   test_sort_non_lexsorted  s"     
$z"TestSorted.test_sort_non_lexsortedN)r   r   r   __doc__r   r'   r'   r'   r(   r     s   r   )numpyr   r   Zpandasr   r   r   r   Zpandas._testingZ_testingr   r   r   r   r'   r'   r'   r(   <module>   s(     t