U
    sVc+                    @   s  d dl m Z  d dlmZ d dlZd dlZd dlZd dlmZ d dl	Z
d dl	mZmZ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	d
 Zdd Zdd Zejdddgdd Z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#G dd  d Z$dS )!    )datetime)StringION)PerformanceWarning)	DataFrameIndex
MultiIndexPeriodSeries	Timedelta
date_range)reshapec                   @   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ejddddddgddddgddddgddddggejddddgddgdejd d!d"d#gd$dgdfd%ddddddddgddddddddgged&d'gdd(ejd)d*d+d,d-d.d/d0gd$ddgdfgd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZejdCedDedDfejdDdEdFejdDdGdEdFffdHdI ZdJdK Z dLdM Z!ejdNdOdPdQdRdSddDdTdUgej"dVdgej"dDdgfddTdUdd'dWdXdPdQgej"dDdgej"dVdgffdYdZ Z#ejd[d\dge$d$gd]d^ Z%d_d` Z&dadb Z'dcdd Z(ejdedfdggejdhe)e*ddidj Z+ejdee,-dkdldmgejdhe)e*d&ejdndodpgdqdr Z.dsdt Z/dudv Z0dwdx Z1dydz Z2d{d| Z3ejd}dOddd&d'gdOddd&gdOddd'gdOddgddd&gdd&d'gdOdgdOdgdOd&gdOgdgd'gd'd&dddOgd&dddOgd'dddOgdddOgd&ddgd'd&dgddOgddOgd&dOggejd~ddOddOdgddOgfdd Z4dd Z5ejdddgejde)de)dgdd Z6ejdddgejde)ddGdUdWdPddXgfe)dddXdWdPdGdUgfgdd Z7dd Z8ejddOdOddge9ddgdVdggfdOdOdd&ge9ddgdVdggfdOddd&ge9ddgdVdggfgdd Z:ejd~dOdgdd Z;ejd~dOdgdd Z<d$S )TestDataFrameReshapec              	   C   s   |rt nd }d}| }tj||d( tt|j|j|d d < W 5 Q R X |	 }t
||d}| }| }	t|| t|	d | |d}
|d}t|
j| t|d j| d S )Nz&will attempt to set the values inplacematch)foobarr   r   )DeprecationWarningcopytmassert_produces_warningnparangeprodshaper   stackr   unstackassert_frame_equalT)selffloat_frameusing_array_managerwarnmsgdfstackedZ
stacked_df	unstackedZunstacked_dfZunstacked_colsZunstacked_cols_df r&   I/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/frame/test_stack_unstack.pytest_stack_unstack   s    ,

z'TestDataFrameReshape.test_stack_unstackc                 C   s   t ddddgddgg}td|d |d d}| }tdt|d d d}t|| td|d t|dd  d}|d}tdt|d |d g|d d}t|| |ddg d}|ddg }t|| d S )	N   ab      r   indexcolumnsr/   )	ranger   r   r	   r   from_productr   assert_series_equalr   )r   levelsr#   resultexpectedr&   r&   r'   test_stack_mixed_level/   s      
  z+TestDataFrameReshape.test_stack_mixed_levelc                 C   sl   t ddtjgddtjgd}|dg }|d |d< |sLt|jjdksLt| }| }t	|| d S )Nr,   r-         @   xyr<   r=   )
r   r   NaNlen_mgrblocksAssertionErrorr   r   r4   )r   r    r#   df2resr7   r&   r&   r'   test_unstack_not_consolidatedF   s    
z2TestDataFrameReshape.test_unstack_not_consolidatedc           	      C   s  t ddddgtjd}tdddd	g|_|jd
d}tdd
dgddd
gddddgtjd}t	|| |jdd}tdddgdddgddddgt
d}t	|| tdddgdddgdddgdddgddddg}|jddgdd}d}|| }t dddg|j|d}t|| |ddg}|j|jj|_|tj}|j|j }t	|| |d }|jddgdd}|d }t	|| d S )Nr,   r-   r:      dtyper<   r*   r<   r+   r=   r+   zr*   
fill_valuer*   r+   r<   r=   rM   r/   rH         ?r*   r+   jkr   )r<   r=   rM   w)rV   r+   rT   )r/   namerV   )r	   r   int16r   from_tuplesr/   r   r   r   r   float	set_indexr4   r   Zreorder_levelsnamesastypeint64loc)	r   datar6   r7   r#   r%   keyr$   sr&   r&   r'   test_unstack_fillR   sJ    
    $z&TestDataFrameReshape.test_unstack_fillc                 C   sr  ddgddgddgddgg}t |td	tjd
}tddddg|_|jdd}ddddgddddgddddgg}t |tdtjd}tddddg|_t	
|| |d tj|d< |d tj|d< |jdd}|d tj|d< |d tj|d< t	
|| |jdd}ddddgddddgddddgg}t |tdtd}tddddg|_t	
|| d S )Nr,   r-   r)   r:   rF            ZAB)r0   rH   rI   rJ   rK   rL   rN   rO   xyzrR   Ar*   )ri   r+   )Br*   rj   r+   ri   rj   rS   )r   listr   int32r   rY   r/   r   r0   r   r   r]   rX   float64rZ   )r   rowsr#   r6   r7   r&   r&   r'   test_unstack_fill_frame   s2    
"
"
z,TestDataFrameReshape.test_unstack_fill_framec                 C   s   t dddj}t|}tddddg|_| }t|d tj	|d	 g|d
 |d tj	gddddgd}t
|| |j|d d}t|d |d |d	 g|d
 |d |d gddddgd}t
|| d S )N
2012-01-01r:   periodsrI   rJ   rK   rL   r   r)   r,   r-   rQ   r<   r=   rM   r1   rO   )r   valuesr	   r   rY   r/   r   r   pdNaTr   r   )r   Zdvr`   r6   r7   r&   r&   r'    test_unstack_fill_frame_datetime   s"    
(,z5TestDataFrameReshape.test_unstack_fill_frame_datetimec                 C   s   dd t dD }t|}tddddg|_| }t|d tj|d	 g|d
 |d tjgddddgd}t	
|| |j|d
 d}t|d |d
 |d	 g|d
 |d |d
 gddddgd}t	
|| d S )Nc                 S   s   g | ]}t |d qS ))days)r
   ).0ir&   r&   r'   
<listcomp>   s     zJTestDataFrameReshape.test_unstack_fill_frame_timedelta.<locals>.<listcomp>r:   rI   rJ   rK   rL   r   r)   r,   r-   rQ   r<   r=   rM   r1   rO   )r2   r	   r   rY   r/   r   r   ru   rv   r   r   )r   tdr`   r6   r7   r&   r&   r'   !test_unstack_fill_frame_timedelta   s"    
(,z6TestDataFrameReshape.test_unstack_fill_frame_timedeltac                 C   s   t dt dt dt dg}t|}tddddg|_| }t|d	 d |d
 g|d |d d gddddgd}t|| |j|d d}t|d	 |d |d
 g|d |d |d gddddgd}t|| d S )Nz2012-01z2012-02z2012-03z2012-04rI   rJ   rK   rL   r   r)   r,   r-   rQ   r<   r=   rM   r1   rO   )	r   r	   r   rY   r/   r   r   r   r   )r   rs   r`   r6   r7   r&   r&   r'   test_unstack_fill_frame_period   s.    
$z3TestDataFrameReshape.test_unstack_fill_frame_periodc              	   C   s   t ddddgdd}tdddd	g|_| }ttjtd
tddtjtdtdddtdd}t	
|| d}tjt|d |jdd W 5 Q R X |jdd}ttjtdtddtjtdtdddtdd}t	
|| d S )Nr*   r+   ccategoryrG   rI   rJ   rK   rL   Zaxaabc
categoriesZbcxrQ   rg   r1   z9Cannot setitem on a Categorical with a new category \(d\)r   drO   ZacaZbcc)r	   r   rY   r/   r   r   ru   Categoricalrl   r   r   pytestraises	TypeError)r   r`   r6   r7   r"   r&   r&   r'   #test_unstack_fill_frame_categorical   s.    
z8TestDataFrameReshape.test_unstack_fill_frame_categoricalc              	   C   s   t jdddgdddggddgd	}tdgd
 dgd
 d|d}|d}tddddddgddddddgddddddggt jddddddgd dgd	tdddgddd}t|| d S )Nr*   r+   r   r,   r-   r)   rh   rk   r\   	   r   er1   r   r*   r   r+   )r   r   r   r*   r   r+   )r   r   rW   r0   r/   )r   r3   r   r   rY   r   r   r   r   idxr#   r6   r7   r&   r&   r'   $test_unstack_tuplename_in_multiindex  s*     
,z9TestDataFrameReshape.test_unstack_tuplename_in_multiindexz>unstack_idx, expected_values, expected_index, expected_columnsrh   r,   r-   )r,   r)   )r,   r:   r-   r)   )r-   r:   rj   Cr   r   r   r   r   N)rh   rj   r)   r:   r   )r   r*   r,   )r   r*   r-   )r   r+   r,   )r   r+   r-   )r   r*   r,   )r   r*   r-   )r   r+   r,   )r   r+   r-   c           	      C   sl   t jddgddgddggddd	gd
}tdgd dgd d|d}||}t|||d}t|| d S )Nr*   r+   r,   r-   r)   r:   rh   rj   r   r   rf   r   r1   r   )r   r3   r   r   r   r   )	r   Zunstack_idxZexpected_valuesZexpected_indexZexpected_columnsr   r#   r6   r7   r&   r&   r'   *test_unstack_mixed_type_name_in_multiindex/  s    & 
  z?TestDataFrameReshape.test_unstack_mixed_type_name_in_multiindexc                 C   s   t dddgdddgtdddgdtjdd	d
tdtdddgdtdddgddtd	ddgdd}dd }|ddg}||d |ddg}||d |ddg}||d |d d!dg}||d! |d"d#g}||d" |ddg}|d# }||d d S )$NZILMIZNCr*   r+   r   r   r)   r,   r   Z20010102      ?g      I@g      Y@Zfloat32r9   g      @g      @rn   F   i2 Zint8)stater/   some_categoriesri   rj   r   DEFGHc                 S   s&   |  |g}|  |}t|| d S Nr   r   r   )r#   Zcolumn_nameZ
unstacked1Z
unstacked2r&   r&   r'   unstack_and_comparer  s    
zNTestDataFrameReshape.test_unstack_preserve_dtypes.<locals>.unstack_and_comparer   r/   r   r   r   r   rj   r   ri   )	r   r	   r]   r   randomZrandru   	Timestampr[   )r   r#   r   df1rb   r&   r&   r'   test_unstack_preserve_dtypes`  s8    





z1TestDataFrameReshape.test_unstack_preserve_dtypesc                 C   s   t ttjtddd}ttj	dd|d}t
|jddgd|jddjdd t
|jd	d
gd|jddjdd | }|jjtddd}|d kstt
|jddgd|jddjdd d S )Nr)   repeat      r0   r,   r-   levelrN   T)Zinplace)r   rY   rl   	itertoolsproductr2   r   r   r   randnr   r   r   r   r0   Z	set_namesrB   )r   r0   r#   Zdf_namedZreturn_valuer&   r&   r'   test_stack_ints  s    (  z$TestDataFrameReshape.test_stack_intsc              	   C   s  t jddddgdddgd}ttjd	d	|d
}|jddgd}|jddgd}| }dddg|j_	t
j|jddgd|dd t
j|jddgd|dd d}tjt|d |jddgd W 5 Q R X | }dddg|j_	t
j|jddgd|dd d S )Nri   catlongrj   r   r   ri   dogshortrj   r   r   expanimalhair_lengthr   r:   r   r   r,   FZcheck_nameszSlevel should contain all level names or all level numbers, not a mixture of the twor   r   )r   rY   r   r   r   r   r   r   r0   r\   r   r   r   r   
ValueError)r   r0   r#   animal_hair_stackedexp_hair_stackedrC   r"   df3r&   r&   r'   test_stack_mixed_levels  sD    	      z,TestDataFrameReshape.test_stack_mixed_levelsc                 C   s:  t jddddgdddgd}ttjd	d	|d
}|jddgd}|jddgd}|jddgd}| }dddg|j_	t
j|jddgd|dd t
j|jddgd|dd t
j|jddgd|dd | }dddg|j_	t
j|jddgd|dd t
j|jddgd|dd t
j|jddgd|dd d S )Nr   r   r   r   r   r   r   r   r:   r   r   r   r,   r-   Fr   )r   rY   r   r   r   r   r   r   r0   r\   r   r   )r   r0   r#   Zexp_animal_stackedr   r   rC   r   r&   r&   r'   test_stack_int_level_names  s\    	            z/TestDataFrameReshape.test_stack_int_level_namesc                 C   s|   t ddgtddgddggdgd}| }t tjdtjgtjdggtdddgtddgddggd}t	|| d S )	NFr*   r+   r   lcolr.   rG   )
r   r   from_arraysr   r   arraynanobjectr   r   )r   r#   rsxpr&   r&   r'   test_unstack_bool  s    z&TestDataFrameReshape.test_unstack_boolc                 C   s   t ddgddgddggddddgddddgddddggd	d
dgd}td|d}|ddgd}t ddgddggddddgddddggd	d
gd}ttjtjdgdtjgtjdgdtjggtjd|t	ddgddd}t
|| d S )Nr   r   ZoneZtwor*   r+   r   r,   firstsecondthirdr5   codesr\   r1   r-   rG   r   r.   )r   r	   r   r   r   r   r   r   rn   r   r   r   )r   mirb   r6   Zexpected_mir7   r&   r&   r'   test_unstack_level_binding  s*     " z/TestDataFrameReshape.test_unstack_level_bindingc           	   	   C   s   |  }t|tst|  j}t|| tddtj	gddtj	gd}t
dddg|_|  }td	d
gdddggddddddgddddddggd}tddtj	ddtj	g|d}t|| | }tdD ]}|  }qt|| d S )Nr,   r-   r9   r:   r;   r*   r+   r   r<   r=   r   r5   r   r)   r1   )r   
isinstancer	   rB   r   r   r   r   r   r>   r   r/   r   r4   r   r2   )	r   r   r`   Zundor6   midxr7   Zold_data_r&   r&   r'   test_unstack_to_series  s"    

z+TestDataFrameReshape.test_unstack_to_seriesc                 C   s  ddddgddddgddddgddddgg}t |tdd}|j}ttdgd tdd}t|| |d	d
g}|	d
}|j}ttdgd t
jddddgddddggddd}t|| |d	d
g}d|d< |	d
}|j}ttdgd tdgd  t
jddddgddddggddd}t|| d|d< |	d
}|j}ttdgd tdgd  t
jddddgddddggddd}t|| d S )Nr,   r)   r:   r-   ABCDr   r^   r1   ri   rj   r   r   )Nrj   r   r9   rn   r   r   )r   rl   dtypesr	   r   rH   r   r4   r[   r   r   r   )r   ro   r#   r6   r7   rC   r   r&   r&   r'   test_unstack_dtypes3  sN    ,
 
 
 z(TestDataFrameReshape.test_unstack_dtypeszc, drF   Zf8rG   
   c                 C   s   t dgd ||tdddd}|jd d jdd}|d	d
g}|d d|d< |jd d d}|d	d
gd}|d d|d< |jdkstt	
|| d S )Nr*   rF   rq   rr   )ri   r   r   rj   r)   T)deepri   rj   r   r^   r   )r   r*   )r)   r-   )r   r   ilocr   r[   r]   r   r   rB   r   r   )r   r   r   r#   rightleftr&   r&   r'   test_unstack_dtypes_mixed_date`  s    	
	z3TestDataFrameReshape.test_unstack_dtypes_mixed_datec              	   C   sx   t jddgddgd}tddg|d}d}tjt|d	 |d W 5 Q R X tjt|d	 |jd W 5 Q R X d S )
NrQ   )r   r   c1r   r,   r-   r1   z5The name c1 occurs multiple times, use a level numberr   )	r   rY   r   r   r   r   r   r   r   )r   r   r#   r"   r&   r&   r'   #test_unstack_non_unique_index_names~  s    z8TestDataFrameReshape.test_unstack_non_unique_index_namesc           	      C   s`  t dgddddggd d }tddggd	 |d
}| }t ddgdddgg}tddddddggdg|d}t|| |jjd |jd k st	dddgdddd	gg}ddddgddddgg}t ||}t
ddd}tt
||d g|d
}| }tt
j|d |d d gdd|d}t|| |jjd |jd k s\t	d S )Nr*   ri   rj   r   r   rN   r,   r   r)   r1   r.   re   r-   r:   axisr   )r   r3   r   r   r   r   r0   r5   allrB   r   r   r   Zconcatenate)	r   r   r#   r6   Zexp_colr7   r5   r   blockr&   r&   r'   test_unstack_unused_levels  s&     
 z/TestDataFrameReshape.test_unstack_unused_levelsz"level, idces, col_level, idx_levelr         rd   r   rf      r*         c                 C   s   dddgddddgg}dd	ddgddd	dgg}t ||}td
}t|dd|d}	|	j|d}
tdtj }|||< t ddg|g}t|dd||d}t	
|
| d S )Nr*   r-   r   r,   r)   rF   re   r   rN   rf   r:   r1   r      rd   r.   )r   r   r   r   r   r   zerosr   r3   r   r   )r   r   ZidcesZ	col_levelZ	idx_levelr5   r   r   r`   r#   r6   Zexp_datacolsr7   r&   r&   r'   )test_unstack_unused_levels_mixed_with_nan  s    

z>TestDataFrameReshape.test_unstack_unused_levels_mixed_with_nanr   ri   c                 C   s   t dddgdddggddd	gd
}|jddd	gdd}|jtd td df|f }| }|jdg | }tj|jdggd d	gd|_|j	
d	|_	t|| d S )Ni  r*   Ii  r+   ZIIri   rj   r   r   F)Zdropr   r   )r   r[   r_   slicer   r   r   r3   r0   r/   	droplevelr   r   )r   r   r#   indZ	selectionr6   r7   r&   r&   r'   test_unstack_unused_level  s    "
 z.TestDataFrameReshape.test_unstack_unused_levelc                 C   s   t dggtjdggdgdtjdddddddggddddd	d
dgdd}|dddd	d
dg}t dggtjdddddddggddddd	d
dgdtdgddd}t|| d S )Nr,   r   r   r   i1i2i3i4Zi5Zi6Zi7r   r   )r   r   rY   r   r   r   r   r   r#   r6   r7   r&   r&   r'   test_unstack_long_index  s$    z,TestDataFrameReshape.test_unstack_long_indexc                 C   s~   t ddgddggtjddgddggddgdtjdd	d
gdd	dggdddgdd}|ddgjjdd  ddgksztd S )N        rj   r   r   r   c2r   r      r   (   r   r   r   r   r   )r   r   rY   r   r0   r\   rB   r   r#   r&   r&   r'   test_unstack_multi_level_cols  s      	z2TestDataFrameReshape.test_unstack_multi_level_colsc              
   C   s   t ddgddgddgddggtd	d
dgdddggtjdddgdddgdddgdddggdddgdd}|ddg}|dgdg}t|| d S )Nr,   r-   r)   r:   rN   r   r*   r+   r   r   r   fm1ZP3   ZA5o   m2r   r   r   r   r   )r   r   rY   r   r   r   r   r&   r&   r'   &test_unstack_multi_level_rows_and_cols  s    z;TestDataFrameReshape.test_unstack_multi_level_rows_and_colsr   jimjoe)r  r  levc                 C   s0  dd }t ddtjdgdddd	gd
dddgd}|ddg d }|ddg d j}t|| |t|}|j|d}|	 j
 t|kstdd }	|d 	 j
 \}
}t|
|D ]b\}}t|d j||f d}|	|d j| |	|d j|  }tt||}||kstqd S )Nc                 S   s   | | krdn| }|dS N 1r&   valZval_strr&   r&   r'   cast  s    z:TestDataFrameReshape.test_unstack_nan_index1.<locals>.castr*   r+   r   rV   r<   r=   rM   za.wzb.xz .yzd.z)r  r  jolier  r  r  r   c                 S   s   t | trt| S | gS r   r   tuplerl   r*   r&   r&   r'   <lambda>      z>TestDataFrameReshape.test_unstack_nan_index1.<locals>.<lambda>.)r   r   r   r[   r   r   r   r   rl   notnart   sumr?   rB   nonzerozipsortedr   splitr/   r0   map)r   r   r  r  r#   r   r   r   udfmk_listro   r   rz   rT   r&   r&   r'   test_unstack_nan_index1  s(    

$z,TestDataFrameReshape.test_unstack_nan_index11st2nd3rdr   4th5thc                    s  dd  t dgd tjgd  dgd  dgd  d	gd  d
gd  dgd dgd  tjgd  dgd  tjgd  dgd  tjgd  ddddddddddddddddddd d!gd"}|j fd#d$d%d&|j fd'd$d%d& |d(< |d)< |t|}|j|d*}| j	 dt
| ks2td+d$ }||  j \}}	t||	D ]f\}
}t|| j|
|f d,}||| j|
 ||| j|  }tt |}||ksZtqZd S )-Nc                 S   s   | | krdn| }|dS r  r&   r  r&   r&   r'   r  !  s    zATestDataFrameReshape.test_unstack_nan_index_repeats.<locals>.castr   r)   rF   r*   r-   r   r   r+   r=   rV   rM   r:   r<   C   '   5   H   9   P      r   r   r   ;   2   >   L   4      <   3   )r+  r,  r-  c                    s   d t | S )Nr   )joinr'  rr  r&   r'   r  N  r  zETestDataFrameReshape.test_unstack_nan_index_repeats.<locals>.<lambda>r,   r   c                    s   d t | jd d d S )Nr   rN   )r?  r'  r   r@  rB  r&   r'   r  O  r  r.  r/  r   c                 S   s   t | trt| S | gS r   r  r  r&   r&   r'   r  U  r  r   )r   r   r   applyr[   rl   r   r!  rt   r"  r?   rB   r#  r$  r%  r   r&  r/   r0   r'  )r   r   r  r   r#   r   r(  r)  ro   r   rz   rT   r   r   r&   rB  r'   test_unstack_nan_index_repeats  s|    



) $z3TestDataFrameReshape.test_unstack_nan_index_repeatsc              	   C   sr  t tdtdtdd}tj|jd< |ddgd}ddd	d
tjtjtjtjgtjtjtjtjddddgg}tt	tt
| }ttjdd	d
ddddgdd}tdgddggddgdd	ggd dgd}t |||d}t|| t tdttdd
 tdd}tj|jd< |ddgd}d
tjgddgd	dgtjdgddgg}tdgddggddgdd	ggd dgd}ttjdd	d
dgdd}t |||d}t|| t tdttdd
 tdd}tj|jd< |ddgd}dtjgddgd	dgd
dgtjdgg}tdgddggddgdd	ggd dgd}ttjdd	d
dgdd}t |||d}t|| d S )NZaaaabbbbrf   ri   rj   r   r)   r,   ri   rj   r   r)   r,   r-   r:   rF   rd   re   r   r   r*   r+   r   r   )r-   r,   )r   rl   r2   r   r>   r   r[   r   r   r'  r$  r   r   r   r   )r   r#   r   valsr   r   r   r&   r&   r'   test_unstack_nan_index2]  sN      $&  $&  z,TestDataFrameReshape.test_unstack_nan_index2c              	   C   s
  t tdtddd d tdd}tj|jd< |d	d
g	 }t
ddddtjdgtjdddddgg}tddgd	d}tdgtdddgddddddgddddddggd d
gd}t |||d}|r|jddddg }|| |d j||< t|| d S )NZ
aaaaabbbbbrq   rF   rr   r-   r   rE  rF  ri   rj   r)   r   r,   r:   rd   re   rf   r   r*   r+   r   r   rN   r   r   )r   rl   r   tolistr   r   r>   r   r[   r   r   r   r   r   r0   r]   rH   r   r   )r   r    r#   r   rG  r   r   r   r&   r&   r'   test_unstack_nan_index3  s(    *z,TestDataFrameReshape.test_unstack_nan_index3c              	   C   sV  dt jt jdgddt jdgddt jdgddd	d
gddd	d
gddd	d
gg}t|ddddgddddddgd}| dddg }t jt jdt jdgddt jdt jgg}tdd
gd	ggddgddggddgd}tdgdddddggdddddgdddddggd dgd}t|||d}t|| |j	dd   dddg}t| | d S )NZHgi(Ur  ZPbg	VZ>ZSng@>g]K=?i)=(ZAgga2U0*#ZagentZchangeZdosageZs_idioC  ipC  iqC  irC  isC  itC  r   r   r,   rN   r   r-   r)   r:   )
r   r   r   r   r[   r   r   r   r   r_   )r   rG  r#   r   r   r   r   r&   r&   r'   test_unstack_nan_index4  s<    



z,TestDataFrameReshape.test_unstack_nan_index4c                 C   s  t ddddddgtdddddtd tjdd dd	}|d
 td |d< tj	 |j
d< |j
d< tj	 |j
d< |j
d< |dd
dgd
dg}| j dt| kstdD ]F}| D ]8\}}|d ||d
 |d ff}|| |j
| kstqqd S )Nr,   r-   z
2014-02-01rd   r   )rs   freqd   r   )r+  r,  r  r  r,  z
2014-02-02r-  )r,   r,  )r)   r,  )r,   r-  )r:   r-  r+  r  )r   r   r   r   r   r   roundru   r   r   r_   r[   r   r!  rt   r"  r?   rB   Ziterrows)r   r#   r   r   r   rA  ra   r&   r&   r'   test_unstack_nan_index5  s     	z,TestDataFrameReshape.test_unstack_nan_index5c                 C   sz   t ddd}tddddgt|ddfgd}| }td	d
g}t|dfg}tddddg||d}t|| d S )Ni  r,   r-   r)   r:   ri   rj   r   )r   r,   r-   r)   )rj   r.   )r   r   r   rY   r   r3   r   r   )r   tr#   r6   ZeidxZecolsr7   r&   r&   r'   %test_stack_datetime_column_multiIndex  s    "z:TestDataFrameReshape.test_stack_datetime_column_multiIndexmultiindex_columnsr   rN   c                 C   s   t jdddddgddgd}|| }ttd	t| d	t||d
}|j|dd}t|t	r|j|dd}t|t
rt|| nt|| t j|j |jjd|_|j|dd}t|t
rt|| nt|| d S )Nrj   r<   rj   rM   ri   r=   r   r<   r   uUpperLowerr   r)   r   F)r   dropnaT)r   rY   r   r   r   r?   r   r   r   intr	   r   r4   r   r0   to_numpyr\   )r   rS  r   full_multiindexZ
multiindexr#   r6   r7   r&   r&   r'   test_stack_partial_multiIndex  s.    

 
z2TestDataFrameReshape.test_stack_partial_multiIndexc              	   C   s   t jdddddgddgd}ttd	d
d|dddg d}|jdd}tdd
gdtjgddgdtjggt ddgddddggddddgddddggd dgdtddgddd}|d 	|j
d |d< t|| d S )NrT  rU  rV  rW  rX  rZ  r[  r   rd   r-   r)   r   r,   r   Fr\  rF   r:   rY  r<   r=   rM   r   rj   r   r   r.   )r   rY   r   r   r   r   r   r   r   r]   r   r   r   )r   r_  r#   r6   r7   r&   r&   r'   test_stack_full_multiIndex*  s"    $	z/TestDataFrameReshape.test_stack_full_multiIndexorderedFTlabelsZyxzZyxyc                 C   sb   t j|td|d}tdddgg|d}| }t|j|g}tdddg|d}t	
|| d S )Nrg   r   rc  r   r   r   r   r1   )ru   CategoricalIndexrl   r   r   r   r3   r/   r	   r   r4   )r   rc  rd  cidxr#   r6   r   r7   r&   r&   r'   %test_stack_preserve_categorical_dtype>  s    z:TestDataFrameReshape.test_stack_preserve_categorical_dtypezlabels,datarg   r<  Zzyxc                 C   s   t j|t||d}t jddg|d}t||g}tt|g|d}|ddg}t jt||d}	t|tdg|	|gd}
t	||
 d S )	Nre  rY  v)rc  r   r   r,   r1   )
ru   rf  r%  r   r3   r   r   r	   r   r4   )r   rc  rd  r`   rg  Zcidx2r   r#   r6   Zs_cidxr7   r&   r&   r'   +test_stack_multi_preserve_categorical_dtypeM  s    
z@TestDataFrameReshape.test_stack_multi_preserve_categorical_dtypec                 C   st   t ddddg}t||d}| }tddddgd	d
gg}tt ddddddddg|d}t|| d S )Nr*   r+   r   ri   rj   r   r,   r-   r)   ri   rj   r1   )	ru   r   r   r   r   r3   r	   r   r4   )r   r   r#   r6   r/   r7   r&   r&   r'   ,test_stack_preserve_categorical_dtype_valuesb  s     zATestDataFrameReshape.test_stack_preserve_categorical_dtype_valueszindex, columnsr+   c           	      C   st   t ||dd}| }t|j }t | ||jd}t	|| t
|jj}t
|j}t|| d S )Nr.   r,   )r   fillnar   r   rY   r/   r^  r0   r   r   r   Zasarrayr   Zassert_numpy_array_equal)	r   r/   r0   r#   r$   	new_indexr7   Zstacked_codesZexpected_codesr&   r&   r'   )test_stack_multi_columns_non_unique_indexm  s    
  z>TestDataFrameReshape.test_stack_multi_columns_non_unique_indexc                 C   s   t jdddgddgd}ttjddd gd	d
tdddgd|d}|j|d}|tj|d}t	|j
jgd |jjgd  |jd}t|j| t|t| d S )N)ri   r   ri   r,   )rj   r,   r*   r+   r   r   r,   ZInt64rG   rk  r1   r   r-   )r   rY   r   ru   r   r   r   r]   r   r	   ri   rH   rj   r0   r   r4   r   r   )r   r   r/   r#   r6   r7   Zexpected_dtypesr&   r&   r'   "test_unstack_mixed_extension_types  s     z7TestDataFrameReshape.test_unstack_mixed_extension_typesbazc                 C   s   t jdgddggddgd}tddgdd	gg|d
dgd}d|j_td	dddggt jddddgddgdd}d|j_| jddj	d|d}t
|| d S )Nr   r   r   r   rr  r   r-   r,   r)   rj   ri   r.   r   )r   ri   )r   rj   )r   ri   )r   rj   r   r   )r   r   )r   r3   r   r0   rW   rY   r/   r   	swaplevel
sort_indexr   r   )r   r   r   r#   r7   r6   r&   r&   r'    test_unstack_swaplevel_sortlevel  s    
 z5TestDataFrameReshape.test_unstack_swaplevel_sortlevel)=__name__
__module____qualname__r(   r8   rE   rc   rp   rw   r}   r~   r   r   r   markparametrizer   rY   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rl   r2   r*  r   permutationsrD  rH  rJ  rL  rP  rR  r`  rb  rh  rj  rl  r3   ro  rq  ru  r&   r&   r&   r'   r      s  /%#*
 
&
"
*,)-

**

=+)



    

r   c                  C   s   t ddddgdd} tdddd	g| _|  }tdtjdgddtjgd
tdd}t	
|| | jdd}tdddgdddgd
tdd}t	
|| d S )Nr*   r+   r   r   rG   rI   rJ   rK   rL   rQ   rg   r1   r   rO   )r	   r   rY   r/   r   r   r   r   rl   r   r   )r`   r6   r7   r&   r&   r'   test_unstack_fill_frame_object  s     
  r|  c                  C   s   t tjdddgdgdgdgdddddgd	} | ddg }t tjddddggtdgdd
tddgdggddgddggd dgdd}t|| d S )Nz2017-08-27 01:00:00.709949+0000UTC)tzr*   r+   r   )	timestampr*   r+   r   r  r   r   r   r,   r   r.   )	r   ru   r   r[   r   r   r   r   r   )r#   r6   r7   r&   r&   r'   "test_unstack_timezone_aware_values  s&    
		r  c                  C   sn   t ddddd} td| iddd	gd
}| }t| tddd	gdggdddgdddggdd
}t|| d S )Nr   Z20180101Z20180103zAmerica/New_York)rM  startendr~  ri   r*   r+   r   r1   r   r,   r-   r   )r   r   r   r	   r   r   r4   )tsr#   r6   r7   r&   r&   r'    test_stack_timezone_aware_values  s    &r  r\  TFc                 C   s@   t tg g gg g gtjd}ttjdj| d}t|| d S )NrR   rG   ra  )r	   r   r   rn   r   r   r   r4   )r\  r7   r6   r&   r&   r'   test_stack_empty_frame  s    r  rP   c                 C   s8   t tjdj| dj|d}t tjd}t|| d S )NrG   ra  rO   )r   r   r^   r   r   r   r   )r\  rP   r6   r7   r&   r&   r'   test_stack_unstack_empty_frame  s    r  c               	   C   s2   d} t jt| d ttjd  W 5 Q R X d S )Nz'index must be a MultiIndex to unstack.*r   rG   )r   r   r   r	   r   r^   r   )r"   r&   r&   r'    test_unstack_single_index_series  s    r  c               	   C   s   t ddgddgddgddgdd	gd
} | ddddg} | jdgdd} | jdddjddd}| jddgdd}t ddddgddddggtddgddtjddddgd dddgdd}t|| d S )NZAliceZBobg      #@rf   FTr   femalemale)rW   scoreemployedkidsgenderrW   r  r  r  rO   r  g       @r   )r  r  Fr   )r  r  Tr   )r  r  Fr   )r  r  Tr   r   r.   )r   r[   r   r   r   rY   r   r   )r#   r7   r6   r&   r&   r'   test_unstacking_multi_index_df  s2    	
r  c                  C   s   t jddgddgd} tddddgg| d}|d}tdd	gdd
}t jddgd dgd}tddgddgg||d}t|| d S )Nr;   )r=   rM   r*   r   r,   r   r   r=   rM   r   )r   r<   )r   r=   r.   )r   r3   r   r   r   rY   r   r   )r0   r#   r6   Znew_columnsrn  r7   r&   r&   r'   2test_stack_positional_level_duplicate_column_names  s    
r  c                    s   t tddddgg}ttjdd|d  d tj d< | s`t	d	d
  j
jD s`t  }tj fddtdD tddd}t|| d S )NrF   ri   rj   r   r   r:   r1   r,   c                 s   s   | ]}|j j V  qd S r   )Zmgr_locsZis_slice_likery   r<   r&   r&   r'   	<genexpr>0  s     z5test_unstack_non_slice_like_blocks.<locals>.<genexpr>c                    s   g | ]} |   qS r&   )r   )ry   nr#   r&   r'   r{   4  s     z6test_unstack_non_slice_like_blocks.<locals>.<listcomp>)keysr   )r   r3   r2   r   r   r   r   r]   r^   anyr@   rA   rB   r   ru   concatr   r   )r    r   rD   r7   r&   r  r'   "test_unstack_non_slice_like_blocks)  s    &r  c                   @   s6  e Zd Zdd Zejdddddddgddddddggdd	d
dddgdddddgfdddddgdddddggdd	d
ddgddddgfdddddgdddddggdd	d
ddgddddgfgdd Zdd Zdd Z	ejde
ddddgeddgdddggeedddeeddgdge
ddddgeddgddggeedddedddgdgdgeddddgeddgddgddggeedddedddgdd dgedddgdgdggd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zejd+d,d-gd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC Z dDdE Z!dFdG Z"ejj#dHdI Z$ejdJe%j&'dKdL dMD ejdNe(ddOdP Z)dQdR Z*dSdT Z+dUdV Z,dWdX Z-dYdZ Z.d[d\ Z/d]d^ Z0d_d` Z1dadb Z2dcdd Z3dedf Z4dgdh Z5dS )iTestStackUnstackMultiLevelc                 C   s6   |}|  }|   |t   |tj   d S r   )r   r]   r]  r   rm   r   /multiindex_year_month_day_dataframe_random_dataymdr%   r&   r&   r'   test_unstack9  s
    z'TestStackUnstackMultiLevel.test_unstackz5result_rows,result_columns,index_product,expected_rowr,   Ng      >@r-   ix1ix2Zcol1Zcol2Zcol3Zcol4c                 C   sp   t ||dddg}|jdd d}t |gtj|dd  |ggd dgdtdgddd}t|| d S )	Nr   r  r  r,   r-   r   r   r   )	r   r[   r   r   r   r3   r   r   r   )r   Zresult_rowsZresult_columnsZindex_productZexpected_rowr6   r7   r&   r&   r'   test_unstack_partialF  s     z/TestStackUnstackMultiLevel.test_unstack_partialc                 C   sR   t ddddg}ttjd|d}|ddg}|jdd	d
}t	|| d S )N)r   r   r   )r   r   r   )r,   rr  r,   )r,   Zquxr,   r:   r1   r,   r-   r   r   how)
r   rY   r	   r   r   r   r   r\  r   r   )r   r/   rb   r%   r7   r&   r&   r'   &test_unstack_multiple_no_empty_columnsq  s    
zATestStackUnstackMultiLevel.test_unstack_multiple_no_empty_columnsc           
      C   s  |}|  }| }t|| |jdd}| d}| }t|jdd| |d d d }| d}| dd}t|jdd| |dd}| djdddd}|ddd}t|jdd| |  }|jddd}| }t|| | d d}|d}|  }t|| |d}| d}t|| |d}|  d d}t|| | djd d d d d	f }|  }| }	t||	|j	 | dd
}| dd}t
|| d S )Nr-   r   r   rN   r,   r   F)r   Z	ascendingr)   r   )r   r   r   r   rt  rs  r_   r4   reindexr/   Zassert_equal)
r   r  r  r%   	restackedZunlexsortedr6   r7   r$   Zymd_stackedr&   r&   r'   
test_stack|  sJ    





z%TestStackUnstackMultiLevel.test_stackzidx, columns, exp_idxababr+  r,  r-  r*   r+   r)   r:   r   r   ))r*   r-   )r+   r,   )r*   r,   )r+   r-   rd   c           	      C   sp   t tddd||d}| }ttd|d}t|| |jj	dksRt
|j|j }}t|| d S )Nr   r:   r)   r.   r1   F)r   r   r   r   r   r	   r   r4   r/   Z	is_uniquerB   assert_index_equal)	r   r   r0   Zexp_idxr#   r6   r7   lirir&   r&   r'   test_stack_duplicate_index  s    &z5TestStackUnstackMultiLevel.test_stack_duplicate_indexc                 C   s@   d}t t|dddg}|d}| }t|| d S )Na  day,time,smoker,sum,len
Fri,Dinner,No,8.25,3.
Fri,Dinner,Yes,27.03,9
Fri,Lunch,No,3.0,1
Fri,Lunch,Yes,13.68,6
Sat,Dinner,No,139.63,45
Sat,Dinner,Yes,120.77,42
Sun,Dinner,No,180.57,57
Sun,Dinner,Yes,66.82,19
Thu,Dinner,No,3.0,1
Thu,Lunch,No,117.32,44
Thu,Lunch,Yes,51.51,17daytimeZsmokerr-   )ru   Zread_csvr   r[   r   r   r   r   )r   r`   r#   r6   reconsr&   r&   r'   test_unstack_odd_failure  s
    
z3TestStackUnstackMultiLevel.test_unstack_odd_failurec                 C   sr   |}|j }d|d< |jddd}| }|d   }tj|d |dd |jd ksZt|d jtj	ksntd S )Nr   )r   Zfourr,   )r   r   Fr   r   )
r   rt  r   r   r4   rW   rB   rH   r   Zfloat_)r    multiindex_dataframe_random_dataframer#   r$   r6   r&   r&   r'   test_stack_mixed_dtype  s    z1TestStackUnstackMultiLevel.test_stack_mixed_dtypec              
   C   s   t ddddddgddddddgddddddgd	d	d
d
d
dgtdd}|ddddgt}| }| }t	||
|jt d S )NZnaiveactiver*   r+   r,   r-   r)   r:   hiZbyeZpeaceg      @)r   r   barcoderi  extrar   r   r  ri  )r   r   r   groupbyrC  r?   r   r   r   r4   r  r/   r]   rZ   )r   r#   r6   r%   r  r&   r&   r'   test_unstack_bug	  s    
z+TestStackUnstackMultiLevel.test_unstack_bugc                 C   sP   |}|  }|jjdkst|jjddgks0t| }|jj|jjksLtd S )Nr   r   r   )r   r/   rW   rB   r0   r\   r   )r   r  r  r%   r  r&   r&   r'   !test_stack_unstack_preserve_names  s    z<TestStackUnstackMultiLevel.test_stack_unstack_preserve_namesmethodr   r   c              	   C   s|   |}|j d }tjtdd t||d W 5 Q R X |dkrx|jd d df }tjtdd t||d W 5 Q R X d S )Nr   zdoes not match index namer   Zmistaker   r   )r_   r   r   KeyErrorgetattrr   )r   r  r  r  r#   rb   r&   r&   r'   #test_stack_unstack_wrong_level_name$  s    
z>TestStackUnstackMultiLevel.test_stack_unstack_wrong_level_namec                 C   s*   |}| d}|j dd}t|| d S )Nr   r,   r   r   )r   r  r  r6   r7   r&   r&   r'   test_unstack_level_name7  s    
z2TestStackUnstackMultiLevel.test_unstack_level_namec                 C   sT   |}| d}|d}|  d}t|| |d}| }t|| d S )Nr   r   r   )r   r   r   r   r4   )r   r  r  r%   r6   r7   r&   r&   r'   test_stack_level_name>  s    


z0TestStackUnstackMultiLevel.test_stack_level_namec                 C   s2  |}| ddg}| d d}t|| |jj|jjksBt|d }| ddg}t||d  |ddg}|dddd}|jdd}t|| |j	j|j	jkst| ddg}| d dj
ddd	}t|| | ddg}| d dj
ddd	}t||jd d |jf  d S )
Nyearmonthri   r   r,   r-   r   r   r  )r   r   r   r0   r\   rB   r   rs  rt  r/   r\  r_   )r   r  r  r%   r7   rb   Zs_unstackedr  r&   r&   r'   test_stack_unstack_multipleJ  s&    z6TestStackUnstackMultiLevel.test_stack_unstack_multiplec              	   C   s>   |}| ddg}tjtdd |ddg W 5 Q R X d S )Nr  r  zlevel should containr   r   )r   r   r   r   r   r  r&   r&   r'   test_stack_names_and_numbersi  s    z7TestStackUnstackMultiLevel.test_stack_names_and_numbersc              	   C   sf   |}| ddg}tjtdd |ddg W 5 Q R X tjtdd |dd	g W 5 Q R X d S )
Nr  r  zToo many levelsr   r-   r)   znot a valid level numberr	  r  )r   r   r   
IndexErrorr   r  r&   r&   r'   !test_stack_multiple_out_of_boundst  s    z<TestStackUnstackMultiLevel.test_stack_multiple_out_of_boundsc              	   C   s   t jddddddgddd}tddgd	 d
d}ddd	dddg}t||g}t||d}| }|jdd}|jdd}t jdddgddd}	tdd	dgdddgd|	ddgd}
d
|
j_	t
||
 t
||
 t
||
j t jddddddgddd}t jddddddgddd}t||g}t||d}| }|jdd}|jdd}t jdddgddd}	t jddddddgddd}ttjtjtjtjddgtjtjdd	tjtjgddtjtjtjtjgg|	|d}
t
||
 t
||
 t
||
j d S )Nz2013-01z2013-02z2013-03MZperiodrM  rW   ri   rj   r)   strr   r,   r-   r:   rF   rd   r1   r   r   rk  r.   period12013-12z2013-112013-10z2013-09z2013-08z2013-07period2)ru   PeriodIndexr   r   r   r	   r   r   r0   rW   r   r   r   r   r   )r   idx1idx2valuer   rb   result1result2result3Ze_idxr7   e_colsr&   r&   r'   test_unstack_period_series  s|          
z5TestStackUnstackMultiLevel.test_unstack_period_seriesc                 C   s  t jddddddgddd}t jddddddgddd}d	d
ddddgddddd
d	gd}t||g}t||d}| }|jd	d}|jdd}t jddgddd}	t jddddddgddd}
td |
g}tdd	dd
dd	gdd
ddddgg|	|d}t|| t|| t jddddgddd}	t jdddgddd}
td |	g}tddd
dgd	d
ddgddd	dgg|
|d}t|| d S )Nz2014-01z2014-02r  r  r  r  r  r  r,   r-   r)   r:   rF   rd   rk  r1   r   r   zA A A B B Br.   zA A B B)	ru   r  r   r   r   r   r&  r   r   )r   r  r  r  r   r#   r  r  r  Ze_1Ze_2r  r7   r&   r&   r'   test_unstack_period_frame  s^    "  
       z4TestStackUnstackMultiLevel.test_unstack_period_framec              	   C   s   dgd dgd  }dgd dgd  }t dddgd }tjd	d
d}t||||d}|ddg}d|j_|	d}d}t
jt|d |d }	W 5 Q R X |	d}
|jd d dgf d d}d|j_t
|
| d S )Nr,   r)   r-   r*   r+   z
2013-01-03z
2013-01-04z
2013-01-05r   rN  rd   )IDNAMEDATEVAR1r  r  ZParamsz!The default value of numeric_onlyr   zW-THUr  )ru   Zto_datetimer   r   randintr   r[   r0   rW   r   r   r   FutureWarningZresampleZmeanr   r_   r   )r   Zid_colrW   dateZvar1r#   ZmultiZunstr"   Zdownr   r   r&   r&   r'   test_stack_multiple_bug  s    

$z2TestStackUnstackMultiLevel.test_stack_multiple_bugc                 C   sv   t ddgddgddgd}|ddg}| jd	d
}t|t| ksRt| jdd
}t||  d S )Na1a2b1b2r,   rE  ri   rj   Fra  T)	r   r[   r   r   r?   r\  rB   r   r   )r   r#   r$   r&   r&   r'   test_stack_dropna	  s    z,TestStackUnstackMultiLevel.test_stack_dropnac                 C   s   t ddddddddgddddddddgddddddddggddddgddddggd}dddg|j_ddg|j_|ddg d S )	Nr   r,   r.   r*   r+   r   r   r   )r   r/   r\   r0   r   r  r&   r&   r'   "test_unstack_multiple_hierarchical  s    	z=TestStackUnstackMultiLevel.test_unstack_multiple_hierarchicalc              	   C   s   d}t tjjd|dtjjd|dtjjdd|dtjjdd|dtjjd	|dtj|d
}|dddddg}|d d S )N  rN  )sizei,  ire   i   i  )ri   rj   r   r   r   r   ri   rj   r   r   r   )r   r   r   r  r   r[   r   )r   ZNUM_ROWSr#   Zidfr&   r&   r'   test_unstack_sparse_keyspace$  s    
z7TestStackUnstackMultiLevel.test_unstack_sparse_keyspacec                 C   s~   ddgddddgg}ddddgddddgg}t ||}ttjdd|d}| }t|jdksft|	 }t
|| d S )Nr   r,   r-   r)   r:   r1   )r   r   r   r   r   r   r?   r0   rB   r   r   r   )r   r5   r   r/   r#   r6   r  r&   r&   r'   test_unstack_unobserved_keys9  s    
z7TestStackUnstackMultiLevel.test_unstack_unobserved_keysc                 C   s   G dd dt j}| z}|t d| ttjddtdtdgd}d}t	j
t|d( tjtd	d |  W 5 Q R X W 5 Q R X W 5 Q R X d S )
Nc                       s"   e Zd Zdd fddZ  ZS )zaTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32.<locals>.MockUnstackerN)returnc                    s   t  j|| tdd S )NDon't compute final result.)super__init__	Exception)r   argskwargs	__class__r&   r'   r  N  s    zjTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32.<locals>.MockUnstacker.__init__)rv  rw  rx  r  __classcell__r&   r&   r  r'   MockUnstackerM  s   r  
_Unstackeri   r-   r1   z$The following operation may generater   r  )reshape_libr  contextsetattrr   r   r   r   r   r   r   r   r   r   r  r   )r   Zmonkeypatchr  mr#   r"   r&   r&   r'   /test_unstack_number_of_levels_larger_than_int32H  s    
zJTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32r5   c                 c   s*   | ]"}t jt d ddg|ddV  qdS )r   r,   r-   r   N)r   r   r{  )ry   widthr&   r&   r'   r  `  s   z$TestStackUnstackMultiLevel.<genexpr>r   	stack_levc                    s`   t |ddddgddddggd}t|tdgd  t fdd jD s\td S )Nr   r,   r   r:   )r0   r`   c                 3   sF   | ]>} j D ]2} j||f j|| f|d   f kV  qqdS )r,   N)r0   r_   ry   rowr   r#   Z
df_stackedr  r&   r'   r  l  s    zSTestStackUnstackMultiLevel.test_stack_order_with_unsorted_levels.<locals>.<genexpr>)r   r   r2   r   r   r/   rB   )r   r5   r  r0   r&   r  r'   %test_stack_order_with_unsorted_levels^  s     
z@TestStackUnstackMultiLevel.test_stack_order_with_unsorted_levelsc                    s   t dddgdddggttddttddgd}t|tdtdt| ddd t	 fd	d
 j
D s|td S )Nri   r   rj   r)   r   rF   rN   )r0   r/   r`   c                 3   sH   | ]@} j D ]4} j||f  d j||d  f|d f kV  qqdS )r   r,   N)r0   r_   r   r  r  r&   r'   r  ~  s    z]TestStackUnstackMultiLevel.test_stack_order_with_unsorted_levels_multi_row.<locals>.<genexpr>)r   r   r   r2   tiler   r   r?   r   r   r/   rB   )r   r   r&   r  r'   /test_stack_order_with_unsorted_levels_multi_rows  s      zJTestStackUnstackMultiLevel.test_stack_order_with_unsorted_levels_multi_rowc                 C   s   t d}t dd |D dd |D g}t|jddgd}d|j_d	|i}tj|d
d}ddg|j_	|j
t|jd
d}|ddgddg}tddgddgddgddgddggdd
dddgtjddgddgdd}t|| d S )NrF   c                 S   s   g | ]}d | qS )r+   r&   r  r&   r&   r'   r{     s     zVTestStackUnstackMultiLevel.test_stack_unstack_unordered_multiindex.<locals>.<listcomp>c                 S   s   g | ]}d | qS r  r&   r  r&   r&   r'   r{     s     r+   r*   r   r   r<   r,   r   r   Za0Zb0r  r  r  r  a3Zb3Za4Zb4r   r-   r)   r:   )r*   r<   )r+   r<   r   r.   )r   r   Zvstackr   r   r0   rW   ru   r  r\   r  r%  r   r   r   rY   r   r   )r   rt   r`   r#   Zsecond_level_dictZmulti_level_dfr6   r7   r&   r&   r'   'test_stack_unstack_unordered_multiindex  s,    
  zBTestStackUnstackMultiLevel.test_stack_unstack_unordered_multiindexc                 C   s^   |}d|d< d|d< | d}|d jtjks2t|d jtjksFt|d jtjksZtd S )	Nr   r   r-   r   r  rp  )r   r,   )r   r,   )r   rH   r   rn   rB   Zobject_r  r&   r&   r'   test_unstack_preserve_types  s    
z6TestStackUnstackMultiLevel.test_unstack_preserve_typesc                 C   sj  t t dd}t d}t|gd ddgg |gd t ddg d}tt d|d}| }|jd	ksxt|	 }t
|||j tddgg|gd  t ddg|gd  d}tt d|d}|d}|jd	kstt|gd
 ddgg |gd
  |gd
 t ddg |gd
  d}tt d|d}|d
}|jd	ksftd S )N  r-   rf   r   r,   r   r  r1   )r  r-   r:   )r   r   r   r   r   r	   r   r   rB   r   r   r4   r  r/   )r   r   r   r/   rb   r6   r$   r&   r&   r'   !test_unstack_group_index_overflow  s2    

$
z<TestStackUnstackMultiLevel.test_unstack_group_index_overflowc                 C   s   t dddgdddgdgd ddd	g}d
|d< |sLt|jjdksLt|d	}|d d|d< t ddddgtj	dddggt
ddgdddtjddddgd d	gdd}|r|d d|d< |d d|d< t|| d S )Nri   rj   cacbr   r)   )r*   r+   ri  r*   r+   r,   is_r-   )r	  r  r   g      $@r   r  r   )rH   rW   )ri  r  )ri  r  )r	  r  r   r.   r^   )r   r[   r?   r@   rA   rB   r   rm  r   r   r   r   rY   r]   r   r   )r   r    r#   r6   r7   r&   r&   r'   +test_unstack_with_missing_int_cast_to_float  s2    	

zFTestStackUnstackMultiLevel.test_unstack_with_missing_int_cast_to_floatc                 C   s   t ddddgddddgddddgddddgd}|dddg}d	d
dd g}|jj|dd|_|jj|dd|_|dd  j}td	d
dd gd	d
dd ggddddgddddggddgd}t|| d S )Nr,   r-   r)   r:   )L1L2L3r<   r  r  r  Zn1Zn2Zn3)r5   r   )r<   r,   r   r   )	r   r[   r/   Z
set_levelsr   rt  r   r   r  )r   r   Z
new_levelsr6   r7   r&   r&   r'   test_unstack_with_level_has_nan  s$    



z:TestStackUnstackMultiLevel.test_unstack_with_level_has_nanc              	   C   s   t tddgtdddddgd}|d	}t d
tjtjgtjd
d
gtjd
d
ggtdddgtdddgd}t	|| d S )Nr,   rF   )r   NN)r   r-   r   )r   r-   r,   )r   r)   r   )r   r)   r,   r   r-   r  )r   N)r   r   r   r,   )r   r-   )r   r)   r.   )
r   r   r   r   rY   r   r   r   r   r   r   r&   r&   r'   $test_stack_nan_in_multiindex_columns  s$    
"z?TestStackUnstackMultiLevel.test_stack_nan_in_multiindex_columnsc                 C   s   t dgd dgd  ttdttdg}ttddd|d}|	d	dg}td
tj
gtj
dgd	tj
gtj
dgdtj
gtj
dgdtj
gtj
dggddgt d
gd d	gd  ttdttdgd}t|| d S )Nri   r-   rj   r  Zccddrf   r:   r   r,   r   r)   rd   rF   re   ZaabbaabbZcdcdcdcdr   )r   r   ru   r   rl   r   r   r   r   r   r   r   r   )r   r   r#   r6   r7   r&   r&   r'   "test_multi_level_stack_categorical  s6    
z=TestStackUnstackMultiLevel.test_multi_level_stack_categoricalc                 C   s   t tdddtjdtjfdgddgdtdd	gd
dtjd}|	 }t dtjgtjd	gdtjgtjdggtddgddtjdtjfdd	tjfdgd
dgdd}t
|| d S )Nr:   r-   ri   rk   rZ  r[  r   r   r,   ZNumr   r0   r/   rH   r  g       @r9   rj   )r   r+   )r,   r+   r   )r   r   r   r   r   rY   r   r   rn   r   r   r   )r   Zdf_nanr6   r7   r&   r&   r'   test_stack_nan_level>  s&     " z/TestStackUnstackMultiLevel.test_stack_nan_levelc                 C   s   t dgddgg}tdtddgi|d}| }ttjdgddgdtjdgddgdd	dgd}t d
dg|_t	|| d S )Nri   r   r,   r   r*   r+   r1   r   r  )r   r   )r   r,   )
r   r3   r   ru   r   r   rY   r0   r   r   r   r&   r&   r'    test_unstack_categorical_columnsR  s    z;TestStackUnstackMultiLevel.test_unstack_categorical_columnsc           	      C   s   ddg}ddg}dddg}t j|||gdd	d
gd}ttt|}t||dgd}|d	d
g}|jd|_d|j	d d df< |
d	d
g }|jdd
d	d
g }t|| d S )NZITAZFRAA1A2ZCRTZDBTNETPAEVARTYPr   ZVALUE)r`   r/   r0   r   i'  )ZA0r  r,   r   )r   r3   rl   r2   r?   r   r   r0   r   r_   r   rt  r   r4   )	r   r  r  r  r   VZDFr6   r7   r&   r&   r'   test_stack_unsorteda  s    
z.TestStackUnstackMultiLevel.test_stack_unsortedc                 C   s   t jddgddggddgd}tdd	d
gdd}tddddgddddgddddgg}t|||t d}|d}|	tj
d	t }t|| ||jd  	t ||jd < |d}|	td}t|| d S )NZ54511Z54515rA  Zt_meanZstationelementr   r,   r-   r)   r  r   r8     r      r      i1     r  r  r   )r   r3   r   r   r   r   ru   Z
Int64Dtyper   r]   r^   r   r   r0   ZFloat64Dtyper   )r   r0   r/   Zarrr#   r6   r7   r&   r&   r'   test_stack_nullable_dtypes  s     (
"
z4TestStackUnstackMultiLevel.test_stack_nullable_dtype)6rv  rw  rx  r  r   ry  rz  r  r  r  rl   r   r   r   r   r   rY   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Zslowr  r   chainfrom_iterabler2   r  r  r  r  r  r
  r  r  r  r  r  r  r"  r&   r&   r&   r'   r  8  s   

8(	$


E/
% !r  )%r   ior   r   Znumpyr   r   Zpandas.errorsr   Zpandasru   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingr   Zpandas.core.reshaper   r  r   r|  r  r  ry  rz  r  r  r  r  r  r  r  r&   r&   r&   r'   <module>   s@   $	         
	