U
    sVc8                     @   sX   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
 G dd dZG dd dZdS )    N)	DataFrame
MultiIndexSeriesc                   @   sd  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ddgejdddgejdddgdd  Z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d/d0 Zd1d2 Zejd3d4d3gd5d6 Zd7d8 Zd9d: 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FutureWarningsum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!   @/tmp/pip-unpacked-wheel-xj8nt62q/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_level%   s    


z TestMultiLevel.test_binops_levelc                 C   s0   |}|j ddg }|jddg }t|| d S )Nr      fooonebarr0   )iloclocr   r   )r    multiindex_dataframe_random_dataframer    Z	reindexedr!   r!   r"   test_reindex<   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   AssertionErrorr4   equalsr   r   )r   r   r   Z	new_indexchunkZymdTr!   r!   r"   test_reindex_preserve_levelsC   s    

z+TestMultiLevel.test_reindex_preserve_levelsc           	      C   sb   |}|d }|j d}|j|dd}|dd }|dd }||j }tj||dd d S )	Nr
   r   F)
group_keysc                 S   s   | d S N   r!   xr!   r!   r"   <lambda>^       z7TestMultiLevel.test_groupby_transform.<locals>.<lambda>c                 S   s   | d S r?   r!   rA   r!   r!   r"   rC   _   rD   r   )r   get_level_valuesr   applyr   r   r   r   )	r   r5   r6   sZgroupergroupedZappliedr    r   r!   r!   r"   test_groupby_transformV   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 )Nr/   r2   bazr   r0   twoZthreelevelscodesnames   abcd)r   r   r   )r   r   r   randomZrandr   )r   midxdfr!   r!   r"   test_groupby_cornerc   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)rY   s2)f2rZ   )r\   r[   )f3rZ   )r]   r[   r	   r@   r-   rP               	   r8         r9   )r   c                 S   s   | d dkS )Nr   )r\   r]   r!   )ur!   r!   r"   rC   z   rD   z:TestMultiLevel.test_groupby_level_no_obs.<locals>.<lambda>r   r   r\   r]   )
r   from_tuplesr   r4   r   mapr   r   allr:   )r   rV   rW   Zdf1rH   r   r!   r!   r"   test_groupby_level_no_obsm   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 )Nr^   )  r	   r`   )rj   r	   r8   )r   
isinstancer   r   r:   rh   )r   r   r   rW   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	   r@   r-   )r
   r	   )r
   r@   )Br-   )datar   rP   r^   r_   )Zr	   )ro   r@   )r   r   rf   r   unionr   r   r   )r   rB   yresZ	exp_indexexpr!   r!   r"   test_alignment   s       zTestMultiLevel.test_alignmentr   r   r	   skipnaTFsortc           
   	      sr   |}| |j ||d}| fdd}tt t| |d}	W 5 Q R X |rb|	j|d}	t||	 d S )N)r   rw   c                    s   t |  dS )N)rv   r)   rA   r+   rv   r!   r"   rC      rD   z:TestMultiLevel.test_series_group_min_max.<locals>.<lambda>)r   rv   r   )r   aggr   r   r   r)   
sort_indexr   )
r   all_numeric_reductionsr   rv   rw   Zseries_with_multilevel_indexZserrH   leftside	rightsider!   ry   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	   r@   r`   r   )r   r   rw   c                    s    |  t|  dS )N)rv   r   )appendr)   rA   r   r+   piecesrv   r!   r"   aggf   s    
z1TestMultiLevel.test_frame_group_ops.<locals>.aggf)r   r   rv   )r   r   )r   nanr3   r   rO   r   r   rz   r   r   r   r)   r{   Z	_get_axisrM   renameassert_index_equalr   )r   r|   r   r   rv   rw   r5   r6   Z
level_namerH   r   r}   r~   Zlevel_indexr!   r   r"   test_frame_group_ops   s*    
z#TestMultiLevel.test_frame_group_opsmethvarZstdc              	      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 )
Nr^   r8   r   rP   c                    s   t |  dS )N)ddofrx   rA   r   r   r!   r"   rC      rD   z7TestMultiLevel.test_std_var_pass_ddof.<locals>.<lambda>r   )r   r   r   )r   Zfrom_arraysr   ZarangerepeatZtiler   rU   randnlenr   r   r   r)   r   rz   r   r   )r   r   r   rW   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   r@   )r   Zmeanr   rE   r   r   rO   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 )	Nr.   )r/   rK   r1   )r2   rK   rP   )r   r   r	   )ZTotals )r   rf   r   r   rU   r   r   Z_consolidate)r   r   rW   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r/   r2   r   )r/   rJ   r   )r/   quxr   r   r	   r@   )rM   rN   r_   r   rP   z^\(\('foo', 'bar', 0\), 2\)$)match)r   r@   )r/   r2   )r/   rJ   )r/   r   )r   r   r   rU   r   r   r4   r   Z	droplevelr   r   pytestZraisesKeyErrorxsr   )r   r   Zseriesr6   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 )Nr/   r   r   r   r	   r@   r`   ra   rb   r   r
   )r   r3   r   r   r   r4   r   )r   r5   r6   r   r    r!   r!   r"   $test_reindex_level_partial_selectionK  s    z3TestMultiLevel.test_reindex_level_partial_selectionrT   rP   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 )	NrQ   rR   rS   r	   r@   r-   )rQ   rR   rS   rT   rL   )r   rQ   r   firstr   r   r   r   )r   rT   r>   rW   gr   r    r!   r!   r"   +test_empty_frame_groupby_dtypes_consistency^  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)rO   r   r-   )r   rf   r   r   r   r   r   r:   )r   Zidx_tpdtidxrG   r   r!   r!   r"   test_duplicate_groupby_issuesl  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 )NrB   r	   rQ   rR   )rQ   rS   g        r9   )
r   r   r   r   rf   ZdtypesrQ   rR   r   r   )r   rn   r   rW   r    r   r!   r!   r"   test_subsets_multiindex_dtype{  s    


z,TestMultiLevel.test_subsets_multiindex_dtypeN)__name__
__module____qualname__r#   r   markZparametrizer,   r7   r=   rI   rX   ri   rl   ru   r   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
   rm   CrS   rR   rQ   r   r	   r@   colZint64)r   ZdtypeFTrP   r^   )rm   rQ   )rm   rS   )r   rQ   )r   rR   )r   r   ranger   r   Zis_monotonic_increasingr:   r{   rf   r4   pdZ
IndexSlicer   r   )r   r   rW   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   )Znumpyr   r   Zpandasr   r   r   r   Zpandas._testingZ_testingr   r   r   r!   r!   r!   r"   <module>   s     z