o
    ҷhGf                    @   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Zd dlm	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 ejdd	gd
dd ZG dd dZejdddgdd Z dd Z!dd Z"dd Z#ejddd	e	j$gdd Z%ejddd	e	j$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,G d,d- d-Z-d.d/ Z.dS )0    )datetime)StringION)lib)PerformanceWarning)	DataFrameIndex
MultiIndexPeriodSeries	Timedelta
date_range)reshapeTF)paramsc                 C   s   | j S N)param)request r   X/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/frame/test_stack_unstack.pyfuture_stack   s   r   c                   @   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g dg dg dg dgejg dddgdejg dddgdfdg dg dged d!gdd"ejg d#g d$dfgd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zejd7ed8ed8fejd8d9d:ejd8d;d9d:ffd<d= Zd>d? Z d@dA Z!ejdBdCg dDej"dEdFgej"d8dGgfdGg dHej"d8dGgej"dEdFgffdIdJ Z#ejdKdLdge$dgdMdN Z%dOdP Z&dQdR Z'dSdT Z(ejdUdVdWgejdXe)e*dFdYdZ Z+ejdUe,-g d[ejdXe)e*d ejd\d]d^gd_d` Z.dadb Z/dcdd Z0dedf Z1dgdh Z2didj Z3ejdkg dlg dmg dng dog dpg dqdCdGgdCdFgdCd gdCgdFgd!gg drg dsg dtg dug dvg dwdGdCgdFdCgd dCggejdxdydCdGdCdGgdGdCgfdzd{ Z4d|d} Z5ejd~ddgdd Z6ejd~ddgejde)dg dfe)dg dfgdd Z7dd Z8ejdg de9dGdFgdEdggfg de9dGdFgdEdggfg dme9dGdFgdEdggfgdd Z:ejddGdFgddgdddfdGdFgddgdddfgdd Z;ejdxdCdGgdd Z<ejdxdCdgdd Z=dS )TestDataFrameReshapec           
      C   s   |  }tt|j|j|d d < |j|d}t||d}| }| }t	
|| t	
|d | |d}|d}	t	
|j| t	
|	d j| d S )Nr   )foobarr   r   )copynparangeprodshaper   stackr   unstacktmassert_frame_equalT)
selffloat_framer   dfstacked
stacked_df	unstackedunstacked_dfunstacked_colsunstacked_cols_dfr   r   r   test_stack_unstack    s   "

z'TestDataFrameReshape.test_stack_unstackc                 C   s   t dg dddgg}td|d |d d}|j|d}tdt|d d d}t|| td|d t|dd  d}|jd|d}tdt|d |d g|d d}t|| |d	d
g jd|d}|d	d
g }t|| d S )N   )r-   ab      r   indexcolumnsr   r3   r.   r/   )	ranger   r   r
   r   from_productr    assert_series_equalr!   )r#   r   levelsr%   resultexpectedr   r   r   test_stack_mixed_level2   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< |s&t|jjdks&J | }| }t|| d S )Nr0   r1         @   xyr@   rA   )	r   r   nanlen_mgrblocksr   r    r8   )r#   using_array_managerr%   df2resr;   r   r   r   test_unstack_not_consolidatedI   s   
z2TestDataFrameReshape.test_unstack_not_consolidatedc           
      C   sx  t g dtjd}tg d|_|jdd}tg dg ddg d	tjd
}t	|| |jdd}tg dg ddg d	t
d
}t	|| tg dg dg dg ddg d	}|jddgdd}d}|| }t g d|j|d}t|| |jddg|d}|j|jj|_|tj}|j|j }t	|| |d }	|	jddgdd}|d }t	|| d S )N)r0   r1   r>      dtype)r@   r.   )r@   r/   )rA   r/   )zr.   
fill_value)r0   rO   rJ   )r1   r>   rO   r.   r/   r@   rA   rN   r3   rL         ?)r0   rU   rJ   )r1   r>   rU   r.   r.   r/   )jkrW   r   r0   r1   )r@   rA   rN   wr@   rA   r   )rZ   r/   rW   )r   r   r1   )r3   namer   rZ   )r
   r   int16r   from_tuplesr3   r   r   r    r!   float	set_indexr8   r   reorder_levelsnamesastypeint64loc)
r#   r   datar:   r;   r%   r(   keyr&   sr   r   r   test_unstack_fillU   sB   
z&TestDataFrameReshape.test_unstack_fillc                 C   sN  ddgddgddgddgg}t |td	tjd
}tg d|_|jdd}g dg dg dg}t |tdtjd}tg d|_t	
|| |d tj|d< |d tj|d< |jdd}|d tj|d< |d tj|d< t	
|| |jdd}g dg dg dg}t |tdtd}tg d|_t	
|| d S )Nr0   r1   r-   r>   rJ            AB)r4   rL   rM   rO   rP   )r0   r-   r1   r>   )rO   rJ   rO   ri   )rj   rO   rk   rO   xyzrT   )Ar.   )ro   r/   )Br.   rp   r/   ro   rp   rU   )rU   rJ   rU   ri   )rj   rU   rk   rU   )r   listr   int32r   r]   r3   r   r4   r    r!   rb   r\   float64r^   )r#   rowsr%   r:   r;   r   r   r   test_unstack_fill_frame   s2   z,TestDataFrameReshape.test_unstack_fill_framec                 C   s   t dddj}t|}tg d|_| }t|d tj	|d g|d |d tj	gd	g d
d}t
|| |j|d d}t|d |d |d g|d |d |d gd	g d
d}t
|| d S )N
2012-01-01r>   periodsrM   r   r-   r0   r1   rR   rS   r5   rP   )r   valuesr
   r   r]   r3   r   r   pdNaTr    r!   )r#   dvre   r:   r;   r   r   r    test_unstack_fill_frame_datetime   s"   (,z5TestDataFrameReshape.test_unstack_fill_frame_datetimec                 C   s   dd t dD }t|}tg d|_| }t|d tj|d g|d |d tjgd	g d
d}t	
|| |j|d d}t|d |d |d g|d |d |d gd	g d
d}t	
|| d S )Nc                 S   s   g | ]}t |d qS ))days)r   ).0ir   r   r   
<listcomp>       zJTestDataFrameReshape.test_unstack_fill_frame_timedelta.<locals>.<listcomp>r>   rM   r   r-   r0   r1   rR   rS   r5   rP   )r6   r
   r   r]   r3   r   r   r{   r|   r    r!   )r#   tdre   r:   r;   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g d|_| }t|d d |d g|d |d	 d gd
g dd}t|| |j|d d}t|d |d |d g|d |d	 |d gd
g dd}t|| d S )Nz2012-01z2012-02z2012-03z2012-04rM   r   r-   r0   r1   rR   rS   r5   rP   )	r	   r
   r   r]   r3   r   r   r    r!   )r#   ry   re   r:   r;   r   r   r   test_unstack_fill_frame_period   s.   $z3TestDataFrameReshape.test_unstack_fill_frame_periodc                 C   s  t g ddd}tg d|_| }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 d    n1 sQw   Y  |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 )Nr.   r/   cr.   categoryrK   rM   axaabc
categoriesbcxrR   rm   r5   z9Cannot setitem on a Categorical with a new category \(d\)matchdrP   r   acabcc)r
   r   r]   r3   r   r   r{   Categoricalrr   r    r!   pytestraises	TypeError)r#   re   r:   r;   msgr   r   r   #test_unstack_fill_frame_categorical   s0   z8TestDataFrameReshape.test_unstack_fill_frame_categoricalc                 C   s   t jg dg dgddgd}tdgd dgd d	|d
}|d}tg dg dg dgt jg dd dgdtg dddd}t|| d S )Nr.   r/   r   r0   r1   r-   rn   rq   ra   r0   	   r1   r   er5   )r0   r0   r0   r1   r1   r1   )r   r.   r   r/   )r   r   r   r.   r   r/   )r   r   r[   r4   r3   )r   r7   r   r   r]   r   r    r!   r#   idxr%   r:   r;   r   r   r   $test_unstack_tuplename_in_multiindex  s   
z9TestDataFrameReshape.test_unstack_tuplename_in_multiindexz>unstack_idx, expected_values, expected_index, expected_columnsrn   )r0   r0   r1   r1   ))r0   r-   )r0   r>   r1   r-   )r1   r>   rp   Cr   )r   r   r   r   N)rn   rp   )r0   r0   r0   r0   r1   r1   r1   r1   r-   r>   r   ))r   r.   r0   )r   r.   r1   )r   r/   r0   )r   r/   r1   )r   r.   r0   )r   r.   r1   )r   r/   r0   )r   r/   r1   )Nrn   rp   c           	      C   sj   t jddgddgddggg dd}tdgd	 dgd	 d
|d}||}t|||d}t|| d S )Nr.   r/   r0   r1   r-   r>   )rn   rp   r   r   rk   r   r5   r   )r   r7   r   r   r    r!   )	r#   unstack_idxexpected_valuesexpected_indexexpected_columnsr   r%   r:   r;   r   r   r   *test_unstack_mixed_type_name_in_multiindex,  s   &
z?TestDataFrameReshape.test_unstack_mixed_type_name_in_multiindexc                 C   s  t g dg dtg ddtjddddtdtg d	d
tg dddtg ddd}dd }|ddg}||d |ddg}||d |ddg}||d |g d}||d |ddg}||d |ddg}|d }||d d S )N)ILMINCr   r   r1   r-   r0   r   20010102)      ?      I@g      Y@float32)r=         @      @rt   F)r0      i2 int8)stater3   some_categoriesro   rp   r   DEFGHc                 S   s&   |  |g}|  |}t|| d S r   r   r    r!   )r%   column_name
unstacked1
unstacked2r   r   r   unstack_and_compareo  s   
zNTestDataFrameReshape.test_unstack_preserve_dtypes.<locals>.unstack_and_comparer   r3   r   r   r   )r   rp   r   rp   r   ro   )	r   r
   rb   r   randomdefault_rngr{   	Timestampr_   )r#   r%   r   df1rg   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 u s]J t|jddg|d|jd|djd|d d S )Nr-   repeatr1   )      r4   r0   levelr   rO   T)inplace)r   r]   rr   	itertoolsproductr6   r   r   r   r   standard_normalr    r!   r   r   r4   	set_names)r#   r   r4   r%   df_namedreturn_valuer   r   r   test_stack_ints  s2   z$TestDataFrameReshape.test_stack_intsc           	      C   s  t jg dg dd}ttjdd|d}|jddg|d	}|jd
dg|d	}| }g d|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 d    n1 sow   Y  | }g d|j	_
tj|jddg|d	|dd d S )N)ro   catlong)rp   r   r   )ro   dogshort)rp   r   r   expanimalhair_lengthr   r1   r>   r>   r   r   r   r   r   )r   r   r0   r0   Fcheck_nameszSlevel should contain all level names or all level numbers, not a mixture of the twor   r   )r   r   r   )r   r]   r   r   r   r   r   r   r   r4   ra   r    r!   r   r   
ValueError)	r#   r   r4   r%   animal_hair_stackedexp_hair_stackedrG   r   df3r   r   r   test_stack_mixed_levels  sJ   		
z,TestDataFrameReshape.test_stack_mixed_levelsc           	      C   sF  t jg dg dd}ttjdd|d}|jddg|d	}|jdd
g|d	}|jdd
g|d	}| }g d|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 | }g d|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   r1   r   r   r   r   r   r   rY   r0   Fr   r   )r1   r   r0   )r   r]   r   r   r   r   r   r   r   r4   ra   r    r!   )	r#   r   r4   r%   exp_animal_stackedr   r   rG   r   r   r   r   test_stack_int_level_names  sd   	
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colr2   rK   )
r   r   from_arraysr   r   arrayrB   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g dg dg d	gg d
d}td|d}|ddgjd|d}t ddgddggg dg dgddgd}ttjdtjgtjdgdtjgtjdggtjd|t	ddgddd}t
|| d S )Nr   r   onetwor.   r/   r   r   r0   r0   r   r0   r   r0   )r0   r   r0   r   )firstsecondthirdr9   codesra   r   r5   r0   r1   r   r   r   rK   r   r   r2   )r   r
   r   r   r   r   r   rB   rt   r   r    r!   )r#   r   mirg   r:   expected_mir;   r   r   r   test_unstack_level_binding(  s(   &z/TestDataFrameReshape.test_unstack_level_bindingc           	      C   s   |  }t|tsJ |  j}t|| tddtjgddtjgd}t	g d|_
|  }tddgg dgg d	g d
gd}tddtjddtjg|d}t|| | }tdD ]}|  }q^t|| d S )Nr0   r1   r=   r>   r?   r   r@   rA   )r   r   r   r0   r0   r0   )r   r0   r1   r   r0   r1   r9   r   r-   r5   )r   
isinstancer
   r"   r    r!   r   r   rB   r   r3   r   r8   r   r6   )	r#   r$   re   undor:   midxr;   old_data_r   r   r   test_unstack_to_seriesB  s"   

z+TestDataFrameReshape.test_unstack_to_seriesc                 C   s  g dg dg dg d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g dg dgddd	}t|| |d
dg}d|d< |	d}|j}ttdgd tdgd  t
jg dg dgddd	}t|| d|d< |	d}|j}ttdgd tdgd  t
jg dg dgddd	}t|| d S )N)r0   r0   r-   r>   r0   r1   r-   r>   )r1   r0   r-   r>   )r1   r1   r-   r>   ABCDr   rc   r>   r5   ro   rp   )r   r   r   r   )r0   r1   r0   r1   )Nrp   r   r=   r   rt   r1   r   r   r   )r   rr   dtypesr
   r   rL   r    r8   r_   r   r   r   )r#   ru   r%   r:   r;   rG   r   r   r   r   test_unstack_dtypes]  sH   


z(TestDataFrameReshape.test_unstack_dtypeszc, drJ   f8rK   
   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sOJ t	|| d S )Nr.   rJ   rw   rx   )ro   r   r   rp   r-   T)deepro   rp   r   rc   r   )r   r.   )r-   r1   )
r   r   ilocr   r_   rb   r   r   r    r!   )r#   r   r   r%   rightleftr   r   r   test_unstack_dtypes_mixed_date  s   	
	z3TestDataFrameReshape.test_unstack_dtypes_mixed_datec                 C   s   t jddgddgd}tddg|d}d}tjt|d	 |d W d    n1 s,w   Y  tjt|d	 |jjd|d
 W d    d S 1 sLw   Y  d S )NrR   )r   r   c1r   r0   r1   r5   z5The name c1 occurs multiple times, use a level numberr   r   )	r   r]   r   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   sB  t dgg dgd d }tddggd |d}| }t ddgg dg}tg d	gdg|d
}t|| |jjd |jd k sHJ g dg dg}g dg d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 sJ d S )Nr.   )ro   rp   r   r   rO   r0   r   r-   r5   ro   rp   r   )r0   r0   r0   r   r   r   r2   )r   r0   rj   r   r0   r1   r-   r   r   r1   r   r1   r>   r1   axisr   )r   r7   r   r   r    r!   r4   r9   allr   r   r   concatenate)	r#   r   r%   r:   exp_colr;   r9   r   blockr   r   r   test_unstack_unused_levels  s$   
"z/TestDataFrameReshape.test_unstack_unused_levelsz"level, idces, col_level, idx_levelr   )      ri   r   r1   rJ   rk      r.   r1   r0   )rk   r#  r0   r>         r!  r"  c                 C   s   g dg dg}g dg d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 )N)r.   r1   r   )r0   r-   rJ   rj   )r   rO   r0   r0   )r   r1   rO   r1   rk   r>   r1   r5   r      r   r0   r-   ri   r2   )r   r   r   r   r   r   zerosrB   r7   r    r!   )r#   r   idces	col_level	idx_levelr9   r   r   re   r%   r:   exp_datacolsr;   r   r   r   )test_unstack_unused_levels_mixed_with_nan  s   

z>TestDataFrameReshape.test_unstack_unused_levels_mixed_with_nanr-  ro   c                 C   s   t g dg dgg dd}|jg d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 )N)i  r.   I)i  r/   IIr  r   F)dropr/  r   r   r   )r   r_   rd   slicer   r  r   r7   r4   r3   	droplevelr    r!   )r#   r-  r%   ind	selectionr:   r;   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g dgg ddd}|g d}t dggtjg dgg d	dtdgd
dd}t|| d S )Nr0   r   r  r   )r   r   r0   r   r   r   r0   )i1i2i3i4i5i6i7r   )r8  r9  r:  r;  r<  r=  )r  r8  r9  r:  r;  r<  r=  r7  r   )r   r   r]   r   r   r    r!   r#   r%   r:   r;   r   r   r   test_unstack_long_index  s$   z,TestDataFrameReshape.test_unstack_long_indexc                 C   sx   t ddgddggtjddgddggddgdtjg dg d	gg d
dd}|ddgjjdd  ddgks:J d S )N        rp   r   r   r  c2r   )r     r   )r  rB  (   r7  r8  r9  r   r8  r7  r   )r   r   r]   r   r4   ra   )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g d	g d
gtjg dg dg dg dgg ddd}|ddg}|dgdg}t|| d S )Nr0   r1   r-   r>   rO   r   r   )r   r   f)m1P3   )rI  A5o   )m2rJ  rK  )rN  rL  rM  rD  r   r   r9  r8  )r   r   r]   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)rR  rQ  levc                 C   s(  dd }t ddtjdgg dg dd}|d	d
g d }|d
d	g d j}t|| |t|}|j|d}|	 j
 t|ksLJ dd }	|d 	 j
 \}
}t|
|D ]1\}}t|d j||f d}|	|d j| |	|d j|  }tt||}||ksJ q`d S )Nc                 S      | | krdn| }|dS N 1r   valval_strr   r   r   cast+     z:TestDataFrameReshape.test_unstack_nan_index1.<locals>.castr.   r/   r   )rZ   r@   rA   rN   )za.wzb.xz .yzd.z)rQ  rR  jolierQ  rR  r]  r&  c                 S      t | tr	t| S | gS r   r  tuplerr   r.   r   r   r   <lambda>>      z>TestDataFrameReshape.test_unstack_nan_index1.<locals>.<lambda>.)r   r   rB   r_   r   r"   r    r!   rr   notnarz   sumrC   nonzerozipsortedr  splitr3   r4   map)r#   r   rS  r[  r%   r  r  r   udfmk_listru   r-  r   rW   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  g dd}|j fdddd|j fdddd|d< |d< |t|}|j|d}| j	 dt
| ksJ dd }||  j \}}	t||	D ]1\}
}t|| j|
|f d}||| j|
 ||| j|  }tt |}||ksJ qd S )Nc                 S   rT  rU  r   rX  r   r   r   r[  J  r\  zATestDataFrameReshape.test_unstack_nan_index_repeats.<locals>.castr   r-   rJ   r.   r1   r   r   r/   rA   rZ   rN   r>   r@   )C   '   5   H   9   P      r'  r#  r   ;   2   >   r|  L   4      rw  <   3   ro  c                    s   d t | S )Nrd  )joinrk  rr[  r   r   rb  w  s    zETestDataFrameReshape.test_unstack_nan_index_repeats.<locals>.<lambda>r0   r  c                    s   d t | jd d d S )Nrd  rO   )r  rk  r  r  r  r   r   rb  x  s    rs  rt  r&  c                 S   r^  r   r_  ra  r   r   r   rb  ~  rc  rd  )r   r   rB   applyr_   rr   r   re  rz   rf  rC   rg  rh  ri  r  rj  r3   r4   rk  )r#   r   rS  r   r%   r   rl  rm  ru   r-  r   rW   r  r  r   r  r   test_unstack_nan_index_repeatsF  sV   



)$z3TestDataFrameReshape.test_unstack_nan_index_repeatsc              	   C   s  t tdtdtdd}|ddi}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}|ddi}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}|ddi}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 )Naaaabbbbrk   r  rp   r^   r-   r0   ro   r   r-   r0   r1   r>   rJ   ri   rj   r   r   r.   r/   r   r   )r1   r0   )r   rr   r6   rb   r   rB   r  r_   r   rk  rh  r   r   r    r!   )r#   r%   r  valsr   r-  r  r   r   r   test_unstack_nan_index2  sH    $& $& 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g dg dgd d
gd}t |||d}|rs|jg d }|| |d j||< t|| d S )N
aaaaabbbbbrw   rJ   rx   r1   r  r  r  ro   rp   r-   r   r0   r>   ri   rj   rk   r   r.   r/   r   r   )r   r   r   r   r   r   )rO   r   r0   r1   r-   r>   r   r   )r0   r1   r-   rJ   )r   rr   r   tolistr   r   rB   r  r_   r   r   r   r   r4   rb   rL   r    r!   )r#   rF   r%   r  r  r   r-  r  r   r   r   test_unstack_nan_index3  s(   *z,TestDataFrameReshape.test_unstack_nan_index3c                 C   s(  dt jt jdgddt jdgddt jdgg dg dg d	g}t|g d
g dd}| g d }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g dgg dg dgd dgd}t|||d}t|| |j	dd   g d}t| | d S )NHgi(Ur@  Pbg	VZ>)Sn@>]K=?)=()Agr@  r  r  )r  a2U0*#r  r  )agentchangedosages_id)ioC  pC  iqC  irC  isC  itC  r   )r  r  r  r  r  r  r  r   r0   rO   r  r  r   r  )r  r  r  r  r  )r   r   r   r   r   r   r0   r1   r-   r>   r  r  )
r   rB   r   r   r_   r   r   r    r!   rd   )r#   r  r%   r  r   r-  r  r   r   r   test_unstack_nan_index4  s<   z,TestDataFrameReshape.test_unstack_nan_index4c                 C   s
  t g dtdddddtd tjddd dd	}|d
 t	d |d< tj
 |jd< |jd< tj
 |jd< |jd< |g dd
dg}| j dt| ks]J dD ]#}| D ]\}}|d ||d
 |d ff}|| |j| ksJ qeq_d S )N)r0   r1   r0   r1   r0   r1   z
2014-02-01ri   r   )ry   freqd   r1   r  )rp  rq  rQ  rR  rq  z
2014-02-02rr  )r0   rq  )r-   rq  )r0   rr  )r>   rr  ro  rP  rp  )r   r   r   r   r   r   r   roundr{   r   rB   rd   r_   r   re  rz   rf  rC   iterrows)r#   r%   r  r   r  r  rf   r   r   r   test_unstack_nan_index5  s$   	z,TestDataFrameReshape.test_unstack_nan_index5c                 C   sv   t ddd}tg dt|ddfgd}|j|d}tdd	g}t|dfg}tg d||d
}t|| d S )Ni  r0   r
  ro   rp   r   r   r  )rp   r2   )r   r   r   r]   r   r7   r    r!   )r#   r   tr%   r:   eidxecolsr;   r   r   r   %test_stack_datetime_column_multiIndex  s   z:TestDataFrameReshape.test_stack_datetime_column_multiIndexmultiindex_columnsr  r  )r   r0   r1   r>   rY   r   )r1   r-   r>   )r>   r-   r1   r0   r   )r-   r1   r0   r   )r>   r1   r0   r   )r1   r0   r   )r-   r1   r0   )r>   r-   r1   r   rO   c           
      C   s   |sdnt j}tjg dddgd}|| }ttdt| dt||d}|j	|||d}t
|trR|sR|j	|d	|d}	t
|	trLt||	 nt||	 tj|j |jjd|_|j	|||d}	t
|	trtt||	 d S t||	 d S )
NF)rp   r@   )rp   rN   )ro   rA   )r   r@   )r   uUpperLowerr   r-   r   )r   dropnar   T)r   
no_defaultr   r]   r   r   r   rC   r   r   r  intr
   r    r8   r!   r4   to_numpyra   )
r#   r  r   r   r  full_multiindex
multiindexr%   r:   r;   r   r   r   test_stack_partial_multiIndex  s.   

z2TestDataFrameReshape.test_stack_partial_multiIndexc                 C   s   t jg dddgd}ttddd|g d d	}|s d
ntj}|j||d}tddgdtj	gddgdtj	ggt ddgg dgg dg dgd dgdt
ddgddd}|d |jjd |d< t|| d S )Nr  r  r  r   ri   r1   r-   )r   r0   r-   r   Fr  r   r   r0   rJ   r>   )r  r@   rA   rN   r   )r0   r-   r0   r-   r   rp   r   r   r2   )r   r]   r   r   r   r   r   r  r   rB   r   rb   r  r  r    r!   )r#   r   r  r%   r  r:   r;   r   r   r   test_stack_full_multiIndexZ  s$   "	z/TestDataFrameReshape.test_stack_full_multiIndexorderedFTc                 C   sf   t jtdtd|d}tg dg|d}|j|d}t|j|g}tg d|d}t	
|| d S )Nyxzrm   r   r  )r  r#  r$  r   r   r5   )r{   CategoricalIndexrr   r   r   r   r7   r3   r
   r    r8   )r#   r  r   cidxr%   r:   r  r;   r   r   r   %test_stack_preserve_categorical_dtypeo  s   z:TestDataFrameReshape.test_stack_preserve_categorical_dtypezlabels,datarm   )r  r#  r$  r!  r  r%  zyx)r  r%  r$  r!  r  r#  c                 C   s   t j|t||d}t jddg|d}t||g}tt|g|d}|jddg|d}	|r0|nt|}t j||d}
|rAt|n|}t|tdg|
|gd	}t	|	| d S )
Nr  r  v)r  r   r   r0   r   r5   )
r{   r  ri  r   r7   r   r   r
   r    r8   )r#   r  labelsre   r   r  cidx2r  r%   r:   s_cidxexpected_datar;   r   r   r   +test_stack_multi_preserve_categorical_dtype}  s   z@TestDataFrameReshape.test_stack_multi_preserve_categorical_dtypec                 C   sd   t g d}t||d}|j|d}tg dddgg}tt g d|d}t|| d S )	N)r.   r.   r/   r   ro   rp   r   r  ro   rp   )r.   r.   r.   r.   r/   r/   r   r   r5   )	r{   r   r   r   r   r7   r
   r    r8   )r#   r   r   r%   r:   r3   r;   r   r   r   ,test_stack_preserve_categorical_dtype_values  s   zATestDataFrameReshape.test_stack_preserve_categorical_dtype_valueszindex, columnsr   r/   )r   r   r1   r-   c           
      C   sx   t ||dd}|j|d}t|j }t | ||jd}t	|| t
|jj}t
|j}	t||	 d S )Nr2   r0   r   )r   fillnar   r   r]   r3   r  r4   r    r!   r   asarrayr   assert_numpy_array_equal)
r#   r3   r4   r   r%   r&   	new_indexr;   stacked_codesexpected_codesr   r   r   )test_stack_multi_columns_non_unique_index  s   
z>TestDataFrameReshape.test_stack_multi_columns_non_unique_indexz,vals1, vals2, dtype1, dtype2, expected_dtyper=   r   Int64Float64r   r   stringr   c           
      C   sR   t t||dt||dd}|j|d}|tj|d|}	t||	 d S )NrK   )ro   r0   )ro   r1   r   )r   r
   r   rb   r   r    r!   )
r#   vals1vals2dtype1dtype2expected_dtyper   r%   r:   r;   r   r   r   .test_stack_multi_columns_mixed_extension_types  s   

zCTestDataFrameReshape.test_stack_multi_columns_mixed_extension_typesc                 C   s   t jg dddgd}ttjg dddtg dd	|d
}|j|d}|tj|d}|dkr>|d	 	tj
|d	< n
|d 	tj
|d< t|jjgd |jjgd  |jd
}t|j| t|t| d S )N)ro   r   r  )rp   r0   r.   r/   r   )r   r0   Nr  rK   rV   r  r5   r&  r   r  r1   )r   r]   r   r{   r   r   r   rb   r   r  NAr
   ro   rL   rp   r4   r    r8   r  r!   )r#   r   r3   r%   r:   r;   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g dgt jg dddgdd}d|j_| jddj	d|d}t
|| d S )Nr   r   r   r   r  r   r1   r0   r-   rp   ro   r2   r   )r-   r0   r1   r   ))r   ro   )r   rp   )r   ro   )r   rp   r   r  )r  r   )r   r7   r   r4   r[   r]   r3   r   	swaplevel
sort_indexr    r!   )r#   r   r   r%   r;   r:   r   r   r    test_unstack_swaplevel_sortlevel  s   z5TestDataFrameReshape.test_unstack_swaplevel_sortlevel)>__name__
__module____qualname__r,   r<   rI   rh   rv   r~   r   r   r   r   r   markparametrizer   r]   r   r   r   r   r   r   r   r  r	  r  r   r(  r   r  r  r   rB   r.  r2  r6  r?  rE  rO  rr   r6   rn  r   permutationsr  r  r  r  r  r  r  r  r  r  r  r7   r  r  r  r  r   r   r   r   r      s
   .$"

"*8=,



=1)!



r   rL   rt   r  c                 C   s   t g d}| tdd||d}|jddd}| tu r%t dd	g}nd
dg}tdtjgtjdgdtjgtjdgg|t g d|d}t|| |jddgdd}| tu rat ddg}nt ddg}tddgddggddg||d}t|| d S )N))r   rN   r/   )r   rA   r.   )r   rN   r/   )r   rA   r.   r   r   rT   rO   F)r   sortr   r/   )r   r.   r/   r.          @r=   r   ))r   rN   )r   rA   )r   rN   )r   rA   r4   r3   rL   r0   r1   )r   rN   r/   )r   rA   r.   )rN   r/   )rA   r.   r   r   )r3   r4   rL   )	r   r]   r   r   r   r   rB   r    r!   )frame_or_seriesrL   r3   objr:   r   r;   r   r   r   test_unstack_sort_false  s8   "r  c                  C   s   t g ddd} tg d| _|  }tdtjdgddtjgdtd	d
}t	
|| | jdd}tg dg ddtd	d
}t	
|| d S )Nr   r   rK   rM   r.   r/   r   rR   rm   r5   r   rP   )r.   r   r.   )r/   r   r   )r
   r   r]   r3   r   r   r   rB   rr   r    r!   )re   r:   r;   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g d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   r0   r   r2   )	r   r{   r   r_   r   r   r   r    r!   )r%   r:   r;   r   r   r   "test_unstack_timezone_aware_values6  s&   		r  c                 C   sj   t ddddd}td|ig dd}|j| d	}t|tg ddggg d
g dgdd}t|| d S )Nr   2018010120180103zAmerica/New_York)r  startendr  ro   r   r5   r   rY   r   r   r   r  )r   r   r   r
   r   r    r8   )r   tsr%   r:   r;   r   r   r    test_stack_timezone_aware_valuesN  s    r  r  c                 C   s   t jg t jdt jg t jdg}tt jt|g g gdd}|rI| tjurItj	t
dd tt jdj| |d W d    d S 1 sBw   Y  d S tt jdj| |d}t|| d S )NrK   r  )rL   r3   dropna must be unspecifiedr   r  )r   r   rc   r
   rt   r   r   r  r   r   r   r   r   r    r8   )r  r   r9   r;   r:   r   r   r   test_stack_empty_frameZ  s    "r  rQ   c                 C   s   |r0| t jur0tjtdd ttjdj| |dj	|d W d    d S 1 s)w   Y  d S ttjdj| |dj	|d}ttjd}t
|| d S )Nr  r   rK   r  rP   )r   r  r   r   r   r   r   rc   r   r   r    r!   )r  rQ   r   r:   r;   r   r   r   test_stack_unstack_empty_framei  s    "
r  c                  C   sH   d} t jt| d ttjd  W d    d S 1 sw   Y  d S )Nz'index must be a MultiIndex to unstack.*r   rK   )r   r   r   r
   r   rc   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
} | g d} | jdgdd} | jdddjddd}| jddgdd}t g dg dgtddgddtjg dg ddd}t|| d S )NAliceBob      #@rk   FTr   femalemale)r[   scoreemployedkidsgender)r[   r  r  r  r  rP   r  r  )r  r@  r@  r@  )r@  r@  r@  g       @r[   r   ))r  r   Fr   )r  r   Tr   )r  r  Fr   )r  r  Tr   )Nr  r  r  r   r2   )r   r_   r   r   r   r]   r    r!   )r%   r;   r:   r   r   r   test_unstacking_multi_index_df  s*   	r  c                 C   s   t jddgddgd}tg dg|d}|j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?   )rA   rN   r.   r   r0   r0   r0   r0   r   r   r   rA   rN   r   )r   r@   )r   rA   r0   r2   )r   r7   r   r   r   r]   r    r!   )r   r4   r%   r:   new_columnsr  r;   r   r   r   2test_stack_positional_level_duplicate_column_names  s   r	  c                    s   t tdg dg}ttjddtjddtj	tjddtjddd|d | sEt
dd  jjD sEJ   }tj fd	d
tdD tddd}t|| d S )NrJ   r  r1   r%  r  r5   c                 s   s    | ]}|j j V  qd S r   )mgr_locsis_slice_liker   r@   r   r   r   	<genexpr>  s    z5test_unstack_non_slice_like_blocks.<locals>.<genexpr>c                    s   g | ]} |   qS r   )r   )r   nr%   r   r   r     rc  z6test_unstack_non_slice_like_blocks.<locals>.<listcomp>r>   r0   )keysr  )r   r7   r6   r   r   r   r   r   rb   rc   anyrD   rE   r   r{   concatr    r!   )rF   r   rH   r;   r   r  r   "test_unstack_non_slice_like_blocks  s   	&r  c                 C   sB  g dg dddt jt jgg}t|tddgddggg d	g d
gdd}| r)i nddi}|jd d| d|}| r[tdddddt jgdddddt jgdtg dg dgd}ntg dg ddtg dg dgd}t|| t|tg dg dgd}| ri nddi}|jd d| d|}t|| d S )!N)r0   r1   r=   r   )r1   r-   r   r   r-   r>   rp   ro   r@   rA   r   r   r  r   r  Fr   r   r   r=   r  r   r   r?   )r   r   r0   r0   r1   r1   )rp   ro   rp   ro   rp   ro   r5   )r   r=   r  r   r=   )r  r   r=   r   r   )r   r   r0   r0   r1   )rp   ro   rp   ro   rp   )rp   rp   ro   ro   )r@   rA   r@   rA   r   )r   rB   r   r   r   r   r    r!   )r   re   r%   kwargsr:   r;   r   r   r   test_stack_sort_false  s<   
r  c                 C   s   t ddg}tddgddggddg|d	}| ri nd
di}|jddgfd| i|}t g d}tg d|d}t|| d S )N)weightkg)heightmr   r  r=   r   r   r   r2   r  Fr   r0   r   ))r   r  r  )r   r  r  )r   r  r  )r   r  r  )r   r  r=   r   r5   )r   r]   r   r   r
   r    r8   )r   r   r%   r  r:   r   r;   r   r   r   !test_stack_sort_false_multi_level  s   r  c                   @   s  e Zd Zdd Zejdg dg dgg ddg dfg d	g d
gg ddg dfg d	g dgg ddg dfgdd Zdd Zdd Z	ejde
dg deddgddggeedddeg ddgdged g deddgd!dgddggeedddeg d"g d#eg ddgdggd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zejd.d/d0gd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZdCdD ZdEdF Z dGdH Z!dIdJ Z"ejj#dKdL Z$ejdMe%j&'dNdO dPD ejdQe(dejdRdSdTgdUdV Z)dWdX Z*dYdZ Z+d[d\ Z,d]d^ Z-d_d` Z.dadb Z/dcdd Z0dedf Z1dgdh Z2didj Z3dkdl Z4dmdn Z5dodp Z6dqdr Z7dS )sTestStackUnstackMultiLevelc                 C   s6   |}|  }|   |t   |tj   d S r   )r   rb   r  r   rs   r#   /multiindex_year_month_day_dataframe_random_dataymdr(   r   r   r   test_unstack  s
   z'TestStackUnstackMultiLevel.test_unstackz5result_rows,result_columns,index_product,expected_row)r0   r0   NN      >@N)r1   r1   NNr   N)ix1ix2col1col2col3col4r1   )NNr   N)r0   r0   NNr   )r1   r1   NNr   )r!  r"  r#  r$  r%  )NNr   )r1   NNNr   Nc                 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"  r0   r1   r   r   r   )	r   r_   r  r   r   r7   r   r    r!   )r#   result_rowsresult_columnsindex_productexpected_rowr:   r;   r   r   r   test_unstack_partial  s   z/TestStackUnstackMultiLevel.test_unstack_partialc                 C   sT   t g d}ttjdd|d}|ddg}|jddd}t	
|| d S )N))r   r   r   )r   r   r   )r0   r  r0   )r0   quxr0   r1   r>   r5   r0   r  r  how)r   r]   r
   r   r   r   r   r   r  r    r!   )r#   r3   rg   r(   r;   r   r   r   &test_unstack_multiple_no_empty_columns6  s   zATestStackUnstackMultiLevel.test_unstack_multiple_no_empty_columnsc                 C   s  |}|  }|j|d}|r|jdd}t|| |jdd}| d}|j|d}|r3|jdd}t|jdd| |d d d }| d}|j|ddd}|r[|jdd}t|jdd| |dd}| djdddd	}|jd|ddd}|r|jdd}t|jdd| |  }|j|d}|r|jdd}t|| | d d}|jd|d}|  }t|| |jd|d}| d}t|| |jd|d}|j|d d d}t|| | djd d d d d
f }|j|dj|d}	|j|d}
|r|	jdd}	|
jdd}
t|	|
	|	j
 | djd|d}| djd|d}t|| d S )Nr   r  r.  r1   r&  r   rO   r0   r  r-   r   )r   r   r  r    r!   r  r  rd   r8   reindexr3   assert_equal)r#   r  r   r  r(   	restackedunlexsortedr:   r;   r&   ymd_stackedr   r   r   
test_stackA  sf   


z%TestStackUnstackMultiLevel.test_stackzidx, columns, exp_idxabab)rp  rq  rp  r.   r/   rp  rq  r-   )r   r0   r   r>   r  )r.   r1   r/   r0   r.   r0   )r/   r1   r0   )r0   r   r0   )r-   ri   r-   c                 C   s   t tddd||d}|r2d}tjt|d |j|d W d    d S 1 s+w   Y  d S |j|d}ttd|d}t	
|| |jjd	u sOJ |j|j}	}
t	|	|
 d S )
Nr$  r>   r-   r2   z8Columns with duplicate values are not supported in stackr   r   r5   F)r   r   r   r   r   r   r   r   r
   r    r8   r3   	is_uniqueassert_index_equal)r#   r   r4   exp_idxr   r%   r   r:   r;   lirir   r   r   test_stack_duplicate_index  s    "z5TestStackUnstackMultiLevel.test_stack_duplicate_indexc                 C   sR   d}t t|g d}|d}|j|d}|r!|jd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timesmokerr1   r   r  r0  )	r{   read_csvr   r_   r   r   r  r    r!   )r#   r   re   r%   r:   reconsr   r   r   test_unstack_odd_failure  s   
z3TestStackUnstackMultiLevel.test_unstack_odd_failurec                 C   sz   |}|j }d|d< |jddd}|j|d}|d j|d }tj|d |dd |jd u s1J |d jtjks;J d S )	Nr   )r   fourr0   )r   r  r   Fr   r   )	r"   r  r   r    r8   r[   rL   r   rt   )r#    multiindex_dataframe_random_datar   framer%   r&   r:   r   r   r   test_stack_mixed_dtype  s   z1TestStackUnstackMultiLevel.test_stack_mixed_dtypec                 C   sp   t g dg dg dg dtdd}|g dt}| }|j|d}t	||
|jt d S )	N)naiverK  rK  activerL  rL  )r.   r/   r/   r/   r.   r.   )r0   r1   r-   r>   r0   r-   )hirM  byerN  rN  peaceg      @)r   r   barcoder  extra)r   r   rP  r  r   )r   r   r   groupbyr  rC   r   r   r    r8   r1  r3   rb   r^   )r#   r   r%   r:   r(   r3  r   r   r   test_unstack_bug  s   
z+TestStackUnstackMultiLevel.test_unstack_bugc                 C   sT   |}|  }|jjdksJ |jjddgksJ |j|d}|jj|jjks(J d S )Nr   r   r   r   )r   r3   r[   r4   ra   r   )r#   rH  r   rI  r(   r3  r   r   r   !test_stack_unstack_preserve_names  s   z<TestStackUnstackMultiLevel.test_stack_unstack_preserve_namesmethodr   r   c                 C   s   |}|j d }|dkrd|ini }tjtdd t||d	i | W d    n1 s-w   Y  |dkrc|jd d df }tjtdd t||d	i | W d    d S 1 s\w   Y  d S d S )
Nr   r   r   zdoes not match index namer   mistaker   r   )rV  )rd   r   r   KeyErrorgetattrr  )r#   rU  rH  r   rI  r%   r  rg   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   r0   r&  r   )r#   rH  rI  r:   r;   r   r   r   test_unstack_level_name  s   
z2TestStackUnstackMultiLevel.test_unstack_level_namec                 C   sd   |}| d}|jd|d}|  jd|d}t|| |jd|d}|j|d}t|| d S )Nr   r   r   r   )r   r   r    r!   r8   )r#   rH  r   rI  r(   r:   r;   r   r   r   test_stack_level_name  s   
z0TestStackUnstackMultiLevel.test_stack_level_namec           	      C   sF  |}| ddg}| d d}t|| |jj|jjks!J |d }| ddg}t||d  |jddg|d}|rE|jdd}|dddd	}|jdd
}t|| |j	j|j	jkseJ | 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monthro   r   r  r0  r   r0   r1   r&  r-  )r   r    r!   r4   ra   r   r  r  r  r3   rd   )	r#   r  r   r  r(   r;   rg   s_unstackedr3  r   r   r   test_stack_unstack_multiple#  s*    z6TestStackUnstackMultiLevel.test_stack_unstack_multiplec                 C   sX   |}| ddg}tjtdd |jddg|d W d    d S 1 s%w   Y  d S )Nr\  r]  zlevel should containr   r   r   )r   r   r   r   r   r#   r  r   r  r(   r   r   r   test_stack_names_and_numbersE  s
   "z7TestStackUnstackMultiLevel.test_stack_names_and_numbersc                 C   s   |}| ddg}tjtdd |jddg|d W d    n1 s$w   Y  tjtdd |jd	d
g|d W d    d S 1 sEw   Y  d S )Nr\  r]  zToo many levelsr   r1   r-   r   znot a valid level numberrG  rF  )r   r   r   
IndexErrorr   r`  r   r   r   !test_stack_multiple_out_of_boundsP  s   "z<TestStackUnstackMultiLevel.test_stack_multiple_out_of_boundsc              	   C   s  t jg dddd}tddgd dd	}g d
}t||g}t||d}| }|jdd}|jdd}t jg dddd}	tg dg dd|	ddgd}
d|
j_	t
||
 t
||
 t
||
j t jg dddd}t jg dddd}t||g}t||d}| }|jdd}|jdd}t jg dddd}	t jg d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 )N)2013-01rd  2013-02re  2013-03rf  Mperiodr  r[   ro   rp   r-   strr   r0   r1   r-   r>   rJ   ri   r5   r0   r&  r   )rd  re  rf  )r0   r-   rJ   )r1   r>   ri   r  r2   period1)2013-122013-112013-102013-092013-082013-07period2)rr  rq  rp  ro  rn  rm  r1   r>   ri   rJ   )r{   PeriodIndexr   r   r   r
   r   r   r4   r[   r    r!   r"   r   rB   )r#   idx1idx2valuer   rg   result1result2result3e_idxr;   e_colsr   r   r   test_unstack_period_series]  sp   


z5TestStackUnstackMultiLevel.test_unstack_period_seriesc                 C   sJ  t jg dddd}t jg dddd}g dg dd	}t||g}t||d
}| }|jdd}|jdd}t jddgddd}	t jg dddd}
td |
g}tg dg dg|	|d}t|| t|| t jg dddd}	t jg dddd}
td |	g}tg dg dg dg|
|d}t|| d S )N)2014-012014-02r  r  r~  r~  rg  rl  ri  )rm  rm  r  ro  ro  r  rs  rk  )ri   rJ   r>   r-   r1   r0   r  r5   r0   r&  r   r~  r  )ro  rm  r  ro  rm  r  zA A A B B B)rJ   r0   ri   r1   ri   r0   )r>   r1   r-   r-   rJ   r>   r2   )r~  r  r~  r  )ro  rm  r  zA A B B)rJ   r>   r1   r-   )r0   r1   ri   rJ   )ri   r-   r0   r>   )	r{   rt  r   r   r   r   rj  r    r!   )r#   ru  rv  rw  r   r%   rx  ry  rz  e_1e_2r|  r;   r   r   r   test_unstack_period_frame  sN   

z4TestStackUnstackMultiLevel.test_unstack_period_framec                 C   s(  dgd dgd  }dgd dgd  }t g dd }tjdddd	}t||||d
}|ddg}d|j_	|
d}td}	tjt|	d |d  W d    n1 s_w   Y  |djdd}
|
jd|d}|jd d dgf d jd|d}d|j_	t|| d S )Nr0   r-   r1   r.   r/   )z
2013-01-03z
2013-01-04z
2013-01-05r   r  ri   )IDNAMEDATEVAR1r  r  Paramsz-agg function failed [how->mean,dtype->object]r   zW-THUT)numeric_onlyr   r  )r{   to_datetimer   r   r   integersr   r_   r4   r[   r   reescaper   r   r   resamplemeanr   rd   r    r!   )r#   r   id_colr[   datevar1r%   multiunstr   downr   r   r   r   r   test_stack_multiple_bug  s,   

z2TestStackUnstackMultiLevel.test_stack_multiple_bugc                 C   s   t ddgddgddgd}|ddg}|sd	ntj}| j||d
}t|t| ks1J |rVtj	t
dd | jd|d
 W d    d S 1 sOw   Y  d S | jd|d
}t||  d S )Na1a2b1b2r0   r  ro   rp   Fr  r  r   T)r   r_   r   r  r   r   rC   r  r   r   r   r    r!   )r#   r   r%   r  r&   r   r   r   test_stack_dropna  s   "z,TestStackUnstackMultiLevel.test_stack_dropnac                 C   sT   t g dg dg dgg dg dgd}g d|j_dd	g|j_|d
dg d S )N)r   r   r   r   r0   r0   r0   r0   )r   r   r0   r0   r   r   r0   r0   r   r0   r   r0   r   r0   r   r0   r   r   r2   r   r   r   r/   r   )r   r3   ra   r4   r   )r#   r   r%   r   r   r   "test_unstack_multiple_hierarchical  s   	z=TestStackUnstackMultiLevel.test_unstack_multiple_hierarchicalc              	   C   s   d}t tjdjd|dtjdjd|dtjdjdd	|dtjd
jdd|dtjdjd|dtjd	|d}|g d}|d d S )N  r1   r  )sizer-   i,  r>   irj   rJ   i   ri   i  )ro   rp   r   r   r   r   )ro   rp   r   r   r   r   )r   r   r   r   r  r   r_   r   )r#   NUM_ROWSr%   idfr   r   r   test_unstack_sparse_keyspace
  s   z7TestStackUnstackMultiLevel.test_unstack_sparse_keyspacec                 C   sz   ddgg dg}g dg dg}t ||}ttjdd|d}| }t|jd	ks/J |j	|d
}t
|| d S )Nr   r0   r  r   r  r1   )r>   r1   r5   r>   r   )r   r   r   r   r   r   r   rC   r4   r   r    r!   )r#   r   r9   r   r3   r%   r:   rE  r   r   r   test_unstack_unobserved_keys  s   
z7TestStackUnstackMultiLevel.test_unstack_unobserved_keysc              
   C   s   G dd dt j}| a}|t d| ttjddt	dt	dgd}d}t
jt|d	# tjtd
d	 |  W d    n1 sJw   Y  W d    n1 sYw   Y  W d    d S W d    d S 1 sqw   Y  d S )Nc                       s   e Zd Zd fddZ  ZS )zaTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32.<locals>.MockUnstackerreturnNc                    s   t  j|i | td)NDon't compute final result.)super__init__	Exception)r#   argsr  	__class__r   r   r  4  s   zjTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32.<locals>.MockUnstacker.__init__)r  N)r  r  r  r  __classcell__r   r   r  r   MockUnstacker3  s    r  
_Unstackerr1   )   r1   r  r5   z$The following operation may generater   r  )reshape_libr  contextsetattrr   r   r   r   r   r   r    assert_produces_warningr   r   r   r  r   )r#   monkeypatchr  r  r%   r   r   r   r   /test_unstack_number_of_levels_larger_than_int32.  s"   

"zJTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32r9   c                 c   s*    | ]}t jt g d |ddV  qdS )rY   r1   r   N)r   r   r  )r   widthr   r   r   r  F  s
    
z$TestStackUnstackMultiLevel.<genexpr>r   	stack_levr  TFc                 C   s   t |g dg dgd}t|tdgd}|ri nd|i}|j|fd|i|}|jD ](}	|jD ]"}
|j|	|
f }|	|
| f}|
d|  }|j||f }||ksRJ q0q+d S )	Nr   r   r  r>   )r4   re   r  r   r0   )r   r   r6   r   r3   r4   rd   )r#   r9   r  r  r   r4   r%   r  
df_stackedrowr   r;   
result_row
result_colr:   r   r   r   %test_stack_order_with_unsorted_levelsD  s   

z@TestStackUnstackMultiLevel.test_stack_order_with_unsorted_levelsc                    s~   t g dg d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=J d S )
N)ro   r   rp   )rp   ro   r   r-   r  rJ   rO   )r4   r3   re   c                 3   sN    | ]"} j D ]} j||f  jd dj||d  f|d f kV  qqdS )r   r   r0   N)r4   rd   r   )r   r  r   r%   r   r   r   r  i  s    "z]TestStackUnstackMultiLevel.test_stack_order_with_unsorted_levels_multi_row.<locals>.<genexpr>)r   r   r   r6   tiler   r   rC   r   r  r3   )r#   r   r   r   r  r   /test_stack_order_with_unsorted_levels_multi_row^  s    zJTestStackUnstackMultiLevel.test_stack_order_with_unsorted_levels_multi_rowc           
      C   s   d}d}t |g dg dgd}t|tdgg dd}|r i nd	d
i}|j|fd|i|}t g dddggg dg dgd}tg dg dd|d}	t||	 d S )N)r   r0   )r0   r   r0   r   r   r  r>   )r0   r   r1   r-   )r4   re   r3   r  Tr   r  r   )r0   r0   r   r   r1   r1   r-   r-   )r0   r   r0   r   r0   r   r0   r   r  )r1   r-   r1   r-   r1   r-   r1   r-   r  r5   )r   r   r6   r   r    r!   )
r#   r   r9   r  r4   r%   r  r:   r   r;   r   r   r   1test_stack_order_with_unsorted_levels_multi_row_2p  s"   zLTestStackUnstackMultiLevel.test_stack_order_with_unsorted_levels_multi_row_2c           	      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}|jddg|dddg}tddgddgddgddgddggg dtjddgddgdd}t|| d S )NrJ   c                 S      g | ]}d | qS )r/   r   r  r   r   r   r     r   zVTestStackUnstackMultiLevel.test_stack_unstack_unordered_multiindex.<locals>.<listcomp>c                 S   r  ra  r   r  r   r   r   r     r   r/   r.   r   r   r@   r0   r  r   r   a0b0r  r  r  r  a3b3a4b4r  )r.   r@   )r/   r@   r   r2   )r   r   vstackr   r"   r4   r[   r{   r  ra   r1  ri  r   r   r   r]   r    r!   )	r#   r   rz   re   r%   second_level_dictmulti_level_dfr:   r;   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sJ |d jtjks#J |d jtjks-J d S )	Nr   r   r1   r   r]  r  )r   r0   )r   r0   )r   rL   r   rt   object_r  r   r   r   test_unstack_preserve_types  s   
z6TestStackUnstackMultiLevel.test_unstack_preserve_typesc                 C   sl  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s<J |j|d
}t	
|||j tddgg|gd  t ddg|gd  d}tt d|d}|d}|jd	ks{J 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sJ d S )N  r1   rk   r   r0   r  r  r5   )r  r1   r   r>   )r   r  r   r   r   r
   r   r   r   r    r8   r1  r3   )r#   r   r   r   r3   rg   r:   r&   r   r   r   !test_unstack_group_index_overflow  s2   

$
z<TestStackUnstackMultiLevel.test_unstack_group_index_overflowc                 C   s   t g dg ddgd dddg}d|d	< |s$t|jjd
ks$J |d}|d d|d< t g dtjdddggt	ddgdddt
jg dd dgdd}|rf|d d|d< |d d|d< t|| d S )N)ro   ro   rp   )cacbr  r  r-   )r.   r/   r  r.   r/   r0   is_r1   r  r  r   )      $@r  r   r   r  r@  r   ro   rp   r   )rL   r[   ))r  r  r  r  r  r  r  r   r2   r  rc   r  )r   r_   rC   rD   rE   r   r  r   rB   r   r   r]   rb   r    r!   )r#   rF   r%   r:   r;   r   r   r   +test_unstack_with_missing_int_cast_to_float  s2   
	
zFTestStackUnstackMultiLevel.test_unstack_with_missing_int_cast_to_floatc                 C   s   t g dg dg dg dd}|g d}g d}|jj|dd|_|jj|d	d|_|d
d  j}tg dg dgg dg dgdd	gd}t|| d S )Nr
  )r-   r>   r0   r1   r  )L1L2L3r@   )r  r  r  )n1n2n3Nr  )r9   r   r  r  )r@   r0   r  )r1   r-   r   r0   r   )	r   r_   r3   
set_levelsr   r  r   r    r<  )r#   r   
new_levelsr:   r;   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g dd}|jd|d}|r<tdgdd	ggg d
g dgd}tdgddggg d
g dgd}ntg d}tg d}t dtjtjgtjddgtjddgg||d}t	|| d S )Nr0   rJ   ))r   NN)r   r1   r   )r   r1   r0   )r   r-   r   )r   r-   r0   r   r1   r   r   r@  r   r  )rO   r   r0   r  r-   )r   N)r   r   r  )r  )r   r1   )r   r-   r2   )
r   r   r(  r   r]   r   r   rB   r    r!   )r#   r   r%   r:   r3   r4   r;   r   r   r   $test_stack_nan_in_multiindex_columns
	  s$   "$"z?TestStackUnstackMultiLevel.test_stack_nan_in_multiindex_columnsc                 C   sz  t dgd dgd  ttdttdg}ttddd|d}|j	d	dg|d
}|rttdtj
gd	tj
gtj
dgtj
dgdtj
gdtj
gtj
dgtj
dggddgt dgd d	gd  ttdttdgd}nAt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 )Nro   r1   rp   r7  ccddrk   r>   r   r0   r   r   r-   rJ   ri   rj   ababababccddccddr   aabbaabbcdcdcdcd)r   r   r{   r   rr   r   r   r   r   r   rB   r    r!   )r#   r   r  r%   r:   r;   r   r   r   "test_multi_level_stack_categorical&	  s\   

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}|j	|d}|rAtdd	gtjdggg dg dgd
dgd}ntjdtjfdd	tjfdgd
dg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|d}t
|| d S )Nr>   r1   ro   rq   r  r  r   r   r0   Numr   r  r   r/   r   r   r   r  )r0   r/   r@  r  r=   rp   r   )r   r   r   r   r   r]   rB   r   rt   r   r    r!   )r#   r   df_nanr:   r3   r;   r   r   r   test_stack_nan_level]	  s0   "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 )Nro   r   r0   r   r.   r/   r5   r   r  )r   r   )r   r0   )
r   r7   r   r{   r   r   r]   r4   r    r!   r   r   r   r    test_unstack_categorical_columnsy	  s   z;TestStackUnstackMultiLevel.test_unstack_categorical_columnsc           
      C   s   ddg}ddg}g d}t j|||gg dd}ttt|}t||dgd	}|d
dg}|jd|_d|j	d d df< |j
d
dg|d }|jddj
d
dg|d }	t||	 d S )NITAFRAA1A2)CRTDBTNET)PAEVARTYPr   VALUE)re   r3   r4   r  r  r   i'  )A0r  r   r0   r  )r   r7   rr   r6   rC   r   r   r4   r3  rd   r   r  r    r8   )
r#   r   r  r  r  r   VDFr:   r;   r   r   r   test_stack_unsorted	  s    

z.TestStackUnstackMultiLevel.test_stack_unsortedc                 C   s&  t jddgddggddgd}tg dd	d
}tg dg dg dg}t|||t d}|jd|d}|	tj
jd|d	t }t|| ||jd  	t ||jd < |jd|d}ttjg dt dtjg dt ddt ||jd gd}d|j_t|| d S )N5451154515r  t_meanstationelementr   r   rB  r   )r}     r     )r  r  r      )i1     rM  r  r  r   r   )r   r  r  g      "@g     s@g     [@rK   )r  r  r  r  r  r  )r  r  r5   )r   r7   r   r   r   r   r{   
Int64Dtyper   rb   rc   r    r!   r4   Float64Dtyper9   r[   )r#   r   r4   r3   arrr%   r:   r;   r   r   r   test_stack_nullable_dtype	  s6   

"z4TestStackUnstackMultiLevel.test_stack_nullable_dtypec                 C   s   ddgddgddgg}t j|dd}tdddgi|d	}|d
}tdgdggt jdgd d
gdt jddgddgdd}t|| d S )Nr.   r0   r1   redblue)r@   r   rA   r   r  r5   r@   )r  r.   )r0   r
  )r1   r  r   rA   r   )r   r   r   r   r]   r    r!   )r#   arraysr   r%   r:   r;   r   r   r   test_unstack_mixed_level_names	  s   

z9TestStackUnstackMultiLevel.test_unstack_mixed_level_names)8r  r  r  r  r   r  r  r+  r/  r6  rr   r   r   r  r   r   r]   r@  rF  rJ  rS  rT  rY  rZ  r[  r_  ra  rc  r}  r  r  r  r  r  r  slowr  r   chainfrom_iterabler6   r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r   r   r   r   r    s    
L&	

"E/
% 7%r  c                 C   sn   t g dg dg dgg dd}|j| d}tg dtg dg dgg d	g d
gdd}t|| d S )Nr   )r>   rJ   ri   )rj   rk   r   )r:  r8  r9  r   r   )	r0   r1   r-   r>   rJ   ri   rj   rk   r   rY   )	r   r   r   r0   r0   r0   r1   r1   r1   )	r   r0   r1   r   r0   r1   r   r0   r1   r  r5   )r   r   r
   r   r    r8   )r   r%   r:   r;   r   r   r   test_stack_tuple_columns	  s   r  )/r   ior   r   r  numpyr   r   pandas._libsr   pandas.errorsr   pandasr{   r   r   r   r	   r
   r   r   pandas._testing_testingr    pandas.core.reshaper   r  fixturer   r   r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r   r   r   r   <module>   sb    $	
         d
%
&       [