U
    f/e9                     @   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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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d0d1 Zd2d3 Zd4d5 Zd6S )7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'   @/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/test_multilevel.pytest_reindex_level   s    z!TestMultiLevel.test_reindex_levelc                    s4   |  fdd}|d |d |d |d d S )Nc              	      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   )opnameopr$   r%   Zbroadcastedr&   r#   r'   r(   	_check_op6   s    


z3TestMultiLevel.test_binops_level.<locals>._check_opsubaddmuldivr'   )r!   r"   r/   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barr8   )iloclocr   r   )r!    multiindex_dataframe_random_dataframer&   Z	reindexedr'   r'   r(   test_reindexM   s    zTestMultiLevel.test_reindexc                 C   s   |}|j d d d }||}|j |ks,t|j| }|j |ksDt|j}|j|d}|j|ksdt|jd d |f }|j|kstd S )N
   r   )r   r   AssertionErrorr<   r    r   )r!   r"   r#   Z	new_indexchunkZymdTr'   r'   r(   test_reindex_preserve_levelsT   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>o       z7TestMultiLevel.test_groupby_transform.<locals>.<lambda>c                 S   s   | d S rE   r'   rG   r'   r'   r(   rI   p   rJ   Fr   )r   get_level_valuesr   applyr   r   r   r   )	r!   r=   r>   sZgroupergroupedZappliedr&   r%   r'   r'   r(   test_groupby_transformg   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 )Nr7   r:   bazr   r8   twoZthreelevelscodesnames   abcd)r   r   r   )r   r   r   randomZrandr   )r!   midxdfr'   r'   r(   test_groupby_cornert   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   rF   r5   rV               	   r@         rA   )r   c                 S   s   | d dkS )Nr   )rb   rc   r'   )ur'   r'   r(   rI      rJ   z:TestMultiLevel.test_groupby_level_no_obs.<locals>.<lambda>r   r   rb   rc   )
r   from_tuplesr   r<   r   mapr   r   allrB   )r!   r\   r]   Zdf1rN   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   rB   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   rF   r5   )r   r   )r   rF   )Br5   )datar   rV   rd   re   )Zr   )ru   rF   )r   r   rl   r   unionr   r   r   )r!   rH   yresZ	exp_indexexpr'   r'   r(   test_alignment   s       zTestMultiLevel.test_alignmentr-   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*   rG   r-   r|   r'   r(   rI      rJ   z:TestMultiLevel.test_series_group_min_max.<locals>.<lambda>)r   r|   r   )r   aggr   r   r   r*   
sort_indexr   )
r!   r-   r   r|   r}   Zseries_with_multilevel_indexZserrN   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   rF   rf   r   )r   r   r}   c                    s    |  t|  dS )N)r|   r   )appendr*   rG   r   r-   piecesr|   r'   r(   aggf   s    
z1TestMultiLevel.test_frame_group_ops.<locals>.aggf)r   r   r|   )r   r   )r   nanr;   r   rU   r    r   r   r   r   r   r*   r   Z	_get_axisrS   renameassert_index_equalr   )r!   r-   r   r   r|   r}   r=   r>   Z
level_namerN   r   r   r   Zlevel_indexr'   r   r(   test_frame_group_ops   s(    	
z#TestMultiLevel.test_frame_group_opsc              
      s   t tddttddg}ttjt	|d|d}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
|| qFd S )Nrd   r@   r   )r   r
   rV   c                    s   t |  dS )N)ddofr~   rG   r   methr'   r(   rI      rJ   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]   Zaltr%   r&   r'   r   r(   test_std_var_pass_ddof   s      z%TestMultiLevel.test_std_var_pass_ddofc              	   C   s^   |}|t kr|d }tt |jddgd}W 5 Q R X |jddgd }t|| d S )Nr   yearr   r   )r   r   r   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   rF   )r   r	   r   rK   r   r   rU   rB   )r!   r"   r#   r%   Zk1Zk2r&   result2r'   r'   r(   test_groupby_multilevel  s    z&TestMultiLevel.test_groupby_multilevelc                 C   s   d S )Nr'   )r!   r'   r'   r(   &test_groupby_multilevel_with_transform  s    z5TestMultiLevel.test_groupby_multilevel_with_transformc                 C   sD   t ddddg}ttjdd||d}|d|d< | }d S )	Nr6   )r7   rQ   r9   )r:   rQ   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r7   r:   r   )r7   rP   r   )r7   quxr   r   r   rF   )rS   rT   re   r   rV   z^\(\('foo', 'bar', 0\), 2\)$)match)r   rF   )r7   r:   )r7   rP   )r7   r   )r   r   r   r[   r   r   r<   r   Z	droplevelr   r   pytestZraisesKeyError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 )Nr7   r   r   r   r   rF   rf   rg   rh   r   r   )r   r;   r   r   r    r<   r   )r!   r=   r>   r%   r&   r'   r'   r(   $test_reindex_level_partial_selectionZ  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   rF   r5   )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_consistencym  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   r5   )r   rl   r   r   r   r   r   rB   )r!   Zidx_tpdtidxrM   r%   r'   r'   r(   test_duplicate_groupby_issues{  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 )NrH   r   rW   rX   )rW   rY   g        rA   )
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)   r4   r?   rD   rO   r^   ro   rr   r{   r   markZparametrizeAGG_FUNCTIONSr   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   rs   CrY   rX   rW   r   r   rF   colZint64)r   ZdtypeFTrV   rd   )rs   rW   )rs   rY   )r   rW   )r   rX   )r   r   ranger   r   Zis_monotonicrB   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   )Znumpyr   r   Zpandasr   r   r   r   Zpandas._testingZ_testingr   r   r   r   r'   r'   r'   r(   <module>   s(     {