a
    Pf_|                    @   s  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ejdddej#gdd Z$ej"dejdddej#gejddd gdd Z%d d! Z&d"d# Z'ej"dd$d% Z(d&d' Z)ej"dd(d) Z*ej"dd*d+ Z+G d,d- d-Z,d.d/ Z-ejd0dej.fdej.fdej/fd1ej/fgejd2ddgd3d4 Z0dS )5    )datetimeN)lib)PerformanceWarning)	DataFrameIndex
MultiIndexPeriodSeries	Timedelta
date_range)reshapeTF)paramsc                 C   s   | j S N)param)request r   ^/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/frame/test_stack_unstack.pyfuture_stack   s    r   c                   @   s@  e Zd Zdd Zejddd Zdd Zejd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ejdd*d+ Zejdd,d- Zejdd.d/ Zd0d1 Zejdd2d3 Zd4d5 Zd6d7 Zejd8ed9ed9fejd9d:d;ejd9d<d:d;ffd=d> Z ejdd?d@ Z!dAdB Z"ejdCdDg dEej#dFdGgej#d9dHgfdHg dIej#d9dHgej#dFdGgffdJdK Z$ejdLdMdge%dgdNdO Z&dPdQ Z'dRdS Z(dTdU Z)ejdVdWdXgejdYe*e+dGdZd[ Z,ejdVe-.g d\ejdYe*e+d!ejd]d^d_gd`da Z/dbdc Z0ddde Z1dfdg Z2dhdi Z3djdk Z4ejdejdlg dmg dng dog dpg dqg drdDdHgdDdGgdDd!gdDgdGgd"gg dsg dtg dug dvg dwg dxdHdDgdGdDgd!dDggejdydzdDdHdDdHgdHdDgfd{d| Z5ejdd}d~ Z6ejdddgdd Z7ejdejdddgejde*dg dfe*dg dfgdd Z8dd Z9ejdejdejdg de:dHdGgdFdggfg de:dHdGgdFdggfg dne:dHdGgdFdggfgdd Z;ejdejddHdGgddgdddfdHdGgddgdddfgdd Z<ejdydDdHgdd Z=ejdydDdg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stackedZ
stacked_df	unstackedZunstacked_dfZunstacked_colsZunstacked_cols_dfr   r   r   test_stack_unstack   s    "

z'TestDataFrameReshape.test_stack_unstack9ignore:The previous implementation of stack is deprecatedc                 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   r/   r*   r+   )	ranger   r   r	   r   from_productr   assert_series_equalr    )r"   r   levelsr$   resultexpectedr   r   r   test_stack_mixed_level1   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sLJ | }| }t|| d S )Nr,   r-         @   xyr<   r=   )	r   r   nanlen_mgrblocksr   r   r4   )r"   using_array_managerr$   df2resr7   r   r   r   test_unstack_not_consolidatedK   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)r,   r-   r:      dtype)r<   r*   )r<   r+   )r=   r+   )zr*   
fill_value)r,   rK   rF   )r-   r:   rK   r*   r+   r<   r=   rJ   r/   rH         ?)r,   rQ   rF   )r-   r:   rQ   r*   r*   r+   )jkrS   r   r,   r-   )r<   r=   rJ   wr<   r=   r   )rV   r+   rS   )r   r   r-   )r/   namer   rV   )r	   r   int16r   from_tuplesr/   r   r   r   r    float	set_indexr4   r   Zreorder_levelsnamesastypeint64loc)
r"   r   datar6   r7   r$   r&   keyr%   sr   r   r   test_unstack_fillW   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 )Nr,   r-   r)   r:   rF            ZAB)r0   rH   rI   rK   rL   )r,   r)   r-   r:   )rK   rF   rK   rd   )re   rK   rf   rK   xyzrP   )Ar*   )ri   r+   )Br*   rj   r+   ri   rj   rQ   )rQ   rF   rQ   rd   )re   rQ   rf   rQ   )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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:   periodsrI   r   r)   r,   r-   rN   rO   r1   rL   )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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:   rI   r   r)   r,   r-   rN   rO   r1   rL   )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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-04rI   r   r)   r,   r-   rN   rO   r1   rL   )	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 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 s0    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*   categoryrG   rI   Zaxaabc
categoriesZbcxrN   rg   r1   z9Cannot setitem on a Categorical with a new category \(d\)matchdrL   r   ZacaZbcc)r	   r   rY   r/   r   r   ru   Categoricalrl   r   r    pytestraises	TypeError)r"   r`   r6   r7   msgr   r   r   #test_unstack_fill_frame_categorical   s.    *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   r,   r-   r)   rh   rk   r\   r,   	   r-   r   er1   )r,   r,   r,   r-   r-   r-   )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)   )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   r*   r-   )r   r+   r,   )r   r+   r-   )Nrh   rj   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+   r,   r-   r)   r:   )rh   rj   r   r   rf   r   r1   r   )r   r3   r   r   r   r    )	r"   Zunstack_idxZexpected_valuesexpected_indexexpected_columnsr   r$   r6   r7   r   r   r   *test_unstack_mixed_type_name_in_multiindex1  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)ZILMIZNCr   r   r-   r)   r,   r   Z20010102)      ?      I@g      Y@Zfloat32)r9         @      @rn   F)r,      i2 Zint8)stater/   some_categoriesri   rj   r   DEFGHc                 S   s&   |  |g}|  |}t|| d S r   r   r   r    )r$   Zcolumn_nameZ
unstacked1Z
unstacked2r   r   r   unstack_and_comparet  s    
zNTestDataFrameReshape.test_unstack_preserve_dtypes.<locals>.unstack_and_comparer   r/   r   r   r   )r   rj   r   rj   r   ri   )	r   r	   r]   r   randomdefault_rngru   	Timestampr[   )r"   r$   r   df1rb   r   r   r   test_unstack_preserve_dtypesb  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 sJ t|jddg|d|jd|djd|d d S )Nr)   repeatr-   )      r0   r,   levelr   rK   T)Zinplace)r   rY   rl   	itertoolsproductr2   r   r   r   r   standard_normalr   r    r   r   r0   Z	set_names)r"   r   r0   r$   Zdf_namedZ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 s0    Y  | }g d|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   r   r   r   r   )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   r   r   )r   rY   r   r   r   r   r   r   r   r0   r\   r   r    r   r   
ValueError)	r"   r   r0   r$   animal_hair_stackedexp_hair_stackedrC   r   df3r   r   r   test_stack_mixed_levels  sH    		0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   r-   r   r   r   r   r   r   rU   r,   Fr   r   )r-   r   r,   )r   rY   r   r   r   r   r   r   r   r0   r\   r   r    )	r"   r   r0   r$   Zexp_animal_stackedr   r   rC   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colr.   rG   )
r   r   from_arraysr   r   arrayr>   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   r,   r,   r   r,   r   r,   )r,   r   r,   r   )firstsecondthirdr5   codesr\   r   r1   r,   r-   r   r   r   rG   r   r   r.   )r   r	   r   r   r   r   r   r>   rn   r   r   r    )r"   r   mirb   r6   Zexpected_mir7   r   r   r   test_unstack_level_binding6  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 ]}|  }qt|| d S )Nr,   r-   r9   r:   r;   r   r<   r=   )r   r   r   r,   r,   r,   )r   r,   r-   r   r,   r-   r5   r   r)   r1   )r   
isinstancer	   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_seriesS  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}|rDdntd}ttdgd |gd  t
jg dg dgddd	}t|| d S )N)r,   r,   r)   r:   r,   r-   r)   r:   )r-   r,   r)   r:   )r-   r-   r)   r:   ZABCDr   r^   r:   r1   ri   rj   )r   r   r   r   )r,   r-   r,   r-   )Nrj   r   r9   r   rn   r-   r   r   stringr   )r   rl   dtypesr	   r   rH   r   r4   r[   r   r   r   )	r"   using_infer_stringro   r$   r6   r7   rC   r   rH   r   r   r   test_unstack_dtypesn  sJ    


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sJ 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   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 sX0    Y  tjt|d	  |jjd|d
 W d    n1 s0    Y  d S )NrN   )r   r   c1r   r,   r-   r1   z5The name c1 occurs multiple times, use a level numberr   r   )	r   rY   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   sD  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 sJ 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 s@J d S )Nr*   )ri   rj   r   r   rK   r,   r   r)   r1   ri   rj   r   )r,   r,   r,   r   r   r   r.   )r   r,   re   r   r,   r-   r)   r   r   r-   r   r-   r:   r-   axisr   )r   r3   r   r   r   r    r0   r5   allr   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   r-   rF   rf      r*   r-   r,   )rf   r  r,   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*   r-   r   )r,   r)   rF   re   )r   rK   r,   r,   )r   r-   rK   r-   rf   r:   r-   r1   r      r   r,   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 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+   ZIIr   r   F)Zdropr  r   r   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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 )Nr,   r   r   r   )r   r   r,   r   r   r   r,   )i1i2i3i4i5i6i7r   )r  r  r  r  r  r  )r   r  r  r  r  r  r  r  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   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stJ d S )N        rj   r   r   r   c2r   )r      r   )r   r  (   r  r  r  r   r  r  r   )r   r   rY   r   r0   r\   )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 )Nr,   r-   r)   r:   rK   r   r   )r   r   f)m1P3   )r"  A5o   )m2r#  r$  )r'  r%  r&  r  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   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sJ dd }	|d 	 j
 \}
}t|
|D ]b\}}t|d j||f d}|	|d j| |	|d j|  }tt||}||ksJ 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=   rJ   )za.wzb.xz .yzd.z)r*  r+  jolier*  r+  r3  r  c                 S   s   t | trt| S | gS r   r   tuplerl   r*   r   r   r   <lambda>S  r|   z>TestDataFrameReshape.test_unstack_nan_index1.<locals>.<lambda>.)r   r   r>   r[   r   r!   r   r    rl   notnart   sumr?   nonzerozipsortedr   splitr/   r0   map)r"   r   r,  r2  r$   r   r   r   udfmk_listro   r	  rz   rS   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sJ dd }||  j \}}	t||	D ]f\}
}t|| j|
|f d}||| j|
 ||| j|  }tt |}||ks6J q6d S )Nc                 S   s   | | krdn| }|dS r-  r   r0  r   r   r   r2  _  s    zATestDataFrameReshape.test_unstack_nan_index_repeats.<locals>.castr   r)   rF   r*   r-   r   r   r+   r=   rV   rJ   r:   r<   )C   '   5   H   9   P      r  r  r   ;   2   >   rP  L   4      rK  <   3   rC  c                    s   d t | S )Nr8  )joinr?  rr2  r   r   r7    r|   zETestDataFrameReshape.test_unstack_nan_index_repeats.<locals>.<lambda>r,   r   c                    s   d t | jd d d S )Nr8  rK   )rX  r?  r   rY  r[  r   r   r7    r|   rG  rH  r  c                 S   s   t | trt| S | gS r   r4  r6  r   r   r   r7    r|   r8  )r   r   r>   applyr[   rl   r   r9  rt   r:  r?   r;  r<  r=  r   r>  r/   r0   r?  )r"   r   r,  r   r$   r   r@  rA  ro   r	  rz   rS   r   r   r   r[  r   test_unstack_nan_index_repeats[  sT    



) $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 )NZaaaabbbbrf   r   rj   rZ   r)   r,   ri   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  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}|r|jg d }|| |d j||< t|| d S )NZ
aaaaabbbbbrq   rF   rr   r-   r   r   r^  ri   rj   r)   r   r,   r:   rd   re   rf   r   r*   r+   r   r   )r   r   r   r   r   r   )rK   r   r,   r-   r)   r:   r   r   )r,   r-   r)   rF   )r   rl   r   tolistr   r   r>   r   r[   r   r   r   r   r0   r]   rH   r   r    )r"   rB   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  rh  ri  )rc  a2U0*#rh  ri  )agentchangedosages_id)ioC  pC  iqC  irC  isC  itC  r   )ro  rn  rl  rk  rg  ri  rh  r   r,   rK   ro  rn  r   rm  )rj  rc  re  rf  rd  )r   r   r   r   r   r   r,   r-   r)   r:   rl  rp  )
r   r>   r   r   r[   r   r   r   r    r_   )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sJ dD ]F}| D ]8\}}|d ||d
 |d ff}|| |j| ksJ qqd S )N)r,   r-   r,   r-   r,   r-   z
2014-02-01rd   r   )rs   freqd   r-   r   )rD  rE  r*  r+  rE  z
2014-02-02rF  )r,   rE  )r)   rE  )r,   rF  )r:   rF  rC  r)  rD  )r   r   r   r   r   r   r   roundru   r   r>   r_   r[   r   r9  rt   r:  r?   Ziterrows)r"   r$   r   r   r   rZ  ra   r   r   r   test_unstack_nan_index5  s     	z,TestDataFrameReshape.test_unstack_nan_index5c           
      C   s   t ddd}tg dt|ddfgd}|r2d nt}d}tj||d |j|d	}W d    n1 sj0    Y  td
dg}t|dfg}tg d||d}	t	||	 d S )Ni  r,   r   ri   rj   r   z2The previous implementation of stack is deprecatedr   r   r   )rj   r.   )
r   r   r   rY   FutureWarningr   assert_produces_warningr   r3   r    )
r"   r   tr$   warnr   r6   ZeidxZecolsr7   r   r   r   %test_stack_datetime_column_multiIndex(  s    *z:TestDataFrameReshape.test_stack_datetime_column_multiIndexmultiindex_columnsrq  r   )r   r,   r-   r:   rU   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   rK   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r|s|j	|d	|d}	t
|	trt||	 nt||	 tj|j |jjd|_|j	|||d}	t
|	trt||	 nt||	 d S )
NF)rj   r<   )rj   rJ   )ri   r=   )r   r<   )r   uUpperLowerr   r)   r   )r   dropnar   T)r   
no_defaultr   rY   r   r   r   r?   r   r   r   intr	   r   r4   r    r0   to_numpyr\   )
r"   r|  r   r   r  full_multiindexZ
multiindexr$   r6   r7   r   r   r   test_stack_partial_multiIndex6  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   rd   r-   r)   )r   r,   r)   r   Fr  r   r   r,   rF   r:   )r~  r<   r=   rJ   r   )r,   r)   r,   r)   r   rj   r   r   r.   )r   rY   r   r   r   r   r   r  r   r>   r   r]   r   r   r   r    )r"   r   r  r$   r  r6   r7   r   r   r   test_stack_full_multiIndexu  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 )NZyxzrg   r   r  )r   r  r  r   r   r1   )ru   CategoricalIndexrl   r   r   r   r3   r/   r	   r   r4   )r"   r  r   cidxr$   r6   r   r7   r   r   r   %test_stack_preserve_categorical_dtype  s    z:TestDataFrameReshape.test_stack_preserve_categorical_dtypezlabels,datarg   )r   r  r  r  rU  r  Zzyx)rU  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}	|r`|nt|}t j||d}
|rt|n|}t|tdg|
|gd	}t	|	| d S )
Nr  r~  v)r  r   r   r,   r   r1   )
ru   r  r=  r   r3   r   r   r	   r   r4   )r"   r  labelsr`   r   r  Zcidx2r   r$   r6   Zs_cidxZexpected_datar7   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   ri   rj   r   r   ri   rj   )r*   r*   r*   r*   r+   r+   r   r   r1   )	ru   r   r   r   r   r3   r	   r   r4   )r"   r   r   r$   r6   r/   r7   r   r   r   ,test_stack_preserve_categorical_dtype_values  s    zATestDataFrameReshape.test_stack_preserve_categorical_dtype_valuesz4ignore:Downcasting object dtype arrays:FutureWarningzindex, columnsr   r+   )r   r   r-   r)   c           
      C   sx   t ||dd}|j|d}t|j }t | ||jd}t	|| t
|jj}t
|j}	t||	 d S )Nr.   r,   r   )r   fillnar   r   rY   r/   r  r0   r   r    r   Zasarrayr   Zassert_numpy_array_equal)
r"   r/   r0   r   r$   r%   	new_indexr7   Zstacked_codesZ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_dtyper9   r   Int64Float64r   r   r   r   c           
      C   sR   t t||dt||dd}|j|d}|tj|d|}	t||	 d S )NrG   )ri   r,   )ri   r-   r   )r   r	   r   r]   r   r   r    )
r"   Zvals1Zvals2Zdtype1Zdtype2Zexpected_dtyper   r$   r6   r7   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)ri   r   r  )rj   r,   r*   r+   r   )r   r,   Nr  rG   rR   r  r1   r  r   r  r-   )r   rY   r   ru   r   r   r   r]   r   r  NAr	   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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   r-   r,   r)   rj   ri   r.   r   )r)   r,   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'   r   markfilterwarningsr8   rE   rc   rp   rw   r~   r   r   r   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   rB  r   permutationsr]  r`  rb  rr  rv  r{  r  r  r  r  r  r3   r  r  r  r  r   r   r   r   r      sR  

.$"
"
*

8
=
-




=1)!



r   rH   rn   r  c                 C   s   t g d}| tdd||d}|jddd}| tu rJt 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 rt 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   rJ   r+   )r   r=   r*   )r   rJ   r+   )r   r=   r*   r   r   rP   rK   F)r   sortr   r+   )r   r*   r+   r*          @r9   r   ))r   rJ   )r   r=   )r   rJ   )r   r=   r0   r/   rH   r,   r-   )r   rJ   r+   )r   r=   r*   )rJ   r+   )r=   r*   r   r   )r/   r0   rH   )	r   rY   r   r   r   r   r>   r   r    )Zframe_or_seriesrH   r/   objr6   r   r7   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	t	d
}t
|| | jdd}tg dg ddtd	t	d
}t
|| d S )Nr   r   rG   rI   r*   r+   r   rN   rg   rP   r   rL   )r*   r   r*   )r+   r   r   )r	   r   rY   r/   r   r   r   r>   rl   r   r   r    )r`   r6   r7   r   r   r   test_unstack_fill_frame_objectI  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   r,   r   r.   )	r   ru   r   r[   r   r   r   r   r    )r$   r6   r7   r   r   r   "test_unstack_timezone_aware_valuesa  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   Z20180101Z20180103zAmerica/New_York)rs  startendr  ri   r   r1   r   rU   r   r   r   r   )r   r   r   r	   r   r   r4   )r   tsr$   r6   r7   r   r   r    test_stack_timezone_aware_valuesy  s     r  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}|r| tjurtj	t
dd& tt jdj| |d W d    q1 s0    Y  n"tt jdj| |d}t|| d S )NrG   r   )rH   r/   dropna must be unspecifiedr   r  )r   r   r^   r	   rn   r   r   r  r   r   r   r   r   r   r4   )r  r   r5   r7   r6   r   r   r   test_stack_empty_frame  s     6r  rM   c                 C   s   |r\| t jur\tjtdd. ttjdj| |dj	|d W d    q1 sP0    Y  n6ttjdj| |dj	|d}ttjd}t
|| d S )Nr  r   rG   r  rL   )r   r  r   r   r   r   r   r^   r   r   r   r    )r  rM   r   r6   r7   r   r   r   test_stack_unstack_empty_frame  s    &r  c                  C   sF   d} t jt| d  ttjd  W d    n1 s80    Y  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
} | 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 )NZAliceZBob      #@rf   FTr   femalemale)rW   scoreemployedkidsgender)rW   r  r  r  r  rL   r  r  )r  r  r  r  )r  r  r  g       @rW   r   ))r  r  Fr   )r  r  Tr   )r  r  Fr   )r  r  Tr   )Nr  r  r  r   r.   )r   r[   r   r   r   rY   r   r    )r$   r7   r6   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;   )r=   rJ   r*   r   r,   r,   r,   r,   r   r   r   r=   rJ   r   )r   r<   )r   r=   r,   r.   )r   r3   r   r   r   rY   r   r    )r   r0   r$   r6   Znew_columnsr  r7   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 | st
dd  jjD sJ   }tj fd	d
tdD tddd}t|| d S )NrF   r   r-   r  r   r1   c                 s   s   | ]}|j j V  qd S r   )Zmgr_locsZis_slice_likery   r<   r   r   r   	<genexpr>  r|   z5test_unstack_non_slice_like_blocks.<locals>.<genexpr>c                    s   g | ]} |   qS r   )r   )ry   nr$   r   r   r{     r|   z6test_unstack_non_slice_like_blocks.<locals>.<listcomp>r:   r,   )keysr   )r   r3   r2   r   r   r   r   r   r]   r^   anyr@   rA   r   ru   concatr   r    )rB   r   rD   r7   r   r  r   "test_unstack_non_slice_like_blocks  s    	&r  c                 C   sD  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}| rRi nddi}|jf d| d|}| rt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}| ri nddi}|jf d| d|}t|| d S ) N)r,   r-   r9   r   )r-   r)   r   r   r)   r:   rj   ri   r<   r=   r   r   r   r   r  Fr   r   r   r9   r  r   r   r;   )r   r   r,   r,   r-   r-   )rj   ri   rj   ri   rj   ri   r1   )r   r9   r  r   r9   )r  r   r9   r   r   )r   r   r,   r,   r-   )rj   ri   rj   ri   rj   )rj   rj   ri   ri   )r<   r=   r<   r=   )r   r>   r   r   r   r   r   r    )r   r`   r$   kwargsr6   r7   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	}| r4i 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  r9   r   r   r   r.   r  Fr   r,   r   ))r   r  r  )r   r  r  )r   r  r  )r   r  r  )r   r  r9   r   r1   )r   rY   r   r   r	   r   r4   )r   r   r$   r  r6   r   r7   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ej	d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ej	dd'd( Zej	dd)d* Zd+d, Zej	dd-d. Zejd/d0d1gd2d3 Zd4d5 Zej	dd6d7 Zej	dd8d9 Zej	dd:d; Zej	dd<d= Zd>d? Zd@dA Zej	ddBdC Zej	ddDdE Z dFdG Z!dHdI Z"ej	ddJdK Z#ejj$dLdM Z%ej	dejdNe&j'(dOdP dQD ejdRe)dejdSdTdUgdVdW Z*ej	ddXdY Z+ej	ddZd[ Z,ej	dd\d] Z-d^d_ Z.d`da Z/dbdc Z0ddde Z1ej	ddfdg Z2ej	ddhdi Z3ej	ddjdk Z4dldm Z5ej	ddndo Z6ej	ddpdq Z7drds Z8dS )t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_unstack.  s
    z'TestStackUnstackMultiLevel.test_unstackz5result_rows,result_columns,index_product,expected_row)r,   r,   NN      >@N)r-   r-   NNr  N)ix1ix2col1col2col3Zcol4r-   )NNr  N)r,   r,   NNr  )r-   r-   NNr  )r  r  r  r  r  )NNr  )r-   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  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_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   )r,   r  r,   )r,   Zquxr,   r-   r:   r1   r,   r   r   how)r   rY   r	   r   r   r   r   r   r  r   r    )r"   r/   rb   r&   r7   r   r   r   &test_unstack_multiple_no_empty_columnsf  s    zATestStackUnstackMultiLevel.test_unstack_multiple_no_empty_columnsr(   c                 C   s  |}|  }|j|d}|r(|jdd}t|| |jdd}| d}|j|d}|rf|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}|rN|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  r-   r  r   rK   r,   r   r)   r   )r   r   r  r   r    r  r  r_   r4   reindexr/   Zassert_equal)r"   r  r   r  r&   	restackedZunlexsortedr6   r7   r%   Zymd_stackedr   r   r   
test_stackq  sf    


z%TestStackUnstackMultiLevel.test_stackzidx, columns, exp_idxabab)rD  rE  rD  r*   r+   rD  rE  r)   )r   r,   r   r:   r   )r*   r-   r+   r,   r*   r,   )r+   r-   r,   )r,   r   r,   )r)   rd   r)   c                 C   s   t tddd||d}|r`d}tjt|d |j|d W d    q1 sT0    Y  nT|j|d}ttd|d}t	
|| |jjd	u sJ |j|j }	}
t	|	|
 d S )
Nr  r:   r)   r.   z8Columns with duplicate values are not supported in stackr   r   r1   F)r   r   r   r   r   r   r   r   r	   r   r4   r/   Z	is_uniqueassert_index_equal)r"   r   r0   Zexp_idxr   r$   r   r6   r7   Zlirir   r   r   test_stack_duplicate_index  s    ,z5TestStackUnstackMultiLevel.test_stack_duplicate_indexc                 C   s   t jdgd dgd  dgd  dgd  dgd d	gd  dgd
  d	gd  ddgd g d gg dd}ttjdddtjdddd|d}|d}|j|d}|r|jdd}t	|| d S )NFrir:   Satr-   SunThur)   ZDinnerZLunchrF   NoYes)r  r  r  )daytimeZsmokerr   r  rn   rG   )r:  r?   r1   r   r   r  )
r   r   r   r   r   r   r   r  r   r    )r"   r   r   r$   r6   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 sbJ |d jtjksvJ d S )	Nr   )r   fourr,   )r   r   r   Fr   r   )	r!   r  r   r   r4   rW   rH   r   rn   )r"    multiindex_dataframe_random_datar   framer$   r%   r6   r   r   r   test_stack_mixed_dtype  s    z1TestStackUnstackMultiLevel.test_stack_mixed_dtypec                 C   s   t g dg dg dg dtdd}d}tjt|d$ |g d	t}W d    n1 sf0    Y  |	 }|j
|d
}t|||jt d S )N)naiver  r  activer  r  )r*   r+   r+   r+   r*   r*   )r,   r-   r)   r:   r,   r)   )hir  byer  r  Zpeaceg      @)r   r   barcoder  extraz7DataFrameGroupBy.apply operated on the grouping columnsr   )r   r   r   r  r   )r   r   r   r   rx  DeprecationWarninggroupbyr\  r?   r   r   r4   r  r/   r]   rZ   )r"   r   r$   r   r6   r&   r  r   r   r   test_unstack_bug  s    
2z+TestStackUnstackMultiLevel.test_unstack_bugc                 C   sT   |}|  }|jjdksJ |jjddgks0J |j|d}|jj|jjksPJ d S )Nr   r   r   r   )r   r/   rW   r0   r\   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 }|dkrd|ini }tjtdd$ t||d	i | W d    n1 sZ0    Y  |dkr|jd d df }tjtdd$ t||d
i | W d    n1 s0    Y  d S )Nr   r   r   zdoes not match index namer   mistaker   r   )r  )r  )r_   r   r   KeyErrorgetattrr   )r"   r  r  r   r  r$   r  rb   r   r   r   #test_stack_unstack_wrong_level_name:  s    
2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_nameN  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    r4   )r"   r  r   r  r&   r6   r7   r   r   r   test_stack_level_nameU  s    
z0TestStackUnstackMultiLevel.test_stack_level_namec           	      C   sF  |}| ddg}| d d}t|| |jj|jjksBJ |d }| ddg}t||d  |jddg|d}|r|jdd}|dddd	}|jdd
}t|| |j	j|j	jksJ | 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   r   r    r0   r\   r   r  r  r  r/   r_   )	r"   r  r   r  r&   r7   rb   Zs_unstackedr  r   r   r   test_stack_unstack_multipled  s*    z6TestStackUnstackMultiLevel.test_stack_unstack_multiplec                 C   sV   |}| ddg}tjtdd" |jddg|d W d    n1 sH0    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_numbers  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 sH0    Y  tjtdd" |jd	d
g|d W d    n1 s0    Y  d S )Nr  r  zToo many levelsr   r-   r)   r   znot a valid level numberr   r  )r   r   r   
IndexErrorr   r  r   r   r   !test_stack_multiple_out_of_bounds  s    0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-01r  2013-02r  2013-03r  MZperiodrs  rW   ri   rj   r)   strr   r,   r-   r)   r:   rF   rd   r1   r,   r  r   )r  r  r  )r,   r)   rF   )r-   r:   rd   r  r.   period1)2013-122013-112013-102013-092013-082013-07period2)r!  r   r  r  r  r  r-   r:   rd   rF   )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  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,  r  r  r  )r  r  r-  r  r  r-  r"  r  )rd   rF   r:   r)   r-   r,   r  r1   r,   r  r   r,  r-  )r  r  r-  r  r  r-  zA A A B B B)rF   r,   rd   r-   rd   r,   )r:   r-   r)   r)   rF   r:   r.   )r,  r-  r,  r-  )r  r  r-  zA A B B)rF   r:   r-   r)   )r,   r-   rd   rF   )rd   r)   r,   r:   )	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  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 s0    Y  |djdd}
|
jd|d}|jd d dgf d jd|d}d|j_	t|| d S )Nr,   r)   r-   r*   r+   )z
2013-01-03z
2013-01-04z
2013-01-05r   rt  rd   )IDNAMEDATEVAR1r1  r/  ZParamsz&agg function failed [how->mean,dtype->r   zW-THUT)Znumeric_onlyr   r2  )ru   to_datetimer   r   r   integersr   r[   r0   rW   r   reescaper   r   r   Zresamplemeanr   r_   r   r    )r"   r   Zid_colrW   dateZvar1r$   multiZunstr   Z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}|s2d	ntj}| j||d
}t|t| ksbJ |rtj	t
dd" | jd|d
 W d    q1 s0    Y  n"| jd|d
}t||  d S )Na1a2b1b2r,   r   ri   rj   Fr  r  r   T)r   r[   r   r  r   r   r?   r  r   r   r   r   r    )r"   r   r$   r  r%   r   r   r   test_stack_dropna7  s    2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   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+   r   )r   r/   r\   r0   r   )r"   r   r$   r   r   r   "test_unstack_multiple_hierarchicalJ  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  r-   rt  )sizer)   i,  r:   ire   rF   i   rd   i  )ri   rj   r   r   r   r   )ri   rj   r   r   r   r   )r   r   r   r   r4  r   r[   r   )r"   ZNUM_ROWSr$   Zidfr   r   r   test_unstack_sparse_keyspaceZ  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   r,   r   r   r   r-   )r:   r-   r1   r:   r   )r   r   r   r   r   r   r   r?   r0   r   r   r    )r"   r   r5   r   r/   r$   r6   r  r   r   r   test_unstack_unobserved_keyso  s    
z7TestStackUnstackMultiLevel.test_unstack_unobserved_keysc              
   C   s   G dd dt j}| }|t d| ttdtdtdgd}d}tj	t
|dF tjtd	d |  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  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|i | tdd S )NDon't compute final result.)super__init__	Exception)r"   argsr  	__class__r   r   rJ    s    zjTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32.<locals>.MockUnstacker.__init__)r  r  r  rJ  __classcell__r   r   rM  r   MockUnstacker  s   rP  
_Unstacker)   r-   rR  r1   z$The following operation may generater   rH  )reshape_librQ  contextsetattrr   r   r  r   r   rx  r   r   r   rK  r   )r"   ZmonkeypatchrP  r  r$   r   r   r   r   /test_unstack_number_of_levels_larger_than_int32  s    
zJTestStackUnstackMultiLevel.test_unstack_number_of_levels_larger_than_int32r5   c                 c   s(   | ] }t jt g d |ddV  qdS )rU   r-   r   N)r   r   r  )ry   widthr   r   r   r    s   z$TestStackUnstackMultiLevel.<genexpr>r   	stack_levr  TFc                 C   s   t |g dg dgd}t|tdgd}|r2i nd|i}|j|fd|i|}|jD ]P}	|jD ]D}
|j|	|
f }|	|
| f}|
d|  }|j||f }||ks`J q`qVd S )	Nr   r   r   r:   )r0   r`   r  r   r,   )r   r   r2   r   r/   r0   r_   )r"   r5   rX  r  r   r0   r$   r  Z
df_stackedrowr   r7   Z
result_rowZ
result_colr6   r   r   r   %test_stack_order_with_unsorted_levels  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 szJ d S )
N)ri   r   rj   )rj   ri   r   r)   r   rF   rK   )r0   r/   r`   c                 3   sL   | ]D} j D ]8} j||f  jd dj||d  f|d f kV  qqdS )r   r   r,   N)r0   r_   r   )ry   rY  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/   )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   r,   )r,   r   r,   r   r   r   r:   )r,   r   r-   r)   )r0   r`   r/   r  Tr   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)   r^  r1   )r   r   r2   r   r   r    )
r"   r   r5   rX  r0   r$   r  r6   r   r7   r   r   r   1test_stack_order_with_unsorted_levels_multi_row_2  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 )NrF   c                 S   s   g | ]}d | qS )r+   r   r  r   r   r   r{     r|   zVTestStackUnstackMultiLevel.test_stack_unstack_unordered_multiindex.<locals>.<listcomp>c                 S   s   g | ]}d | qS r6  r   r  r   r   r   r{     r|   r+   r*   r   r   r<   r,   r   r   r   Za0Zb0r;  r=  r<  r>  a3Zb3Za4Zb4rq  )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"   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   sh   |}d|d< d|d< | d}|d jtjks2J |sH|d jtjksPndsPJ |d	 jtjksdJ d S )
Nr   r   r-   r   r  r  )r   r,   r   )r   r,   )r   rH   r   rn   Zobject_)r"   r  r   r  r&   r   r   r   test_unstack_preserve_types  s    
z6TestStackUnstackMultiLevel.test_unstack_preserve_typesc                 C   sn  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sxJ |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sJ 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sjJ d S )N  r-   rf   r   r,   r   rB  r1   )rc  r-   r   r:   )r   r\  r   r   r   r	   r   r   r   r   r4   r  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 g dg ddgd dddg}d|d	< |sHt|jjd
ksHJ |d}|d d|d< t g dtjdddggt	ddgddt
jg dd dgdd}|r|d d|d< |d d|d< t|| d S )N)ri   ri   rj   )cacbrf  r   r)   )r*   r+   r  r*   r+   r,   is_r-   rg  re  r   )      $@ri  r   r   ri  r  r   ri   rj   r   ))r  re  r  rf  rh  rg  rf  r   r.   rj  r^   rk  )r   r[   r?   r@   rA   r   r  r   r>   r   r   rY   r]   r   r    )r"   rB   r$   r6   r7   r   r   r   +test_unstack_with_missing_int_cast_to_float5	  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:   r,   r-   r  )L1L2L3r<   )rm  rn  ro  )Zn1Zn2Zn3Nrm  )r5   r   rn  ro  )r<   r,   r   )r-   r)   r   r,   r   )	r   r[   r/   Z
set_levelsr   r  r   r   r  )r"   r   Z
new_levelsr6   r7   r   r   r   test_unstack_with_level_has_nanU	  s$    z:TestStackUnstackMultiLevel.test_unstack_with_level_has_nanc                 C   s   t tddgtg dd}|jd|d}|rxt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 )Nr,   rF   ))r   NN)r   r-   r   )r   r-   r,   )r   r)   r   )r   r)   r,   r   r-   r   r   r  r   r  )rK   r   r,   r   r)   )r   N)r   r   r^  )rq  )r   r-   )r   r)   r.   )
r   r   r  r   rY   r   r   r>   r   r    )r"   r   r$   r6   r/   r0   r7   r   r   r   $test_stack_nan_in_multiindex_columnsm	  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
}|rt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}nt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   r)   rF   rd   re   ZababababZccddccddr   ZaabbaabbZcdcdcdcd)r   r   ru   r   rl   r   r   r   r   r   r>   r   r    )r"   r   r   r$   r6   r7   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}|rt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:   r-   ri   rk   r  r  r   r   r,   Numr   r  r   r+   r   r   r   r  )r,   r+   r  r  r9   rj   r   )r   r   r   r   r   rY   r>   r   rn   r   r   r    )r"   r   Zdf_nanr6   r/   r7   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 )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_columns	  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 )NZITAZFRAA1A2)ZCRTZDBTNET)PAEVARTYPr   ZVALUE)r`   r/   r0   r{  r|  r   i'  )ZA0ry  r   r,   r   )r   r3   rl   r2   r?   r   r   r0   r  r_   r   r  r   r4   )
r"   r   rz  r{  r|  r   VZDFr6   r7   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 )NZ54511Z54515rZ  t_meanstationelementr   r   r  r   )rQ     r      )r   r  r      )i1     r&  r  r  r   r   )r   ri  ri  g      "@g     s@g     [@rG   )r  r  r  r  r  r  )rZ  r  r1   )r   r3   r   r   r   r   ru   Z
Int64Dtyper   r]   r^   r   r    r0   ZFloat64Dtyper5   rW   )r"   r   r0   r/   Zarrr$   r6   r7   r   r   r   test_stack_nullable_dtype
  s8    "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*   r,   r-   redblue)r<   r   r=   r   r  r1   r<   )r  r*   )r,   r  )r-   r  r   r=   r   )r   r   r   r   rY   r   r    )r"   Zarraysr   r$   r6   r7   r   r   r   test_unstack_mixed_level_names5
  s    

z9TestStackUnstackMultiLevel.test_unstack_mixed_level_names)9r  r  r  r  r   r  r  r  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?  rA  rE  rF  ZslowrV  r   chainfrom_iterabler2   rZ  r]  r_  ra  rb  rd  rl  rp  rr  rs  ru  rv  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:   rF   rd   )re   rf   r   )r  r  r  r   r   )	r,   r-   r)   r:   rF   rd   re   rf   r   rU   )	r   r   r   r,   r,   r,   r-   r-   r-   )	r   r,   r-   r   r,   r-   r   r,   r-   r   r1   )r   r   r	   r   r   r4   )r   r$   r6   r7   r   r   r   test_stack_tuple_columnsC
  s    r  zdtype, na_valuer  test_multiindexc                 C   s   |r t dt|g| dg }nt|g| d}tddgi|d}|jdd}|r|t t|g| dt|g| dtdgg}nt t|g| dtdgg}td|d}t|| d S )Nr-   rG   r*   r,   r1   Tr   )r   r   r   r   r   r	   r   r4   )rH   Zna_valuer  r/   r$   r6   r   r7   r   r   r   test_stack_preserves_naS
  s&    r  )1r   r   r5  numpyr   r   Zpandas._libsr   Zpandas.errorsr   Zpandasru   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingr   Zpandas.core.reshaper   rS  Zfixturer   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   <module>   s   $	
          
%





&

        	