U
    _{f1W                    @   s  d dl mZm Z mZ d dlmZ d dlZd dlZd dlm	Z	 d dl
Zd dl
mZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ ejd	d
gddd Z ejd gd dgd fe!d de!ddfgddd Z"G dd dZ#G dd dZ$dS )    )datedatetime	timedelta)productN)PerformanceWarning)Categorical	DataFrameGrouperIndex
MultiIndexSeriesconcat
date_range)CategoricalDtype)reshapepivot_tableTF)paramsc                 C   s   | j S N)param)request r   ^/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/pandas/tests/reshape/test_pivot.pydropna   s    r            c                 C   s   | j \}}ttj|||S r   )r   r   pdIntervalIndexfrom_arrays)r   closedleftrightr   r   r   interval_values#   s    
r#   c                   @   s*  e Zd Zej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dd Zdd Zdd Zdd Zdd Zejdd d!d"gfd d!d"d gfd#d!d"d gfgd$d% Zd&d' Zd(d) Zd*d+ Zejd,d-d.gd/d0 Zejd,d-d.gd1d2 Zejd,d-d.gd3d4 Zd5d6 Zejd,d-d.gd7d8 Zd9d: Zejd;d<d=ge !d<d=ge"d<d=ge#d<d=ggejd,d-d.gd>d? Z$ejd;d@d<ge !d@d<ge"d@d<ge#d@d<ggejd,d-d.gdAdB Z%dCdD Z&ejj'dEdFejd,d-d.gdGdH Z(ejd,d-d.gdIdJ Z)dKdLgdMgdNfdOdPZ*dQdR Z+dSdT Z,ejdUdKe j-dVdVdWdWgdXdXdYdYgge#d@dNdZdNgdKd[fdKdLgd\d]d^d_d`dadbgdcdddedbdbd_gge.j/dfdgdhdidjdkgdKdLgdlfgdmdn Z0dodp Z1dqdr Z2ejdsdtdudvdwgdxdy Z3dzd{ Z4d|d} Z5d~d Z6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<ejddZdddddggdd Z=dd Z>dd Z?dd Z@dd ZAejdeBdddd ZCejdeBdd^dd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOejdd\e jPfde j-fde jQfd\dge jPe j-gfd\dge jPe jQgfddge jQe j-gfgdd ZRejjSdd ZTdd ZUddÄ ZVejdd-d.gddƄ ZWddȄ ZXddʄ ZYdd̄ ZZdd΄ Z[ddЄ Z\dd҄ Z]ejdd-d.gddՄ Z^ddׄ Z_ddل Z`dS )TestPivotTablec                 C   sp   t dddddddddddgdddddddddddgdddddddddddgtjdtjdtjddS )	Nfoobaronetwodullshiny   )ABCDEF)r   nprandomrandn)selfr   r   r   data*   sT    


zTestPivotTable.datac                 C   s   ddg}d}t |d|||d}|j d|||d}t|| t |d||d t|dkrn|jjt|kstn|jj|d kstt|dkr|j	j|kstn|j	j|d kst|
||g d tj }t|| d S )	Nr,   r-   r.   r/   )valuesindexcolumnsobserved)r7   r8   r:   r   r   )r   tmassert_frame_equallenr8   namestupleAssertionErrornamer9   groupbyaggr2   meanunstack)r5   r:   r6   r8   r9   tabletable2expectedr   r   r   test_pivot_table[   s2            zTestPivotTable.test_pivot_tablec                 C   s   t tdtddddddgd}|jd	d
dtjdd}|jd|_|jd|_|jd|_|j	d|_	|jd	d
dtjd|d}t
|| d S )NZabcdeZfghijr      r   r      col1col2col3rM   rO   rN   r   )r8   r7   r9   aggfunc
fill_valuecategory)r8   r7   r9   rP   rQ   r:   )r   listr   r2   sumr8   astyper9   rM   rN   r;   r<   )r5   r:   dfrH   resultr   r   r   +test_pivot_table_categorical_observed_equalw   s.        	z:TestPivotTable.test_pivot_table_categorical_observed_equalc                 C   s   t dddgdddgddd	gd
}|jdtjd}|jdtjdj}t|| |jdddid}|jdddidj}t|| d S )Nabcxyzr   rJ   r   )rowscolsr7   r`   )r9   rP   r8   rP   r7   rD   )r   r   r2   rT   Tr;   r<   )r5   rV   rsZxpr   r   r   test_pivot_table_nocols   s    z&TestPivotTable.test_pivot_table_nocolsc                 C   s   t ddddddddddd	d
dddddddddddddd}|jddddgdd}|jdddgddd}tjdddddd d!d"d#d$d%d&gddgd'}t|j| t|j| d S )(Ni`  i iP  i0u  )r   r   rJ   r   r,   r-   r.   i[ i] i\ i^ rY   rZ   r[   di i  i@B )amountcustomermonthr   quantityri   rh   rg   r   F)r   )r,   rY   )r,   rZ   )r,   r[   )r,   re   )r-   rY   )r-   rZ   )r-   r[   )r-   re   )r.   rY   )r.   rZ   )r.   r[   )r.   re   r>   )r   r   r   from_tuplesr;   assert_index_equalr9   r8   )r5   rV   Zpv_colZpv_indmr   r   r   test_pivot_table_dropna   sL    	      z&TestPivotTable.test_pivot_table_dropnac                 C   s   t ddddgdddgdd}t ddddgdddgdd}t||d	d
ddgd}t|dddgdd}tj||gddgd}tdd	d
ddgi|d}t|| d S )NrY   rZ   r^   T
categoriesorderedr[   re   r]   r   rJ   r   r   )r,   r-   r7   r7   r,   r-   )r7   r8   r   rj   r8   )r   r   r   r   r   r;   r<   )r5   Zcat1cat2rV   rW   Z	exp_indexrH   r   r   r   test_pivot_table_categorical   s    
  
  z+TestPivotTable.test_pivot_table_categoricalc                 C   s   ddddg}t dddddddddg	dddddddddg	tdd	d
}|d t|dd|d< |jddd|d}tdddgdd}|t|dd}tdddgdd}t dddgdddgdddgg||d}|s|jt|dd}t	|| d S )NrY   rZ   r[   re   r   rJ   r   r   	   r,   r-   r.   r,   Frq   r-   r.   )r8   r9   r7   r   rA      r      rK      r8   r9   r9   float)
r   rangerU   CDTr   r   Zreindexr   r;   r<   )r5   r   rp   rV   rW   expected_columnsexpected_indexrH   r   r   r   $test_pivot_table_dropna_categoricals   s(    z3TestPivotTable.test_pivot_table_dropna_categoricalsc                 C   s   t ttjddddgddgddddddd	gd
}|jdd|d}t dddgittjddgddgddddd}t|| d S )NlowhighTro                 ?       @      @      @r,   r-   r,   r-   r8   r7   r   r   r   rx   rr   )	r   r   r2   nanr   r
   
from_codesr;   r<   r5   r   rV   rW   rH   r   r   r   %test_pivot_with_non_observable_dropna   s,    
  
z4TestPivotTable.test_pivot_with_non_observable_dropnac                 C   s   t tdddddgdddgddtdd}|jdd	|d
}t d	dddgittjdddgdddgddddd}|s|d	 t|d	< t	|| d S )Nr!   r   r   Tro   rK   r   r,   r-   r   rJ   r   r   r   rx   rr   )
r   r   r   r   r
   r   rU   r~   r;   r<   r   r   r   r   /test_pivot_with_non_observable_dropna_multi_cat  s0      	z>TestPivotTable.test_pivot_with_non_observable_dropna_multi_catc                 C   sX   t |dd}|jdd|d}t ddit| ddd}|sH|t}t|| d S )Nr   r   r,   r-   r   rx   rr   )r   r   r
   uniquerU   r~   r;   r<   )r5   r#   r   rV   rW   rH   r   r   r   test_pivot_with_interval_index#  s    
z-TestPivotTable.test_pivot_with_interval_indexc                 C   s   t jddddgddddg}ttjdddtjdddddgt|d	d
jddd}t	|ddddd	d}|d }t
dddgtt ddt dddgdddtjd}t|| d S )Nr   r   rJ   r   dtyperY   rZ   Trw   F)Z	ascendingrv   r.   r-   r,   rT   r8   r9   r7   rP   marginsAllr   rz   
   rx   )r8   rA   r   )r   r   r   r   r2   arangeZintpr   Zsort_valuesr   r   r
   ZIntervalr;   assert_series_equal)r5   Zordered_catrV   Z	pivot_tabrW   rH   r   r   r   &test_pivot_with_interval_index_margins,  s2    

      z5TestPivotTable.test_pivot_with_interval_index_marginsc                 C   s4   |j d|j|jd}|j dddd}t|| d S )Nr/   r|   r,   r.   )r   r,   r.   r;   r<   r5   r6   rW   rH   r   r   r   test_pass_arrayF  s    zTestPivotTable.test_pass_arrayc                 C   s<   |j ddd |jd}|j d|jd dd}t|| d S )Nr/   c                 S   s   | d S )NrK   r   r\   r   r   r   <lambda>L      z3TestPivotTable.test_pass_function.<locals>.<lambda>r|   rK   r.   )r   r.   r8   r;   r<   r   r   r   r   test_pass_functionK  s    z!TestPivotTable.test_pass_functionc                 C   sF   ddg}d}t |||d}|||g tj }t|| d S )Nr,   r-   r.   r|   )r   rB   rC   r2   rD   rE   r;   r<   )r5   r6   r8   r9   rF   rH   r   r   r   test_pivot_table_multipleP  s
    z(TestPivotTable.test_pivot_table_multiplec                 C   s  t ddddgddddgddddgd	}|jd
 dks:tt|d
dgdgdtjd}|j}ttdgd tt	dddd}t
|| t ddddgddddgddddgd	}|jd
 dkstt|d
dgdgdtjd}|j}ttdgd tt	dddd}t
|| d S )Ncatbatr   rJ   r   r   rY   rZ   )rY   vir   int64r   r   )r7   r8   r9   rQ   rP   abrx   rr         ?      @      @      @float64)r   dtypesr@   r   r2   rT   r   r   r
   rS   r;   r   rD   )r5   fr^   rW   rH   r   r   r   test_pivot_dtypesW  sH    


     $


     $z TestPivotTable.test_pivot_dtypeszcolumns,valuesbool1float1float2bool2c                 C   sj   t jdt jd}t||d |dk|dkd}| jd||d}t|j}d	d
 |D }||ksftd S )NrK   r   r   rJ   r   )r   r   r   r   r8   r8   r9   r7   c                 S   s   i | ]}|t d qS )r   )r2   r   ).0colr   r   r   
<dictcomp>  s      z=TestPivotTable.test_pivot_preserve_dtypes.<locals>.<dictcomp>)	r2   r   r   r   reset_indexr   dictr   r@   )r5   r9   r7   r   rV   Zdf_resrW   rH   r   r   r   test_pivot_preserve_dtypesz  s    
  
z)TestPivotTable.test_pivot_preserve_dtypesc                 C   sx  t dddddg}tdddddd	gi|d
}|j|jj|jjd}tddg}|j	|j
d tjdd}tddgdtjggtddgtjd|d}t|| tddddd	gtddd	dd|d
}|j|jjtdddd}tdt dfg}d dg|_tddgtddgtjd|d}t|| |jtddtdddd}tdgt jdgdd|d}t|| d S )Nz
2011-01-01z
2011-02-01z
2011-01-02r,   r   rJ   r   r   rK   rr   r|   )r,   r   )r,   rJ   )levelr   r   r   r   r/   )freqperiods)r,   dtr   M)keyr   z
2011-01-31      
@r   z
2011-12-31)r   DatetimeIndexr   r   r8   rh   dayr   rk   Z
set_levelslevelsrU   r2   int32r   r
   r;   r<   r   r	   	Timestampr>   )r5   idxrV   resZexp_columnsexpr   r   r   test_pivot_no_values  sR     
   
  z#TestPivotTable.test_pivot_no_valuesc                 C   sJ   t |ddgdddgdd}t |jdgd	d
dddgdd}t|| d S )Nr/   r0   r,   r-   r.   r   )r7   r8   r9   rQ   r1   r   axis)r8   r9   rQ   )r   dropr;   r<   r   r   r   r   test_pivot_multi_values  s           z&TestPivotTable.test_pivot_multi_valuesc                    s    fdd}|t jt jg}|t j}|t j}t||gddgdd}t||  fdd}|t jt jg}|t j}|t j}t||gddgdd}t|| d S )Nc                    s   t  ddgddgd| dS )Nr/   r0   r,   r-   r.   r7   r8   r9   rP   r   funcr6   r   r   r     s       z;TestPivotTable.test_pivot_multi_functions.<locals>.<lambda>rD   stdr   )keysr   c                    s   t  ddgddgd| ddS )Nr/   r0   r,   r-   r.   T)r7   r8   r9   rP   r   r   r   r   r   r   r     s   )r2   rD   r   r   r;   r<   )r5   r6   r   rW   ZmeansZstdsrH   r   r   r   test_pivot_multi_functions  s    



z)TestPivotTable.test_pivot_multi_functionsmethodTFc                 C   s   t j}tdd|dgddddgdd	d
dgd}|rD|jdddd}ntj|dddd}t||d
|gd|||g|d	||g|||dggt|dddgddtddddgddd}t|| t|jdddd|j d S )NZR1ZR2ZR4C1C2ZC3ZC4r            rY   rZ   r[   rY   rZ   r[   r   rx   r|   )	r2   r   r   pivotr   r
   r;   r<   rb   )r5   r   r   rV   rW   rH   r   r   r   test_pivot_index_with_nan  s*    







z(TestPivotTable.test_pivot_index_with_nanc                 C   s  t tdddddtd d}|d td |d	< tj |jd
< |jd< tj |jd< |jd< |rz|jdd	dd}ntj|dd	dd}|	 j
 t|kst| D ]*\}}|j|d |d	 f |d kstq|r|jd	ddd}ntj|d	ddd}t||j d S )Nz
2014-02-01ry   r/   )r   r   d   )rY   r[   rY   z
2014-02-02rZ   )r   rY   )r   rY   r   rZ   )r   rZ   r[   r   )r   r   r2   r   r   r   r   locr   Znotnar7   rT   r=   r@   Ziterrowsr;   r<   rb   )r5   r   rV   pv_rowrW   r   r   r   test_pivot_index_with_nan_dates  s$    $z.TestPivotTable.test_pivot_index_with_nan_datesc                 C   s  t tdddddtdddddtdddddtdddddgtdddddtdddddtdddddtdddddgtjddd	tjddd	d
}|d dd |d< |d dd |d< tddddg}tjddgd ddd}t	||g}t ddddgddddggtjddgddd|d}|r@|j
ddd}ntj
|ddd}t|| t ddgddggtjddgdddtjddgdddd}|r|j
dddd}ntj
|dddd}t|| d S )N  r   ru   r   rJ     r   r   r   )dt1dt2data1data2r   c                 S   s   t j| ddS N
US/Pacifictzr   r   re   r   r   r   r   +  r   z3TestPivotTable.test_pivot_with_tz.<locals>.<lambda>r   c                 S   s   t j| ddS N
Asia/Tokyor   r   r   r   r   r   r   ,  r   r   r   z2014/01/01 09:00z2014/01/02 09:00r   )rA   r   r   z2013/01/01 09:00z2013/01/02 09:00r   r|   r   )r   r   r2   r   applyr
   r   r   r   r   r   r;   r<   r5   r   rV   exp_col1exp_col2exp_colrH   r   r   r   r   test_pivot_with_tz  sl    
        
z!TestPivotTable.test_pivot_with_tzc              
   C   s  t dtjdddddtjdddddtjdddddtjdddddtjd	dddg}|d
 }|jdd }t|d
 d
dg|gtj	d}t tjdddtjdddggt
dgddtjtjdddtjdddgd
dd}t|| d S )NZaaz2016-08-12 13:00:00-0700r   r   )uidtsz2016-08-12 08:00:00-0700z2016-08-12 14:00:00-0700z2016-08-25 11:00:00-0700z2016-08-25 13:00:00-0700r   c                 S   s   | j dddddS )Nr   )hourminutesecondmicrosecond)replacer   r   r   r   r   m  r   z8TestPivotTable.test_pivot_tz_in_values.<locals>.<lambda>r   r   rx   z2016-08-12 00:00:00z2016-08-25 00:00:00r|   )r   r   r   	set_indexr   r   mapr   r2   minr
   r   r;   r<   )r5   rV   ZminsrW   rH   r   r   r   test_pivot_tz_in_valuesQ  sR    z&TestPivotTable.test_pivot_tz_in_valuesc              	   C   s  t tddtddtddtddgtddtddtddtddgtjddd	tjddd	d
}tddddg}tjddgd ddd}t||g}t ddddgddddggtjddgddd|d}|r|j	ddd}ntj	|ddd}t
|| t ddgddggtjddgdddtjddgdddd}|r`|j	dddd}ntj	|dddd}t
|| d S )Nz
2013-01-01r/   z
2013-01-02z2013-01r   z2013-02r   r   r   )p1p2r   r   r   r   rJ   r
  )rA   r   r   r   r   r	  r|   r   )r   r   Periodr2   r   r
   ZPeriodIndexr   r   r   r;   r<   r   r   r   r   test_pivot_periods  sH    







z!TestPivotTable.test_pivot_periodsc                 C   s   t ddddgtdtdtdtdgdd}t dtdddgdd	ttdtddgd
d	d}|jdd
ddd}t|| d S )Nr   rJ   Z2019Q1Z2019Q2r   )rY   rZ   r\   r   rY   rx   rZ   )r6   r8   r9   r\   T)r8   r9   r7   r   )r   r   r  r
   r   r;   r<   )r5   rV   rH   rW   r   r   r   test_pivot_periods_with_margins  s"    
z.TestPivotTable.test_pivot_periods_with_marginsr7   bazzooc           	   
   C   s   t ddddddgddddddgdddd	d
dgddddddgd}|rX|jdd|d}ntj|dd|d}ddddddgd	d
ddddgg}tddgdd}tddgdddggddddddgddddddggd dgd}t |||dd}t|| d S )Nr'   r(   r,   r-   r.   r   rJ   r   r   rK   ry   r\   r]   r^   qwtr%   r&   r  r  r%   r&   r   r6   rA   r  r  r   r   codesr>   objectr6   r8   r9   r   )r   r   r   r
   r   r;   r<   	r5   r7   r   rV   rW   r6   r8   r9   rH   r   r   r    test_pivot_with_list_like_values  s&    	 z/TestPivotTable.test_pivot_with_list_like_valuesr&   c           	   
   C   s,  t ddddddgddddddgdddd	d
dgddddddgd}|rX|jdd|d}ntj|dd|d}tjdtjd	gtjdtjdgtjdtjd
gdtjdtjgdtjdtjgdtjdtjgg}tddddddgdd}tddgddggddddgddddggd dgd}t |||dd}t|| d S )Nr'   r(   r,   r-   r.   r   rJ   r   r   rK   ry   r\   r]   r^   r  r  r  r  r  r%   r   r  r&   r  r   r  r  r  )	r   r   r   r2   r   r
   r   r;   r<   r  r   r   r   %test_pivot_with_list_like_values_nans  s2    	z4TestPivotTable.test_pivot_with_list_like_values_nansc              	   C   sR   t dddgdddgdddgd}d}tjt|d	 |jd
dd W 5 Q R X d S )NrY   rZ   r[   r   rJ   r   rL   z=pivot\(\) missing 1 required keyword-only argument: 'columns'matchrM   rO   )r8   r7   r   pytestraises	TypeErrorr   )r5   rV   msgr   r   r   #test_pivot_columns_none_raise_error  s    "z2TestPivotTable.test_pivot_columns_none_raise_errorzBMultiIndexed unstack with tuple names fails with KeyError GH#19966reasonc              	   C   s  t ddddddgd}dd	dd
gddddgddddgdd	ddgddddgddddgg}tddgddggddddgddddggd}t|||dd}|r|jdddd}ntj|dddd}tddgddgdtddgddgdtddgddgdd }t|}t|| d S )!Nr   r   rJ   r   r   rK   r   r'   r,   r\   r-   r]   r.   r^   r(   r  r  ry   r  r&   r  firstr  )r   r  r  r  )r&   r&  )r&   r  )r  r&  r   rr   rv   )r
   r   r   r   r   r   r;   r<   )r5   r   r8   r6   r9   rV   rW   rH   r   r   r   test_pivot_with_multiindex$  s>    





z)TestPivotTable.test_pivot_with_multiindexc              
   C   s   t ddddddgddddddgdddd	d
dgddddddgd}tjtdd. |rh|jdddd ntj|dddd W 5 Q R X d S )Nr'   r(   r,   r-   r.   r   rJ   r   r   rK   ry   r\   r]   r^   r  r  r  r  z^\('bar', 'baz'\)$r  r  r%   )r&   r  r   )r   r  r   KeyErrorr   r   )r5   r   rV   r   r   r   test_pivot_with_tuple_of_valuesN  s    z.TestPivotTable.test_pivot_with_tuple_of_valuesr,   r-   r.   r   c                 C   s   |j |jd d |f }|||  }tj||dd |j|ksHt| }|j |df j	d d }	|||  }
tj|	|
dd |	j|dfkst|j |df|f }||  }||kstd S )Nr   FZcheck_names )
r   r8   rB   rD   r;   r   rA   r@   Z
sort_indexZiloc)r5   rW   Z
values_colr6   r8   r9   margins_colZcol_marginsZexpected_col_marginsZindex_marginsZexpected_ix_marginsZgrand_total_marginsZexpected_total_marginsr   r   r   _check_output`  s    	zTestPivotTable._check_outputc                 C   s   |j dddgddtjd}| |d| |j dddgddtjdd}| j|d|dd	 |j ddgddtjd
}|jjd D ]}| || || qzd S )Nr/   r,   r-   r.   T)r7   r8   r9   r   rP   ZTotals)r7   r8   r9   r   rP   margins_name)r,  r8   r9   r   rP   r   )r   r2   rD   r-  r9   r   )r5   r6   rW   rF   	value_colr   r   r   test_marginsy  s2           zTestPivotTable.test_marginsc              	   C   s  dd |j D |_ tjtdd |jddgdtjd W 5 Q R X |jd	d
jddgdtjd}|j D ]&}|jd|f }|||  ksft	qftjtdd |jddgddd W 5 Q R X |jd	d
jddgddd}dD ]&}|jd|f }|||  kst	qd S )Nc                 S   s   g | ]}|d  qS )rJ   r   )r   kr   r   r   
<listcomp>  s     z.TestPivotTable.test_no_col.<locals>.<listcomp>Could not convertr  ZAABBT)r8   r   rP   CCr}   r   r+  rD   )ZDDZEEZFF)
r9   r  r   r!  r   r2   rD   r   r   r@   )r5   r6   rF   r0  Ztotalsitemr   r   r   test_no_col  s*       
  zTestPivotTable.test_no_colz*columns, aggfunc, values, expected_columns      @g@       @g@r%   rx   rT   ru         rK   ry   r+             )r&   r'   )r&   r(   )r&   r   )r%   r'   )r%   r(   )r%   r   rj   c                 C   s   t dddddddddg	dddddddddg	dddddddddg	dddd	d	d
dddg	dd
dddddddg	d}|dkrtjtdd |j|d|d W 5 Q R X d|kr|jdd}|jddj|d|d}t |tddg|d}t|| d S )Nr%   r&   r'   r(   smalllarger   rJ   r   r   rK   ry   rz   r{   ru   r,   r-   r.   r/   r0   rT   r4  r  T)r9   r   rP   r-   r}   r.   r/   r0   r|   )	r   r  r   r!  r   r   r
   r;   r<   )r5   r9   rP   r7   r   rV   rW   rH   r   r   r   %test_margin_with_only_columns_defined  s:    "  z4TestPivotTable.test_margin_with_only_columns_definedc                 C   s   |  }tt|d t|dd|dddg< ttddgdd	gd
g }tj	|dd}t
dddddgdddddgd|djddd}|d |d  |d< |jdddgdd tjdd!}t|| d S )"Nr   i8r/   r0   r1   r&   r%   r'   r(   r7  r   rj         ru   -   !   r   $   3   x   r)   r*   rr   r.   r   r   r)   r*   r   r,   r-   Tr7   r8   r9   r   rP   rQ   )copyr2   r   r=   r   rU   rS   r   r   rk   r   rename_axisr   rT   r;   r<   )r5   r6   rV   mi_valmirH   rW   r   r   r   test_margins_dtype  s*    .  	z!TestPivotTable.test_margins_dtypec                 C   s   t tddgddgdg }tj|dd}tddd	dd
gd	dd	d	dgd|djddd}|d |d  |d< |jdddgddtdd}t	|| d S )Nr&   r%   r'   r(   r7  r   rj   r   rJ   rK   r   ry   rM  rr   r.   r   r)   r*   r   r/   r,   r-   TrN  )
rS   r   r   rk   r   rP  r   r=   r;   r<   )r5   r6   rQ  rR  rH   rW   r   r   r   test_margins_dtype_len  s&      	z%TestPivotTable.test_margins_dtype_lenr`   )r   rJ   rY   rZ   r   )rY   r   c              	   C   sx   t |d dddg|d dddgddddgi}|jd|d	}t dddggtjd
ddg|dtdgd}t|| d S )Nr   r   rJ   r   r   r   rK   ry   )r7   r9   )r   r   )rJ   rJ   )r   r   rj   r9   r8   )r   r   r   rk   r
   r;   r<   )r5   r`   df2rW   rH   r   r   r    test_pivot_table_multiindex_only  s    .
z/TestPivotTable.test_pivot_table_multiindex_onlyc                 C   sZ   t dddd}ttjdtjd|d}|jddgdd	}|jjd
 |sVt	d S )Nz
2016-01-01r   zEurope/Amsterdam)r   r   rv   r-   r.   F)r8   r   r   )
r   r   r2   r3   r4   r   r8   r   equalsr@   )r5   ZdtirV   rW   r   r   r   test_pivot_table_retains_tz#  s     z*TestPivotTable.test_pivot_table_retains_tzc                    s   t j ttddgdddgddg fdd	td
D dg}t|}|jddddgdgd}|jtd}|jddddgdgd}t	j
||dd d S )Nr%   r&   r,   r-   r.   x1Zx2c                    s   g | ]} t | qS r   )r   )r   r   r   r   r   r3  4  s     z=TestPivotTable.test_pivot_integer_columns.<locals>.<listcomp>r   r   r   r   r   r   rJ   )r7   r8   r9   r}   40132Fr*  )r   r  rS   r   r   r   r   renamestrr;   r<   )r5   r6   rV   rF   rW  rG   r   r   r   test_pivot_integer_columns+  s    	z)TestPivotTable.test_pivot_integer_columnsc              
   C   s   t ddddddddgd ddddddddgd dgd dgd  d tjd	d
}|jddddgd}|dddgd  }|ddjddd}t	
|| d S )NrY   rZ   rJ   r   r   r%   r   r&      )rY   rZ   r[   valuere  r[   r|   all)r   how)r   r2   r3   r4   r   rB   rD   rE   r   r;   r<   )r5   r6   rF   groupedrH   r   r   r   test_pivot_no_level_overlap@  s    
	z*TestPivotTable.test_pivot_no_level_overlapc           
   
   C   s@  d}t dtfdtfdtfdtfdtfdtfdtfg}t jd	d
dddddddg	dtfdtfgd}t j||d}t jdt	||}|d | |d< |d | |d< t
tdddtddd}|t jdt	|| }|j|d< |j|d< |j|d< t jdd||d< t|}|jdddgdddgdd}	|	jjs<td S )Ni'  r
   SymbolYearMonthZDayQuantityZPrice)SP500ZADBE)rn  ZNVDA)rn  ZORCL)NDQ100ZAAPL)ro  ZMSFT)ro  ZGOOG)FTSEzDGE.L)rp  zTSCO.L)rp  zGSK.Lr   r   i  r   i  rF     r   r   rD   r8   r9   rP   )r2   r   r  intr~   arrayemptyr3   randintr=   r   r   yearrh   r   Z	lognormalr   r   r9   Zis_monotonic_increasingr@   )
r5   nr   ZproductsitemsZiproductZdrdatesrV   pivotedr   r   r   test_pivot_columns_lexsortedR  sT    


z+TestPivotTable.test_pivot_columns_lexsortedc                 C   sH   dgdgd}| ddg|d}|jdd|d}t|| d S )Nr   rT   r/   r0   r,   r-   rr  )rB   rC   rE   r   r;   r<   )r5   r6   r   rH   rW   r   r   r   test_pivot_complex_aggfunc  s    z)TestPivotTable.test_pivot_complex_aggfuncc                 C   sD   |ddg j ddgtdd}| }t|d d |d ks@td S )Nr,   r-   T)r8   rP   r   r   )r   r=   tolistrT   r@   )r5   r6   rW   Zresult_listr   r   r   test_margins_no_values_no_cols  s      z-TestPivotTable.test_margins_no_values_no_colsc                 C   s@   |dddg j ddgdtdd}|j ddddd	gks<td S )
Nr,   r-   r.   Tr8   r9   rP   r   r   r   r         &@r   r=   r   r  r@   r5   r6   rW   r   r   r   test_margins_no_values_two_rows  s       z.TestPivotTable.test_margins_no_values_two_rowsc                 C   s6   |ddg j ddtdd}|j dddgks2td S )Nr,   r-   Tr  r         @r  r  r  r   r   r   &test_margins_no_values_one_row_one_col  s       z5TestPivotTable.test_margins_no_values_one_row_one_colc                 C   sd   ddddddddd	d
dg|d< |ddddg j ddgddgtdd}|j dddddgks`td S )NrY   rZ   r[   re   er   ghr   jr2  r/   r,   r-   r.   Tr  r   r   r   r  r  r  r   r   r   'test_margins_no_values_two_row_two_cols  s       z6TestPivotTable.test_margins_no_values_two_row_two_colsmargin_namer'   i  NrY   rZ   c              	   C   s   d| d}t jt|d  t|dddgdgd|d	 W 5 Q R X t jt|d  t|ddgddgd|d	 W 5 Q R X t jt|d t|ddgdgd|d	 W 5 Q R X d S )
NzConflicting name "z3" in margins|margins_name argument must be a stringr  r/   r,   r-   r.   T)r7   r8   r9   r   r.  )r  r   
ValueErrorr   )r5   r  r6   r"  r   r   r   -test_pivot_table_with_margins_set_margin_name  s:    
z<TestPivotTable.test_pivot_table_with_margins_set_margin_namec                 C   sz  t d d ddddddddgtdddtdddtdd	dtdd	d
tdd	dtdd	d
tddd
tddd
gdd}t tjd	ddgddddtjtdddgddd d}d|j	_
d|j_
t|tddddtjd}t|| t|dtdddtjd}t||j t tdtjdddtjgd
dtjtdddtdddgddd d}d|j	_
d|j_
|r|d d|d< t|tddddtjd}t|| t|dtdddtjd}t||j | }t|tdddddtjd}t|| t|dtddddtjd}t||j d}tjt|d" t|tdddddtjd W 5 Q R X tjt|d" t|dtddddtjd W 5 Q R X |d}t|tddd ddtjd}t|| t|dtddd dtjd}t||j d!}tjt|d" t|tddd ddtjd W 5 Q R X tjt|d" t|dtddd dtjd W 5 Q R X d S )"NA A A A A A A B$Carl Mark Carl Carl Joe Joe Joe Carlr   r   rK   r{   ru   r   r   rJ   rF  )BranchBuyerrm  Dater  r?  r   r   rq  r,   r   zCarl Joe Markr|   r  rm  r8   r9   r7   rP   rz   Z6MSZCarlr   r   z#'The grouper name foo is not found'r  r%   )r   r   zThe level foo is not valid)r   splitr   r  r2   rt  r   r   r   r8   rA   r9   r   r	   rT   r;   r<   rb   r   rU   r   r  r   r(  r  )r5   using_array_managerrV   rH   rW   r"  r   r   r   test_pivot_timegrouper  s   







  



	




z%TestPivotTable.test_pivot_timegrouperc                 C   s  t d d ddddddddgtdd	dd
dtdddd
dtdddddtdddddtdd	dddtdddddtdddddtdddddgtdddddtdddd
dtdddddtdd	dddtdddddtdddddtdddddtdd	dddgd}t|tdddtddddtjd}t ttjdtjtjdtjddtjdtjtjtjtjdtjg	ddt
jtdddtdddtdd	dtdddgddt
jtdddtdddtdd	dtdddgddd}d|j_d|j_t|| t|tdddtddddtjd}t||j tdddtdddftdddtdddftdddtdd	dftdddtdddftdd	dtdddftdddtdd	dfg}tj|ddgd }t tdtjdtjdtjdtjdtjtjdg	dd|d!d"gd}d#|j_t|tdddtdddgd#gdtjd}t|| t|d#gtdddtdddgdtjd}t||j d S )$Nr  r  r   r   rK   r{   ru   r   r+   r<  r   r   r   rJ   rF  r>  r   r   rz      )r  r  rm  r  PayDayr   r  r  r  rm  r  ry   rq  r   r|   rj   r,   r-   r  )r   r  r   r   r	   r2   rT   rt  r   r   r   r   r8   rA   r9   r;   r<   rb   r   rk   )r5   rV   rW   rH   Ztuplesr   r   r   r   test_pivot_timegrouper_doublek  s    

 



	



(

& z,TestPivotTable.test_pivot_timegrouper_doublec                 C   s  ddddddg}ddddddg}t ddddddg||tjdd	d
ddgd d}|d dd |d< |d dd |d< tjdddgddd}tddg}tddgdd}t||g}t ddgddgddgg||d}t	|dgdgdgd}	t
|	| tddddddddg}tddd d gd }tjddgd d!dd}
t|||
g}t tjddddddddgddddddddgddddddddggd	d
||d}t	|dgdgdd gtjtjgd"}	t
|	| d S )#N2011-07-19 07:00:002011-07-19 08:00:002011-07-19 09:00:002013-01-01 15:00:002013-02-01 15:00:00rY   rZ   ry   r   r   r   rJ   r   labelr   r   value1value2r   c                 S   s   t j| ddS r   r   r   r   r   r   r     r   z7TestPivotTable.test_pivot_datetime_tz.<locals>.<lambda>r   c                 S   s   t j| ddS r   r   r   r   r   r   r     r   r   )r   rA   r  r  rx   r   r   rK   r|   r   rT   rD   r  r   r  )r   r2   r   r   r   r   r
   r   r   r   r;   r<   rt  rT   rD   )r5   dates1dates2rV   exp_idxr   r   r   rH   rW   Zexp_col3r   r   r   test_pivot_datetime_tz  s|    	
	 

z%TestPivotTable.test_pivot_datetime_tzc              
   C   s  ddddddg}ddddddg}t ddddddg||tjdd	d
ddgd d}|d dd |d< |d dd |d< t|d|d jjdd}tddgdd}t ddgddgddgd|tdddgtjddd }t	
|| t||d jj|d jjdd}t ddgddgddgdtddgtjddtdddgtjddd }t	
|| t||d jjj|d jj|d jjgdd}tjtjddddddgtjd
tjddgd tjd
gddgd!}t tjddddddggd	d
td"gtjd
|d }t	
|| t|td#d#d#d#d$d$g|d jj|d jjgdd}t tdddtjdtjgtjtjtjdtjdggd#d$g|d }t	
|| d S )%Nr  r  r  r  r  rY   rZ   ry   r   r   r   rJ   r   r  r   c                 S   s
   t | S r   r   r   r   r   r   r   L  r   z6TestPivotTable.test_pivot_dtaccessor.<locals>.<lambda>r   c                 S   s
   t | S r   r   r   r   r   r   r   M  r   r  r  r   rx   r   r   rK   )rz   r{   ru   rz   r{   ru   r   rA   r|   rj   r   XY)r   r2   r   r   r   r   r   r
   r   r;   r<   rh   rw  r7   r   r   rt  r   )r5   r  r  rV   rW   r  rH   r   r   r   r   test_pivot_dtaccessor1  s    	
	  
  
 
 *z$TestPivotTable.test_pivot_dtaccessorr   r   io  c                 C   s   t dddd}ttjt||d}tt||jj	|jj
d}|jd|_t|jj
}|||k }|jj	|_||  }tj||dd	 |j|kstd S )
N1/1/2000
12/31/2004r/   r   rr   r|   r   Fr*  )r   r   r2   r3   r4   r=   r   r   r8   rw  Z	dayofyearr9   	droplevelZasarrayr   r;   r   rA   r@   )r5   r   rngr   annualZdoysubsetrW   r   r   r   
test_daily  s      
zTestPivotTable.test_dailyc                 C   s   t dddd}ttjt||d}tt||jj	|jj
d}|jd|_|jj
}|||k }|jj	|_||  }tj||dd	 |j|kstd S )
Nr  r  r   r   rr   r|   r   Fr*  )r   r   r2   r3   r4   r=   r   r   r8   rw  rh   r9   r  r   r;   r   rA   r@   )r5   r   r  r   r  rh   r  rW   r   r   r   test_monthly  s    
zTestPivotTable.test_monthlyc                 C   sv   ddd}t |dgt| |d}t |dg| |d}t|| dd |D }t |dg||d}t|| d S )NrT   rD   r}  r,   )r8   r7   rP   c                 s   s   | ]
}|V  qd S r   r   )r   re  r   r   r   	<genexpr>  s     zGTestPivotTable.test_pivot_table_with_iterator_values.<locals>.<genexpr>)r   rS   r   r;   r<   )r5   r6   ZaggsZpivot_values_listZpivot_values_keysZagg_values_genZpivot_values_genr   r   r   %test_pivot_table_with_iterator_values  s,    
  
       z4TestPivotTable.test_pivot_table_with_iterator_valuesc                 C   s   d}t ddddgddddgddd	d	gd
}|jddd|tjtgd}tdd|gddd}dddd|fdddd|fg}tj|d d dgd}t |j||d}t	
|| d S )NZWeeklybaconZcheeser   r   g	@gffffff
@r   rb   )r8  costr   r8  r   T)r8   r9   r   r.  rP   r  r  )rD   r  r   )rD   r  rb   rD   r  )maxr  r   )r  r  rb   r  rj   r|   )r   r   r2   rD   r  r
   r   rk   r7   r;   r<   )r5   r.  ZcostsrF   ZixZtupsr`   rH   r   r   r   /test_pivot_table_margins_name_with_aggfunc_list  s2    


z>TestPivotTable.test_pivot_table_margins_name_with_aggfunc_listc                 C   s   |r|j tjjdd ttdtdd tdd d}tddd	gd
ddgdddgg}tdddgdd|_	tdddgdd|_
|jddd|dd}t|| d S )N1GH#17035 (np.mean of ints is casted back to ints)r$  r{   r   rJ   r\   r]   r^   r   r   r   rK   ry   r:  r   r   r   r   r   r]   rx   r^   r\   Tr   r   )node
add_markerr  markxfailr   r2   r   r
   r8   r9   r   r;   r<   r5   r:   r   rV   rH   rF   r   r   r   test_categorical_margins  s    $ z'TestPivotTable.test_categorical_marginsc                 C   s   |r|j tjjdd ttdtdd tdd d}tddd	gd
ddgdddgg}tdddgdd|_	tdddgdd|_
|jd|_|jd|_|jddd|dd}t|| d S )Nr  r$  r{   r   rJ   r  r   r   r   rK   ry   r:  r   r   r   r   r   r]   rx   r^   rR   r\   Tr  )r  r  r  r  r  r   r2   r   r
   r8   r9   r]   rU   r^   r   r;   r<   r  r   r   r   !test_categorical_margins_category  s     $ z0TestPivotTable.test_categorical_margins_categoryc                 C   s   t ddddgddddgddddgddd	d	gd
}t|ddd}t dddgdddgdddgdtdd	dgddd}t|| d S )NrJ   r   ry   r{   r   rK   r   r  r  )r,   r-   r.   r/   r/   T)r8   r   rz   r   g      @r   r   rv   r   rx   rr   )r   r   r
   r;   r<   r5   rV   rW   rH   r   r   r   test_margins_casted_to_float  s    



	z+TestPivotTable.test_margins_casted_to_floatc           	      C   s   t jdddt jg}t jddt jdg}tt|ddg|dt|ddg|dtddd}|jd	d
d|d}tjddg|d
d}tdt jgt jdgg|d}ttddgddg|dd	d|_	t
|| |jd
d|d}tddgg|tdgd}t
|| d S )Nr   r   r,   r-   ro   r   ry   )InColValr  r  r  )r8   r9   r7   r:   )rq   rA   r   r   )r6   r9   rx   )r9   r7   r:   r   )r6   r9   r8   )r2   r   r   r   r   r   r   CategoricalIndexr
   r8   r;   r<   )	r5   r:   rq   r   r   rV   rW   Zexpected_colsrH   r   r   r   test_pivot_with_categorical  s8         z*TestPivotTable.test_pivot_with_categoricalc                 C   s   t ddddgddddgdddd	gd
}|d d|d< |jddd|dd}tjdddgdddgddd}tddgdd}tjddgddgddggtjd}t |||d}t	
|| d S )Nr,   r-   r.   rY   rZ   r   rJ   r   r   )r   r   Vr   rR   r  r   count)r8   r9   r   rP   Frp   rq   rA   rx   r   r   r|   )r   rU   r   r   r  r
   r2   rt  r   r;   r<   )r5   r:   rV   rW   r   r   expected_datarH   r   r   r   test_categorical_aggfunc9  s2    "       "  z'TestPivotTable.test_categorical_aggfuncc           	      C   s   t dddgdddgdddgd}ddd	d
ddddddddg}|d dj||d< |jddd|dd}tddgddd}tj||ddd}ddggddggd  }t |||d }|r|jdg }t	
|| d S )!Nr   rL     Januaryr   r   )Salesrl  rk  FebruaryZMarchZAprilMayZJuneZJulyZAugustZ	SeptemberZOctoberZNovemberZDecemberrl  rR   r  rk  rT   )r7   r8   r9   r:   rP   r   )rA   r   Fr  i@  r   r+   r|   )r   rU   r   Zset_categoriesr   r
   r   r  r   r;   r<   )	r5   r:   rV   monthsrW   r   r   r  rH   r   r   r   %test_categorical_pivot_index_orderingM  sV         z4TestPivotTable.test_categorical_pivot_index_orderingc                 C   sB  t dddgdddgdddgd	}|jd
ddgtjd}tjdddgdddggddgd}t dddg|d
gd}t|| |jd
ddtjd}t dtjtjgtjdtjgtjtjdggt	dddgddt	dddgddd}t|| |jd
dtjgd}tdgd
gg}t dddgt	dddgdd|d}t|| d S )Nr   r   rK   r.   r/   r0   r   ru   rL   rM   rO   rN   ra   rj   r|   rr  rx   rT   )
r   r   r2   rT   r   r   r;   r<   NaNr
   )r5   rV   rW   rm   rH   r   r   r   test_pivot_table_not_seriesy  s     ""&"z*TestPivotTable.test_pivot_table_not_seriesc                 C   s\   d}t ddddgi}t|dgtd|d}tddd|gddd	}t |g d
}t|| d S )Nu   Δοκιμήr%   r   rJ   r   T)r8   rP   r   r.  r  r  r|   )r   r   r=   r
   r;   r<   )r5   greekframerF   r8   rH   r   r   r   test_pivot_margins_name_unicode  s        z.TestPivotTable.test_pivot_margins_name_unicodec                 C   sB  t dddddddddddgdddddddddddgtdd}t|ddd	d
}tdgddggddgddggd dgd}t ddddddd|dd}t|| t|ddd	dgd
}td	dgdgddggddddgddddgddddggd d dgd}t ddddddddddddd|dd}t|| d S )Nr%   r&   r'   r(   r+   rv   r,   r-   rT   rr  r.   r   r   r  r   r<  )r&   r%   rz   r   ))r.   r'   )r.   r(   r}   rD         @r   r  g@))rD   r.   r'   )rD   r.   r(   )rT   r.   r'   )rT   r.   r(   )r   r   r   r   rP  r;   r<   )r5   r6   rW   rR  rH   r   r   r   test_pivot_string_as_func  st        	z(TestPivotTable.test_pivot_string_as_funcz
f, f_numpyrD   r   c                 C   s<   |j dd}t|dd|d}t|dd|d}t|| d S )Nr.   r}   r,   r-   rr  )r   r   r;   r<   )r5   r   Zf_numpyr6   rW   rH   r   r   r   test_pivot_string_func_vs_func  s    z-TestPivotTable.test_pivot_string_func_vs_funcc                 C   s   G dd dt j}| z}|t d| ttdtddd}d}tjt	|d2 t
jtd	d |jd
dddd W 5 Q R X W 5 Q R X W 5 Q R X d S )Nc                       s"   e Zd Zdd fddZ  ZS )zSTestPivotTable.test_pivot_number_of_levels_larger_than_int32.<locals>.MockUnstackerN)returnc                    s   t  j|| tdd S )NDon't compute final result.)super__init__	Exception)r5   argskwargs	__class__r   r   r    s    z\TestPivotTable.test_pivot_number_of_levels_larger_than_int32.<locals>.MockUnstacker.__init__)__name__
__module____qualname__r  __classcell__r   r   r  r   MockUnstacker  s   r  
_Unstackeri   r   )ind1ind2r  z$The following operation may generater  r  r  r  r  r  )reshape_libr  contextsetattrr   r2   r   r;   assert_produces_warningr   r  r   r  r   )r5   Zmonkeypatchr  rm   rV   r"  r   r   r   -test_pivot_number_of_levels_larger_than_int32  s    
   z<TestPivotTable.test_pivot_number_of_levels_larger_than_int32c           
      C   s   t dddgdddgdddgd}dd	 }d
d }dd }t|d|||g|d}ddtjtjddgddtjtjddgg}tjdddgddggd dgd}t |ddg|d}	|r|	jdd}	t||	 d S )Napplepeachr   rJ   rz   ry   )fruitsizetastec                 S   s   dS )Nr   r   r   r   r   r   ret_one  s    z?TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_onec                 S   s   t | S r   )rT   r   r   r   r   ret_sum  s    z?TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_sumc                 S   s   t jS r   )r2   r   r   r   r   r   ret_none  s    z@TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_noner  r9   rP   r   r   r<  r  r  r  rj   r  r  r|   r9   r   )	r   r   r2   r   r   Zfrom_productr   r;   r<   )
r5   r   rV   r  r  r  rW   r6   r   rH   r   r   r   test_pivot_table_aggfunc_dropna  s0       (z.TestPivotTable.test_pivot_table_aggfunc_dropnac                 C   s   t dddgdtjdgdtjtjgd}t|dtj|d}d	tjgdtjgg}tddgdd
}t |ddg|d}|r|jdd}t|| d S )Nr'   r(   r   rJ   r   )r,   r\   r]   r,   r  r   rx   r\   r]   r|   r9   r   )	r   r2   r   r   rD   r
   r   r;   r<   )r5   r   rV   rW   r6   r   rH   r   r   r   &test_pivot_table_aggfunc_scalar_dropna+  s    "z5TestPivotTable.test_pivot_table_aggfunc_scalar_dropnar   c              	   C   s   t dddddgdddddgdd	d	dd	gd d d d d gd
}|jdddtj|d}tg dd}t tg ddd|d}t|| d S )NrJ   r   rK   ry   rz   r{   ru   pr  )r,   idr.   r/   r,   r/   r  r   rx   r   r  r|   )r   r   r2   r  r
   r;   r<   )r5   r   rV   rW   Zexp_colsrH   r   r   r   test_pivot_table_empty_aggfunc<  s"        z-TestPivotTable.test_pivot_table_empty_aggfuncc              	   C   s`   dd }t ddddgddddgddddgd	}tjtd
d |jd
dd|d W 5 Q R X d S )Nc                 S   s
   t | S r   )r2   rD   )Zarrr   r   r   rC   P  s    z=TestPivotTable.test_pivot_table_no_column_raises.<locals>.aggr   r   r   r   r  (   )r  r  ZZ
notpresentr  r  r  )rP   )r   r  r   r(  r   )r5   rC   rV   r   r   r   !test_pivot_table_no_column_raisesN  s    (z0TestPivotTable.test_pivot_table_no_column_raisesc                 C   s:  t dddddddddg	dddddddddg	dddddddddg	dddd	d	d
dddg	dd
dddddddg	d}t|ddgddgtjtttjgdd}tddddg}tjddddgddgd}td d!d"d#gd d!d$d%gd&d'd(d)gd*d#d+d&gg}t |||d,}|d 	tj
|d< |d 	tj
|d< t|| d S )-Nr%   r&   r'   r(   rA  rB  r   rJ   r   r   rK   ry   rz   r{   ru   rC  r/   r0   r,   r.   r}  )r7   r8   rP   )r/   rD   )r0   r  )r0   rD   )r0   r  )r&   rB  )r&   rA  )r%   rB  )r%   rA  rj   r:  g      "@g      @      @g      !@r;  r   r  r   r   g["8@g.UUU@rV  )r   r   r2   rD   r  r  r   rk   rt  rU   r   r;   r<   )r5   rV   rF   r`   r8   valsrH   r   r   r   0test_pivot_table_multiindex_columns_doctest_caseW  sR    





z?TestPivotTable.test_pivot_table_multiindex_columns_doctest_casec                 C   s   t dddgdddgddd	gd
d
dgd}|jddgddddd}t dtjgdtjgtjd	ggtd
dgddtjdddgdddggddgdd}t|| d S )NZd1Zd4Zd3rY   rZ   r[      rG  "   Z2018Z2019)rY   r   numrw  r   rw  r  rT   F)r8   r9   r7   rP   sortrx   rj   rV  )	r   r   r2   r   r
   r   r   r;   r<   r  r   r   r   test_pivot_table_sort_false  s.         z*TestPivotTable.test_pivot_table_sort_falsec                 C   s   t dddgtddgddd}|jd	d
ddd}t ddgddgddggtdddgd	dtjddgd d
gddd}t|| d S )Nr,   r   rJ   r   r+   Int64r   )rY   rZ   salesrZ   rY   TrT   r/  rG  r   rx   r  r,   r  r   rj   r8   r9   r   )r   r   r   r
   r   rk   r;   r<   r  r   r   r   !test_pivot_table_nullable_margins  s     z0TestPivotTable.test_pivot_table_nullable_marginsc                 C   sz   t ddgddgddgddgd	}|jd
dgddgdd}t ddgddggddgtjddgd
dgdd}t|| d S )NJohnMichaelFooBar      /   rI  )	firstnamelastnameheightager  r  r  r   F)r8   r7   r  )r  r  )r  r  rj   rV  )r   r   r   rk   r;   r<   r  r   r   r   0test_pivot_table_sort_false_with_multiple_values  s*      z?TestPivotTable.test_pivot_table_sort_false_with_multiple_valuesc                 C   s   t dddgdddgdddgddd	gg}d
ddg|_|jd
dddddd}t ddddgddd	dgddd	d
gg}ddddg|_dddg|_d|j_d
|j_t|| d S )NrY   r\   r   r]   rJ   rZ   r   r^   r   r   r   r  rT   r   T)r8   r9   r7   rP   rQ   r   rz   rK   r   )r   r9   r   r8   rA   r;   r<   r  r   r   r   1test_pivot_table_with_margins_and_numeric_columns  s     (     &z@TestPivotTable.test_pivot_table_with_margins_and_numeric_columnsr   c                 C   sh   t ddtddgddd}|jdd	d
d|d}t dggtdgddtdgd	ddd}t|| d S )NrY   rZ   r   r  r  r   )r\   r]   r   r\   r]   r   rD   )r8   r9   r7   rP   r   r  rx   ZFloat64r  )r   r   r   r
   r;   r<   r   r   r   r   test_pivot_ea_dtype_dropna  s        z)TestPivotTable.test_pivot_ea_dtype_dropnac              
   C   s   t dddgtdddgd}td  |jdd	gd
ddd}W 5 Q R X t ddgddgddggttdddgddttdtddgt	d	dgtj
ddgd d
gdd}t|| d S )Nr,   r   rJ   z
2019-12-31g      $@r+   )rY   rZ   r   r  rZ   r   rY   TrT   r/  r  g      5@r   rx   r+  r  r  r  rj   r|   )r   r   r   r;   r  r   r   r   r
   r  rk   r<   r  r   r   r   !test_pivot_table_datetime_warning  s>       
 z0TestPivotTable.test_pivot_table_datetime_warningc                 C   sB  t dddddddddg	dddddddddg	dddddddddg	dddd	d	d
dddg	dd
dddddddg	dddddddddg	dddddddddg	dddddddddg	d}t|dddgdgtjd}t ddgddgddgtjdggtddgddtjddddgddgd gddgdd}|r2|d d|d< t	
|| d S )Nr%   r&   r'   r(   rA  rB  r   rJ   r   r   rK   ry   rz   r{   ru   )r,   r-   r.   r/   r0   )Zcol5)Zcol6ry   rz   sevenr/   r,   r-   r%  r   r   r  r  r  r   rx   rj   rV  r   )r   r   r2   rT   r   r
   r   r   rU   r;   r<   )r5   r  rV   rW   rH   r   r   r   )test_pivot_table_with_mixed_nested_tuples	  s    4     z8TestPivotTable.test_pivot_table_with_mixed_nested_tuples)ar  r  r  r  fixturer6   rI   rX   rd   rn   rt   r   r   r   r   r   r   r   r   r   r  Zparametrizer   r   r   r   r   r   r   r  r  r  r2   rt  r   r
   r  r  r#  r  r'  r)  r-  r1  r9  rD   r   rk   rD  rS  rT  rX  rZ  rc  ri  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  rT   r   r  Zslowr  r   r  r  r  r
  r  r  r!  r"  r#  r$  r'  r   r   r   r   r$   )   s>  
0%	#

*	


;7
-

	

	!&


#
3	
% GY

#,>

#
	4
 r$   c                   @   sd   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dd ZdS )	TestPivotc                 C   s   ddddddgddddddgddddddgd	}t |}|jd
ddd	}t ddddddddd}d\|j_|j_t|| |jjd
kst|jjdkst|jd
dd}|jjd
kst|jjdkstd S )Nr,   r-   r.   OneTwor   r   r   r   r8   r9   r7   rv   r*  r+  r|   Nr9   )	r   r   r8   rA   r9   r;   r<   r@   r>   )r5   r6   r  r{  rH   r   r   r   
test_pivotO	  s$    

zTestPivot.test_pivotc              	   C   s\   t dddddgdddddgdddddgd	}tjtd
d |jdddd W 5 Q R X d S )Nr&   r%   r'   r(   r   r   r   r   r   zduplicate entriesr  rY   rZ   r[   r   )r   r  r   r  r   )r5   r6   r   r   r   test_pivot_duplicatesl	  s    zTestPivot.test_pivot_duplicatesc                 C   s@   t dddgd}|jdddd}t g g d}tj||dd d S )	NrY   rZ   r[   r}   r   r|   Fr*  )r   r   r;   r<   r  r   r   r   test_pivot_emptyw	  s    zTestPivot.test_pivot_emptyc                 C   sD   t ddgd}|jdddd}t| t|jtdd	gdd
 d S )N)r,   r^  A1)r-   r`  ZB2r   r   r   rJ   r   r,   r-   rx   )r   r   reprr;   rl   r9   r
   )r5   rV   rW   r   r   r   test_pivot_integer_bug}	  s    z TestPivot.test_pivot_integer_bugc                 C   s  ddddddgddddddgddddddgd	}t |d
}|jddd}t ddddddddd}d\|j_|j_t|| |jdd}tj	ddgd dgd|_d
|j_tj||dd |jjd
kst
|jjdkst
|jd|_|jddd}d|j_t|| d S )Nr,   r-   r.   r*  r+  r   r   r   r   r8   r9   r7   r9   r7   rv   r,  r|   r}   )r7   r*  )r7   r+  rj   Fr*  r-  r   )r   r  r   r8   rA   r9   r;   r<   r   rk   r@   r>   r  )r5   r6   r  rW   rH   r   r   r   test_pivot_index_none	  s4    

 zTestPivot.test_pivot_index_nonec                 C   s  t ddddddgddddddgddddddgddddddgddddddgd}d	d
g}dg}|j||d}t tddddgdtjdtjgddddgtjdtjdggtjddgd	d
gdtjddgd dgdd}t|| |d	d
gkst	|dgkst	d S )Nr   rJ   r   r   rK   ry   r   )lev1lev2lev3lev4r7   r6  r7  r8  r|   r   r   r   r   r  r   r  )r   r   rJ   rJ   )r   rJ   r   rJ   rj   )r9  r9  r7   r7   )
r   r   r2   rt  r   r   r   r;   r<   r@   )r5   rV   r8   r9   rW   rH   r   r   r   0test_pivot_index_list_values_none_immutable_args	  s>    	

 z:TestPivot.test_pivot_index_list_values_none_immutable_argsc              	   C   s6   t dgdd}tjtdd |  W 5 Q R X d S )Nr   rU  z(missing 1 required keyword-only argumentr  r  )r5   rV   r   r   r   test_pivot_columns_not_given	  s    z&TestPivot.test_pivot_columns_not_givenc                 C   s   t dgddd}|jd d}t dgdd}t|| |jd dd}t d	ditdgdd
d}t|| |jd ddd}t dditdgdd
d}t|| d S )Nr   rJ   r   NrZ   r[   r}   ))rZ   r   r[   r   rZ   rV  r=  rx   rr   r[   r9   r8   r7   )r   r   r;   r<   r
   r  r   r   r   test_pivot_columns_is_none	  s    z$TestPivot.test_pivot_columns_is_nonec                 C   s   t dgddd}|jdd d}t ddidgd}d dg|j_t|| |jdd d	d
}t ddgtdgddd}t|| d S )Nr   rJ   r   r<  rZ   rV  )r[   rJ   rr   r[   r>  rx   r|   )r   r   r9   r>   r;   r<   r
   r  r   r   r   test_pivot_index_is_none	  s    z"TestPivot.test_pivot_index_is_nonec                 C   s   t dgddd}|jddd d}t dtdgddtdgddd	}t|| |jdd d
}t ddgtdgddd	}t|| d S )Nr   rJ   r   r<  rZ   r[   r>  rx   r|   r4  r   )r   r   r
   r;   r<   r  r   r   r   test_pivot_values_is_none	  s      z#TestPivot.test_pivot_values_is_nonec                 C   s>   t dgddd}|jdd}|jddd	d
 t|| d S )NrY   r   r   )r'   r(   threeT)deepr'   r(   rB  r   )r   rO  r   r;   r<   )r5   rV   rH   r   r   r   "test_pivot_not_changing_index_name	  s    z,TestPivot.test_pivot_not_changing_index_nameN)r  r  r  r.  r/  r0  r3  r5  r:  r;  r?  r@  rA  rD  r   r   r   r   r)  N	  s   $&r)  )%r   r   r   	itertoolsr   numpyr2   r  Zpandas.errorsr   Zpandasr   r   r   r	   r
   r   r   r   r   Zpandas._testingZ_testingr;   Zpandas.api.typesr   r   Zpandas.core.reshaper   r  Zpandas.core.reshape.pivotr   r(  r   r   r#   r$   r)  r   r   r   r   <module>   sD   (

.
                  7