a
    dc                    @   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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   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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 g d#fd$g d#fgd%d& Zd'd( Zd)d* Zd+d, Zejd-d.d/gd0d1 Zejd-d.d/gd2d3 Zejd-d.d/gd4d5 Zd6d7 Zejd-d.d/gd8d9 Z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d?d@ Z$ejd<dAd=ge !dAd=ge"dAd=ge#dAd=ggejd-d.d/gdBdC Z%dDdE Z&ejj'dFdGejd-d.d/gdHdI Z(ejd-d.d/gdJdK Z)dLdMgdNgdOfdPdQZ*dRdS Z+dTdU Z,ejdVdLdWg dXg dYge#g dZdLd[fdLdMgd\g d]g d^ge-j.g d_dLdMgd`fgdadb Z/dcdd Z0dedf Z1ejdgg dhdidj Z2dkdl Z3dmdn Z4dodp Z5dqdr Z6dsdt Z7dudv Z8dwdx Z9dydz Z:d{d| Z;ejd}d~dddddggdd Z<dd Z=dd Z>dd Z?dd Z@ejdeAdddd ZBejdeAdddd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNejdd\e jOfdWe jPfde jQfd\dWge jOe jPgfd\dge jOe jQgfddWge jQe jPg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`dd̈́ ZadS )TestPivotTablec              	   C   sL   t g dg dg dtjddtjddtjdddS )Nfoor&   r&   r&   barr'   r'   r'   r&   r&   r&   oner)   r)   twor)   r)   r)   r*   r*   r*   r)   )dullr+   shinyr+   r+   r,   r,   r+   r,   r,   r,         )ABCDEF)r   nprandomdefault_rngstandard_normal)selfr   r   r   data+   s    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sJ n|jj|d ksJ t|dkr|jj|ksJ n|jj|d ksJ |	||g d 
d	 }t|| d S )
Nr/   r0   r1   r2   )valuesindexcolumnsobserved)r;   r<   r>   r   r   mean)r   tmassert_frame_equallenr<   namestuplenamer=   groupbyaggunstack)r9   r>   r:   r<   r=   tabletable2expectedr   r   r   test_pivot_table\   s$    
zTestPivotTable.test_pivot_tablec                 C   s   t tdtdg dd}|jddddd	d
}|jd|_|jd|_|jd|_|jd|_|jddddd	|d}t	|| d S )NZabcdeZfghijr   r-   r   r      col1col2col3rP   rR   rQ   sumr   )r<   r;   r=   aggfunc
fill_valuecategory)r<   r;   r=   rT   rU   r>   )
r   listr   r<   astyper=   rP   rQ   r@   rA   )r9   r>   dfrK   resultr   r   r   +test_pivot_table_categorical_observed_equalx   s&    
	z:TestPivotTable.test_pivot_table_categorical_observed_equalc                 C   s|   t g dg dg dd}|jddd}|jdd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zr   r-   r   )rowscolsr;   rf   rS   )r=   rT   r<   rT   r;   r?   )r   r   Tr@   rA   )r9   rY   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g dddgd}t|j| t|j| d S )Ni`  i iP  i0u  )r   r   r-   r   r/   r0   r1   i[ i] i\ i^ r]   r^   r_   di i  i@B )amountcustomermonthr   quantityro   rn   rm   r   F)r   ))r/   r]   )r/   r^   )r/   r_   )r/   rk   )r0   r]   )r0   r^   )r0   r_   )r0   rk   )r1   r]   )r1   r^   )r1   r_   )r1   rk   rC   )r   r   r   from_tuplesr@   assert_index_equalr=   r<   )r9   rY   Zpv_colZpv_indmr   r   r   test_pivot_table_dropna   s(    	z&TestPivotTable.test_pivot_table_dropnac                 C   s   t g dg ddd}t g dg ddd}t||g dd}t|d	d
dgdd}tj||gd
dgd}td	g di|d}t|| d S )Nr]   r]   r^   r^   )r]   r^   rc   T
categoriesordered)r_   rk   r_   rk   )r_   rk   rb   r   r-   r   r   )r/   r0   r;   r;   r/   r0   )r;   r<   r   rp   )      ?       @      @      @r<   )r   r   r   r   r   r@   rA   )r9   Zcat1Zcat2rY   rZ   Z	exp_indexrK   r   r   r   test_pivot_table_categorical   s    z+TestPivotTable.test_pivot_table_categoricalc                 C   s   g d}t g dg dtddd}|d t|dd	|d< |jd
dd|d}tg ddd}|t|dd	}tg dd
d}t g dg dg dg||d}|s|jt|dd}t	|| d S )Nr]   r^   r_   rk   )	r]   r]   r]   r^   r^   r^   r_   r_   r_   )	r   r-   r   r   r-   r   r   r-   r   r   	   r/   r0   r1   r/   Frx   r0   r1   )r<   r=   r;   r   r\   rE   rd   )        r|         @)rz   r}         @)r{         @       @r<   r=   r=   float)
r   rangerX   CDTr   r   Zreindexr   r@   rA   )r9   r   rw   rY   rZ   expected_columnsexpected_indexrK   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g dd}|jdd|d	}|rRd
dg}ddg}ng d}g d}t d|ittj|ddg|dddd}t|| d S )NlowhighTrv   )r   rz   r{   r|   r}   r/   r0   r/   r0   r<   r;   r   r{   r|   r   r   r{   r|   r   )r   r   r   r~   )	r   r   r5   nanr   r
   
from_codesr@   rA   )r9   r   rY   rZ   r;   codesrK   r   r   r   %test_pivot_with_non_observable_dropna   s2    


z4TestPivotTable.test_pivot_with_non_observable_dropnac                 C   s   t tg dg dddtdd}|jdd|d	}t dg d
ittjg dg dddddd}|sz|d t|d< t	|| d S )N)r!   r   r   r   r   )r   r   r!   Trv   rN   r   r/   r0   r   r   )r   r   r-   r   r~   )
r   r   r   r   r
   r   rX   r   r@   rA   r9   r   rY   rZ   rK   r   r   r   /test_pivot_with_non_observable_dropna_multi_cat  s,    
	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/   r0   r   rz   r   r~   )r   r   r
   uniquerX   r   r@   rA   )r9   r#   r   rY   rZ   rK   r   r   r   test_pivot_with_interval_index+  s    
z-TestPivotTable.test_pivot_with_interval_indexc                 C   s   t jg dg d}ttjdddtjdg dt|dd	jd
dd}t	|dddddd}|d }t
g dtt ddt dddgdddtjd}t|| d S )Nr   r   r   r   r   r   r-   r-   r   r   r   dtyper]   r^   r]   r^   Tr   F)Z	ascendingr   r1   r0   r/   rS   r<   r=   r;   rT   marginsAll)r      
   r   r-   r   )r<   rE   r   )r   r   r   r   r5   arangeZintpr   Zsort_valuesr   r   r
   ZIntervalr@   assert_series_equal)r9   Zordered_catrY   Z	pivot_tabrZ   rK   r   r   r   &test_pivot_with_interval_index_margins6  s(    
 z5TestPivotTable.test_pivot_with_interval_index_marginsc                 C   s4   |j d|j|jd}|j dddd}t|| d S )Nr2   r   r/   r1   )r   r/   r1   r@   rA   r9   r:   rZ   rK   r   r   r   test_pass_arrayP  s    zTestPivotTable.test_pass_arrayc                 C   s<   |j ddd |jd}|j d|jd dd}t|| d S )Nr2   c                 S   s   | d S )NrN   r   ra   r   r   r   <lambda>V      z3TestPivotTable.test_pass_function.<locals>.<lambda>r   rN   r1   )r   r1   r<   r@   rA   r   r   r   r   test_pass_functionU  s    z!TestPivotTable.test_pass_functionc                 C   sD   ddg}d}t |||d}|||g d }t|| d S )Nr/   r0   r1   r   r?   )r   rF   rG   rH   r@   rA   )r9   r:   r<   r=   rI   rK   r   r   r   test_pivot_table_multipleZ  s
    z(TestPivotTable.test_pivot_table_multiplec                 C   s   t g dg dg dd}|jd dks.J t|ddgdgd	d
d}|j}ttdgd ttdddd}t	|| t g dg dg dd}|jd dksJ t|ddgdgd	dd}|j}ttdgd ttdddd}t	|| d S )N)catbatr   r   ry   r   )r]   vir   int64r]   r   r   rS   )r;   r<   r=   rU   rT   r-   abr   r~   )      ?      @      @      @float64r?   )
r   dtypesr   r   r5   r   r
   rW   r@   r   )r9   frc   rZ   rK   r   r   r   test_pivot_dtypesa  s4    $$z TestPivotTable.test_pivot_dtypeszcolumns,valuesbool1float1float2)r   r   r   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sfJ d S )NrN   r   r{   r-   r   )r   r   r   r   r<   r<   r=   r;   c                 S   s   i | ]}|t d qS )r   )r5   r   ).0colr   r   r   
<dictcomp>  r   z=TestPivotTable.test_pivot_preserve_dtypes.<locals>.<dictcomp>)r5   r   r   r   reset_indexr   dictr   )r9   r=   r;   r   rY   Zdf_resrZ   rK   r   r   r   test_pivot_preserve_dtypes  s    

z)TestPivotTable.test_pivot_preserve_dtypesc                 C   sf  t g d}tdg d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g d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 )N)
2011-01-01z
2011-02-01
2011-01-02r   r   r/   rM   r~   r   )r/   r   )r/   r-   r   )levelr   r}   r{   r-   r   r   r2   rN   )freqperiods)r/   dtr   M)keyr   z
2011-01-31      
@r   r|   z
2011-12-31)r   DatetimeIndexr   r   r<   rn   dayr   rq   Z
set_levelslevelsrX   r5   int32r   r
   r@   rA   r   r	   	TimestamprC   )r9   idxrY   resZexp_columnsexpr   r   r   test_pivot_no_values  sF    
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 )Nr2   r3   r/   r0   r1   r   )r;   r<   r=   rU   r4   r   axis)r<   r=   rU   )r   dropr@   rA   r   r   r   r   test_pivot_multi_values  s    z&TestPivotTable.test_pivot_multi_valuesc                    s    fdd}|ddg}|d}|d}t ||gddgdd}t||  fdd}|ddg}|d}|d}t ||gddgdd}t|| d S )Nc                    s   t  ddgddgd| dS )Nr2   r3   r/   r0   r1   r;   r<   r=   rT   r   funcr:   r   r   r     s   z;TestPivotTable.test_pivot_multi_functions.<locals>.<lambda>r?   stdr   )keysr   c                    s   t  ddgddgd| ddS )Nr2   r3   r/   r0   r1   T)r;   r<   r=   rT   r   r   r   r   r   r   r     s   )r   r@   rA   )r9   r:   r   rZ   ZmeansZstdsrK   r   r   r   test_pivot_multi_functions  s    z)TestPivotTable.test_pivot_multi_functionsmethodTFc                 C   s   t j}tdd|dgg dg dd}|r<|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g dddd}t|| t|jddd	d
|j d S )NZR1ZR2ZR4)C1C2ZC3ZC4)r            r\   r]   r^   r_   r   r   r   r   r   r   r   )	r5   r   r   pivotr   r
   r@   rA   rh   )r9   r   r   rY   rZ   rK   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sJ | D ]*\}}|j|d |d	 f |d ksJ q|r|jd	ddd}ntj|d	ddd}t||j d S )Nz
2014-02-01   r2   )r   r   d   )r]   r_   r]   z
2014-02-02r^   )r   r]   )r   r]   r   r^   )r   r^   r_   r   )r   r   r5   r   r   r   r   locr   Znotnar;   rS   rB   Ziterrowsr@   rA   rh   )r9   r   rY   pv_rowrZ   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g d}tjddgd ddd}t	||g}t g dg dgtjddgddd|d}|r4|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   r   r   r-     r   r   r   )dt1dt2data1data2r   c                 S   s   t j| ddS N
US/Pacifictzr   r   rk   r   r   r   r   5  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   6  r   r   r   r   r   z2014/01/01 09:00z2014/01/02 09:00r  )rE   r  r   r-   r   r-   r   r   r   r   z2013/01/01 09:00z2013/01/02 09:00r  r   r   r   r   )r   r   r5   r   applyr
   r   r   r   r   r   r@   rA   r9   r   rY   exp_col1exp_col2exp_colrK   r   r   r   r   test_pivot_with_tz  s\    



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d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   w  r   z8TestPivotTable.test_pivot_tz_in_values.<locals>.<lambda>r  minr   r   z2016-08-12 00:00:00z2016-08-25 00:00:00r   )r   r   r   	set_indexr   r  mapr   r
   r   r@   rA   )r9   rY   ZminsrZ   rK   r   r   r   test_pivot_tz_in_values[  sR    z&TestPivotTable.test_pivot_tz_in_valuesc              	   C   sv  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g d}tjddgd ddd}t||g}t g dg d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}|rT|j	dddd}ntj	|dddd}t
|| d S )Nz
2013-01-01r2   z
2013-01-02z2013-01r   z2013-02r   r   r   )p1p2r   r   r	  r-   r  )rE   r   r
  r  r  r   r   r   r   r   r   )r   r   Periodr5   r   r
   ZPeriodIndexr   r   r   r@   rA   r  r   r   r   test_pivot_periods  sH    







z!TestPivotTable.test_pivot_periodsc                 C   s   t g dtdtdtdtdgdd}t dtg dddttdtdd	gd
dd}|jdd
ddd}t|| d S )Nr   Z2019Q1Z2019Q2rz   )r]   r^   ra   r   r-   r   r]   r   r   r^   )r:   r<   r=   ra   T)r<   r=   r;   r   )r   r   r  r
   r   r@   rA   )r9   rY   rK   rZ   r   r   r   test_pivot_periods_with_margins  s"    z.TestPivotTable.test_pivot_periods_with_marginsr;   bazzooc           	      C   s   t g dg dg dg dd}|r8|jdd|d}ntj|dd|d}g d	g d
g}tddgdd}tddgg dgg dg dgd dgd}t |||dd}t|| d S )Nr)   r)   r)   r*   r*   r*   r/   r0   r1   r/   r0   r1   r   r-   r   r   rN   r   ra   rb   rc   qwtr&   r'   r#  r$  r&   r'   r   )r   r-   r   ra   rb   rc   )r   rN   r   r)  r*  r+  r)   r*   r:   rE   r#  r$  r   )r   r   r   r   r   r   )r   r   r-   r   r   r-   r   r   rC   objectr:   r<   r=   r   )r   r   r   r
   r   r@   rA   	r9   r;   r   rY   rZ   r:   r<   r=   rK   r   r   r    test_pivot_with_list_like_values  s&    	z/TestPivotTable.test_pivot_with_list_like_valuesr'   c           	   	   C   s   t g dg dg dg dd}|r8|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g ddd}tddgddggg dg dgd dgd}t |||dd}t|| d S )Nr%  r&  r'  r(  r,  r$  r&   r   r/   r   r1   r   r0   rN   r   r-   r   )r)  r+  r*  ra   rb   rc   r-  r'   r#  r)   r*   r   r   r   r   r   r.  r/  r0  )	r   r   r   r5   r   r
   r   r@   rA   r1  r   r   r   %test_pivot_with_list_like_values_nans  s2    	z4TestPivotTable.test_pivot_with_list_like_values_nansc                 C   s`   t g dg dg dd}d}tjt|d |jddd W d    n1 sR0    Y  d S )	Nr\   rd   rO   z=pivot\(\) missing 1 required keyword-only argument: 'columns'matchrP   rR   )r<   r;   r   pytestraises	TypeErrorr   )r9   rY   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 g dd}g dg dg dg dg dg dg}td	d
gddggg dg d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 ) Nr   r   r-   r   r   rN   r   )r)   r/   r   ra   )r)   r0   r-   rb   )r)   r1   r   rc   )r*   r/   r   r)  )r*   r0   rN   r*  )r*   r1   r   r+  r'   r#  firstr  r   r3  )r   r   r/  r0  )r'   r?  )r'   r  )r#  r?  r   r   r   r)   r*   r~   r-   rN   r   r   r   )r
   r   r   r   r   r   r@   rA   )r9   r   r<   r:   r=   rY   rZ   rK   r   r   r   test_pivot_with_multiindex.  s>    z)TestPivotTable.test_pivot_with_multiindexc                 C   s|   t g dg dg dg dd}tjtdd8 |rH|jdd	d
d ntj|dd	d
d W d    n1 sn0    Y  d S )Nr%  r&  r'  r(  r,  z^\('bar', 'baz'\)$r5  r$  r&   )r'   r#  r   )r   r8  r9  KeyErrorr   r   )r9   r   rY   r   r   r   test_pivot_with_tuple_of_valuesX  s    z.TestPivotTable.test_pivot_with_tuple_of_valuesr/   r0   r1   r   c                 C   s   |j |jd d |f }|||  }tj||dd |j|ksHJ | }|j |df jd d }	|||  }
tj|	|
dd |	j|dfksJ |j |df|f }||  }||ksJ d S )Nr   FZcheck_names )	r   r<   rF   r?   r@   r   rE   Z
sort_indexZiloc)r9   rZ   Z
values_colr:   r<   r=   margins_colZcol_marginsZexpected_col_marginsZindex_marginsZexpected_ix_marginsZgrand_total_marginsZexpected_total_marginsr   r   r   _check_outputj  s    	zTestPivotTable._check_outputc                 C   s   |j dddgdddd}| |d| |j dddgddddd	}| j|d|dd
 |j ddgdddd}|jjd D ]}| || || qtd S )Nr2   r/   r0   r1   Tr?   )r;   r<   r=   r   rT   ZTotals)r;   r<   r=   r   rT   margins_name)rE  r<   r=   r   rT   r   )r   rF  r=   r   )r9   r:   rZ   rI   	value_colr   r   r   test_margins  s$    zTestPivotTable.test_marginsc                 C   s:  dd |j D |_ td}tjt|d$ |jddgddd	 W d    n1 sT0    Y  |jd
djddgddd	}|j D ]&}|jd|f }||| 	 ksJ qtjt|d$ |jddgddd	 W d    n1 s0    Y  |jd
djddgddd	}dD ]*}|jd|f }||| 	 ks
J q
d S )Nc                 S   s   g | ]}|d  qS )r-   r   )r   kr   r   r   
<listcomp>  r   z.TestPivotTable.test_no_col.<locals>.<listcomp>-agg function failed [how->mean,dtype->object]r5  ZAABBTr?   )r<   r   rT   CCr   r   rD  )ZDDZEEZFF)
r=   reescaper8  r9  r:  r   r   r   r?   )r9   r:   r;  rI   rI  Ztotalsitemr   r   r   test_no_col  s$    
2

2
zTestPivotTable.test_no_colz*columns, aggfunc, values, expected_columnsr?   )      @rU  皙@rV  )r   r   皙@rW  )r'   r   r&   r   r   rS   )r         rN   r   r.   )          r.   r.   rY  ))r'   r)   )r'   r*   )r'   r   )r&   r)   )r&   r*   )r&   r   rp   c           	      C   s   t g dg dg dg dg dd}|dkrxtd}tjt|d	  |j|d
|d W d    n1 sn0    Y  d|vr|jdd}|jddj|d
|d}t |tddg|d}t	
|| d S )N	r&   r&   r&   r&   r&   r'   r'   r'   r'   	r)   r)   r)   r*   r*   r)   r)   r*   r*   	smalllargera  r`  r`  ra  r`  r`  ra  	r   r-   r-   r   r   r   rN   r   r   	r-   r   rN   rN   r   r      r   r   r/   r0   r1   r2   r3   rS   rM  r5  T)r=   r   rT   r0   r   r1   r2   r3   r   )r   rQ  rR  r8  r9  r:  r   r   r
   r@   rA   )	r9   r=   rT   r;   r   rY   r;  rZ   rK   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|g d< ttddgddgdg }tj	|d	d
}t
g dg dd|djddd}|d |d  |d< |jdddgddddd}t|| d S )Nr   i8)r2   r3   r4   r'   r&   r)   r*   rP  r   rp   )      r   r   -   )!   r   $   3   x   r+   r,   r~   r1   r   r   r+   r,   r   r2   r/   r0   TrS   r   r;   r<   r=   r   rT   rU   )copyr5   r   rB   r   rX   rW   r   r   rq   r   rename_axisr   r@   rA   )r9   r:   rY   mi_valmirK   rZ   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g dg d	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*   rP  r   rp   )r   r   r-   r   rN   )r-   r   r-   r-   r   ro  r~   r1   r   r   r+   r,   r   r2   r/   r0   Tr   rp  )
rW   r   r   rq   r   rr  r   rB   r@   rA   )r9   r:   rs  rt  rK   rZ   r   r   r   test_margins_dtype_len  s"    	z%TestPivotTable.test_margins_dtype_lenrf   ))r   r-   r]   r^   r   )r]   r   c                 C   sn   t |d g d|d g ddg di}|jd|d}t g dgtjg d|d	tdgd
}t|| d S )Nr   rd   r   r   )r   rN   r   )r;   r=   )r}   r   r   ))r   r   )r-   r-   )r   r   rp   r=   r<   )r   r   r   rq   r
   r@   rA   )r9   rf   df2rZ   rK   r   r   r    test_pivot_table_multiindex_only!  s    (z/TestPivotTable.test_pivot_table_multiindex_onlyc                 C   sf   t dddd}ttjddtjdd|d}|jddgd	d
}|jjd 	|sbJ d S )Nz
2016-01-01r   zEurope/Amsterdam)r   r  r-   r   r0   r1   F)r<   r   r   )
r   r   r5   r6   r7   r8   r   r<   r   equals)r9   ZdtirY   rZ   r   r   r   test_pivot_table_retains_tz/  s    z*TestPivotTable.test_pivot_table_retains_tzc                    s   t j ttddgg dddg fddtdD d	g}t|}|jd
g ddgd}|jtd}|jdg ddgd}t	j
||dd d S )Nr&   r'   r   x1Zx2c                    s   g | ]} t | qS r   )r   r   r   r  r   r   rL  F  r   z=TestPivotTable.test_pivot_integer_columns.<locals>.<listcomp>r   rz   r   )r   r   r   r-   )r;   r<   r=   r   4)0132FrC  )r   r  rW   r   r   r   r   renamestrr@   rA   )r9   r:   rY   rI   ry  rJ   r   r  r   test_pivot_integer_columns=  s    	z)TestPivotTable.test_pivot_integer_columnsc                 C   s   t g dd g dd dgd dgd  d tjddd}|jd	d
ddgd}|g dd	  }|ddj	ddd}t
|| 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_   valuer  r]   r^   r_   r   r\   r   all)r   how)r   r5   r6   r7   r8   r   rF   r?   rH   r   r@   rA   )r9   r:   rI   ZgroupedrK   r   r   r   test_pivot_no_level_overlapR  s    

	z*TestPivotTable.test_pivot_no_level_overlapc           
   
   C   sB  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g d	dtfdtfgd
}t j||d
}t jd	dt
||}|d | |d< |d | |d< ttdddtddd}|t jd	dt
|| }|j|d< |j|d< |j|d< t jddd||d< t|}|jdddgg ddd}	|	jjs>J d S )Ni'  r
   SymbolYearMonthZDayQuantityZPrice)	)SP500ZADBE)r  ZNVDA)r  ZORCL)NDQ100ZAAPL)r  ZMSFT)r  ZGOOG)FTSEzDGE.L)r  zTSCO.L)r  zGSK.Lr   r-   r   i  r   i  rh     r}   r{   )r
   r  r  r?   r<   r=   rT   )r5   r   r/  intr   arrayemptyr6   r7   ZintegersrB   r   r   yearrn   r   Z	lognormalr   r   r=   Zis_monotonic_increasing)
r9   nr   ZproductsitemsZiproductZdrdatesrY   pivotedr   r   r   test_pivot_columns_lexsortedd  sB    


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   rS   r2   r3   r/   r0   r  )rF   rG   rH   r   r@   rA   )r9   r:   r   rK   rZ   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@J d S )Nr/   r0   T)r<   rT   r   r   )r   rB   tolistrS   )r9   r:   rZ   Zresult_listr   r   r   test_margins_no_values_no_cols  s
    
z-TestPivotTable.test_margins_no_values_no_colsc                 C   s8   |g d j ddgdtdd}|j g dks4J d S )Nr   r/   r0   r1   Tr<   r=   rT   r   r|   rz   r}   r|         &@r   rB   r   r  r9   r:   rZ   r   r   r   test_margins_no_values_two_rows  s    z.TestPivotTable.test_margins_no_values_two_rowsc                 C   s4   |ddg j ddtdd}|j g dks0J d S )Nr/   r0   Tr  )r}   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   sH   g d|d< |g d j ddgddgtdd}|j g d	ksDJ d S )
N)r]   r^   r_   rk   er   ghr   jrK  r2   r/   r0   r1   r2   r/   r0   r1   Tr  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&   r)   i  Nr]   r^   c              	   C   s   d| d}t jt|d* t|dddgdgd|d	 W d    n1 sJ0    Y  t jt|d* t|ddgddgd|d	 W d    n1 s0    Y  t jt|d( t|ddgdgd|d	 W d    n1 s0    Y  d S )
NzConflicting name "z3" in margins|margins_name argument must be a stringr5  r2   r/   r0   r1   T)r;   r<   r=   r   rG  )r8  r9  
ValueErrorr   )r9   r  r:   r;  r   r   r   -test_pivot_table_with_margins_set_margin_name  s:    
$$z<TestPivotTable.test_pivot_table_with_margins_set_margin_namec                 C   s  t d d g 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tdddgd	d
}t tjg d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dd}t|| t|dtdddd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dd}t|| t|dtddddd}t||j | }t|tdd
ddddd}t|| t|dtdd
dddd}t||j d}tjt|d* t|tdd ddddd W d    n1 sd0    Y  tjt|d* t|dtdd dddd W d    n1 s0    Y  |d
}t|tdd
d!dddd}t|| t|dtdd
d!ddd}t||j d"}tjt|d* t|tdd d!dddd W d    n1 sT0    Y  tjt|d* t|dtdd d!ddd W d    n1 s0    Y  d S )#NA A A A A A A B$Carl Mark Carl Carl Joe Joe Joe Carlr   r   rN   r   rd  r   r   r   r   r   r   r-   rh  )BranchBuyerr  Dater  )r   r[  r   r   r   r   r  r/   r   zCarl Joe Markr   r  r  rS   r<   r=   r;   rT   r   r[  r   Z6MSZCarlr   r   z#'The grouper name foo is not found'r5  r&   )r   r   zThe level foo is not valid)r   splitr   r  r5   r  r   r   r   r<   rE   r=   r   r	   r@   rA   rh   r   rX   r   r8  r9  rA  r  )r9   using_array_managerrY   rK   rZ   r;  r   r   r   test_pivot_timegrouper  s   







 


&
&	



&
z%TestPivotTable.test_pivot_timegrouperc                 C   sv  t d d g 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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d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d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dd}t|| t|d$gtdddtdddgddd}t||j d S )%Nr  r  r  r   r.   r   rX  r   r   rN   r   r   r-   rh  rZ  r   r   r      )r  r  r  r  PayDayr   r  r  r  r  rS   r  r   r   r  r   r   rp   r/   r0   r  )r   r  r   r   r	   r5   r  r   r   r   r   r<   rE   r=   r@   rA   rh   r   rq   )r9   rY   rZ   rK   Ztuplesr   r   r   r   test_pivot_timegrouper_double}  s    





	



(

&z,TestPivotTable.test_pivot_timegrouper_doublec                 C   s  g d}g d}t g d||tjdddddgd	 d
}|d dd |d< |d dd |d< tjg d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g d }tg d!d }tjd"d#gd$ d%dd}
t|||
g}t tjg d&g d'g d(gdd||d d$ d}t tg d)g d*g d+g||d$d  d}t||gdd,}t	|dgdgdd-gd.d/gd0}	t
|	| d S )1N2011-07-19 07:00:002011-07-19 08:00:002011-07-19 09:00:00r  r  r  2013-01-01 15:00:00r  r  2013-02-01 15:00:00r  r  r]   r]   r]   r^   r^   r^   r   r   r   r   r-   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  r  r  )r  rE   r  r]   r^   r  r   r   r|   rz   r}   r{   r   r   r   )rS   rS   rS   rS   r?   r?   r?   r?   )r  r  r  r  r  r  r   r  )r   r   r   r-   )r   r   r-   r   )r-   rN   r   r-   )r   r|   rz   r{   )rz   r}   r{   rz   )r{   r   rz   r{   r   r  rS   r?   r  )r   r5   r   r  r   r   r
   r   r   r   r@   rA   r  r   )r9   dates1dates2rY   exp_idxr  r  r  rK   rZ   Zexp_col3Z	expected1Z	expected2r   r   r   test_pivot_datetime_tz  s~    
	



z%TestPivotTable.test_pivot_datetime_tzc              
   C   sR  g d}g d}t g d||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g d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g dtjddd}t	
|| t||d jjj|d jj|d jjgdd}tjtjg dtjdtjddgd	 tjdgddgd }t tg d!gtd"gtjd|d}t	
|| t|tg d#|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   r   r   r-   r   r  r   c                 S   s
   t | S r   r  r  r   r   r   r   q  r   z6TestPivotTable.test_pivot_dtaccessor.<locals>.<lambda>r   c                 S   s
   t | S r   r  r  r   r   r   r   r  r   r  r  r   r]   r^   r   r   r|   rz   r}   r{   r   )r   rd  r   r   rE   r   )r   r   rd  rd  r   r   rp   )r   r|   rz   r}   r{   r   r   )Xr  r  r  Yr  r   r   rN   r  r  )r   r5   r   r  r   r   r  r
   r   r@   rA   rn   r  r;   r   r   r  r   )r9   r  r  rY   rZ   r  rK   r  r   r   r   test_pivot_dtaccessorV  s~    
	*z$TestPivotTable.test_pivot_dtaccessorr   r   io  c                 C   s   t dddd}ttjdt||d}tt||j	j
|j	jd}|jd|_t|j	j}|||k }|j	j
|_	||  }tj||d	d
 |j|ksJ d S )N1/1/2000
12/31/2004r2   r   r-   r~   r   r   FrC  )r   r   r5   r6   r7   r8   rB   r   r   r<   r  Z	dayofyearr=   	droplevelZasarrayr   r@   r   rE   )r9   r   rngr  annualZdoysubsetrZ   r   r   r   
test_daily  s    
zTestPivotTable.test_dailyrX  c                 C   s   t dddd}ttjdt||d}tt||j	j
|j	jd}|jd|_|j	j}|||k }|j	j
|_	||  }tj||d	d
 |j|ksJ d S )Nr  r  r   r   r-   r~   r   r   FrC  )r   r   r5   r6   r7   r8   rB   r   r   r<   r  rn   r=   r  r   r@   r   rE   )r9   r   r  r  r  rn   r  rZ   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 )NrS   r?   r  r/   )r<   r;   rT   c                 s   s   | ]
}|V  qd S r   r   )r   r  r   r   r   	<genexpr>  r   zGTestPivotTable.test_pivot_table_with_iterator_values.<locals>.<genexpr>)r   rW   r   r@   rA   )r9   r:   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 g dg dg dd}|jddd|d	d
gd}tdd|gddd}ddd	d|fddd
d|fg}tj|g dd}t |j||d}t|| d S )NZWeekly)baconcheeser  r  )r   r   g	@gffffff
@)r   r   rh   rh   )rS  costr   rS  r   Tr?   max)r<   r=   r   rG  rT   r  r  r/  r  )r?   r  r   )r?   r  rh   r  )r  r  r   )r  r  rh   )NNr   rp   r   )r   r   r
   r   rq   r;   r@   rA   )r9   rG  ZcostsrI   ixZtupsrf   rK   r   r   r   /test_pivot_table_margins_name_with_aggfunc_list  s2    z>TestPivotTable.test_pivot_table_margins_name_with_aggfunc_listc                 C   s   t tdtdd tdd d}t g dg dg dg}tg dd	d
|_tg ddd
|_|jdd	d|dd}t|| d S )Nrd  r   r-   r`   rz   r{   r   rN   r   rU  r   r   r   r   r   r   rb   r   rc   ra   Tr   r   )	r   r5   r   r
   r<   r=   r   r@   rA   r9   r>   rY   rK   rI   r   r   r   test_categorical_margins  s    $z'TestPivotTable.test_categorical_marginsc                 C   s   t tdtdd tdd d}t g dg dg dg}tg dd	d
|_tg ddd
|_|jd|_|jd|_|j	dd	d|dd}t
|| d S )Nrd  r   r-   r`   r  r  r  r  rb   r   rc   rV   ra   Tr  )r   r5   r   r
   r<   r=   rb   rX   rc   r   r@   rA   r  r   r   r   !test_categorical_margins_category  s    $z0TestPivotTable.test_categorical_margins_categoryc                 C   sl   t g dg dg dg dd}t|ddd}t g d	g d
g ddtg dddd}t|| d S )N)r-   r   r   rd  )r   r   rN   rd  )r   r   r   r   )r  r  r  r  r  r2   T)r<   r   )r|   r   rN   )r   g      @r   )r{   r   r   r   )r  r  r   r   r~   )r   r   r
   r@   rA   r9   rY   rZ   rK   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/   r0   rv   r   r   )InColValr  r  r  )r<   r=   r;   r>   )rx   rE   r{   r|   )r:   r=   r   )r=   r;   r>   r   )r:   r=   r<   )r5   r   r   r   r   r   r   CategoricalIndexr
   r<   r@   rA   )	r9   r>   rx   r   r   rY   rZ   Zexpected_colsrK   r   r   r   test_pivot_with_categorical/  s.    z*TestPivotTable.test_pivot_with_categoricalc                 C   s   t g dg dg dd}|d d|d< |jddd|d	d
}tjg dg d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 )N)r/   r0   r1   r1   ru   ry   )r   r   Vr   rV   r  r   count)r<   r=   r   rT   r   Frw   rx   rE   r]   r^   r   r   r   r-   r   r   )r   rX   r   r   r  r
   r5   r  r   r@   rA   )r9   r>   rY   rZ   r   r   expected_datarK   r   r   r   test_categorical_aggfuncR  s     
"z'TestPivotTable.test_categorical_aggfuncc           	      C   s   t g dg dg dd}g d}|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 )N)r   rn     )Januaryr  r  )r   r   r   )Salesr  r  )r  FebruaryZMarchZAprilMayZJuneZJulyZAugustZ	SeptemberZOctoberZNovemberZDecemberr  rV   r  r  rS   )r;   r<   r=   r>   rT   r   r   r   )rE   r   Fr  i@  rn  r   r.   r   r  )r   rX   r   Zset_categoriesr   r
   r   r  r   r@   rA   )	r9   r>   rY   monthsrZ   r   r   r  rK   r   r   r   %test_categorical_pivot_index_orderingf  s4    z4TestPivotTable.test_categorical_pivot_index_orderingc                 C   s(  t g dg dg dd}|jdddgdd	}tjg dg dgddgd
}t g d|dgd}t|| |jddddd}t dtjtjgtjdtjgtjtjdggtg dddtg dddd}t|| |jdddgd	}tdgdgg}t g dtg ddd|d}t|| d S )N)r   r   rN   )r1   r2   r3   )r   r   r   rO   rP   rR   rQ   rS   rg   rp   r   r  r   r   rN   r   )	r   r   r   r   r@   rA   r5   r   r
   )r9   rY   rZ   rs   rK   r   r   r   test_pivot_table_not_series  s     &z*TestPivotTable.test_pivot_table_not_seriesc                 C   sZ   d}t dg di}t|dgtd|d}tddd|gd	dd
}t |g d}t|| d S )Nu   Δοκιμήr&   rd   T)r<   rT   r   rG  r   r-   r   r/  r  r   )r   r   rB   r
   r@   rA   )r9   greekframerI   r<   rK   r   r   r   test_pivot_margins_name_unicode  s    z.TestPivotTable.test_pivot_margins_name_unicodec                 C   s  t g dg d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g dg dg dgg d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/   r0   rS   r  r1   r)   r*   r   r   r.  r   rX  )r'   r&   r   r   ))r1   r)   )r1   r*   r   r?   r   )r   r   r   r   r3  )NNr0   r   r   r   g@))r?   r1   r)   )r?   r1   r*   )rS   r1   r)   )rS   r1   r*   )r   r   r   r   rr  r@   rA   )r9   r:   rZ   rt  rK   r   r   r   test_pivot_string_as_func  sD      	z(TestPivotTable.test_pivot_string_as_funcz
f, f_numpyr   c                 C   s   |j dd}t|dd|d}t|tr0d|n|}d| d}tjt|d	  t|dd|d}W d    n1 st0    Y  t|| d S )
Nr1   r   r/   r0   r  |zusing DataFrameGroupBy.[]r5  )	r   r   
isinstancerW   joinr@   assert_produces_warningFutureWarningrA   )r9   r   Zf_numpyr:   rZ   opsr;  rK   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}| }|t d| ttdtddd}d}tjt	|dP t
jtd	d" |jd
dd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 )zSTestPivotTable.test_pivot_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)r9   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 generater5  r  r  r  r  r  )reshape_libr  contextsetattrr   r5   r   r@   r  r   r8  r9  r  r   )r9   Zmonkeypatchr  rs   rY   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 g dg dg d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g dddggd dgd}t |ddg|d}	|r|	jdd}	t||	 d S )N)applepeachr!  )r   r   r-   )r   r   r   )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   )rS   r   r   r   r   ret_sum1  s    z?TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_sumc                 S   s   t jS r   )r5   r   r   r   r   r   ret_none4  s    z@TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_noner#  r=   rT   r   r   r   rX  r   )r'  r(  r&  r!  r"  rp   r$  r%  r   r=   r   )	r   r   r5   r   r   Zfrom_productr   r@   rA   )
r9   r   rY   r&  r'  r(  rZ   r:   r   rK   r   r   r   test_pivot_table_aggfunc_dropna$  s*    (z.TestPivotTable.test_pivot_table_aggfunc_dropnac                 C   s   t g ddtjdgdtjtjgd}t|dd|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 )N)r)   r*   r)   r   r-   r   )r/   ra   rb   r/   r?   r)  r   r)   r*   r   ra   rb   r   r=   r   )r   r5   r   r   r
   r   r@   rA   )r9   r   rY   rZ   r:   r   rK   r   r   r   &test_pivot_table_aggfunc_scalar_dropnaG  s     z5TestPivotTable.test_pivot_table_aggfunc_scalar_dropnar   c                 C   sj   t g dg dg dg dd}|jdddtj|d	}tg dd
}t tg ddd|d}t|| d S )N)r-   r-   r   r   r-   )rN   r   r   rd  r   )pr)  r)  r,  r)  )NNNNN)r/   idr1   r2   r/   r2   r-  r   r   r   r  r   )r   r   r5   r$  r
   r@   rA   )r9   r   rY   rZ   Zexp_colsrK   r   r   r   test_pivot_table_empty_aggfuncX  s    z-TestPivotTable.test_pivot_table_empty_aggfuncc                 C   sh   dd }t g dg dg dd}tjtdd" |jdd	d
|d W d    n1 sZ0    Y  d S )Nc                 S   s
   t | S r   )r5   r?   )Zarrr   r   r   rG   l  s    z=TestPivotTable.test_pivot_table_no_column_raises.<locals>.aggr   r3  )r   r   r  (   )r  r  ZZ
notpresentr5  r  r  )rT   )r   r8  r9  rA  r   )r9   rG   rY   r   r   r   !test_pivot_table_no_column_raisesj  s    z0TestPivotTable.test_pivot_table_no_column_raisesc                 C   s   t g dg dg dg dg dd}t|ddgd	d
gdg ddd}tg d}tjg dd	d
gd}tg dg dg dg dg}t |||d}|d tj|d< |d tj|d< t	|| d S )Nr]  r^  r_  rb  rc  re  r2   r3   r/   r1   r?   )r  r  r?   r  )r;   r<   rT   ))r2   r?   r3   r  )r3   r?   r3   r  ))r'   ra  )r'   r`  )r&   ra  )r&   r`  rp   )rU        "@g      @r   )rU  r4  g      !@r   )r{   r   r   r}   )g["8@r   g.UUU@r{   rx  r3  r2  )
r   r   r   rq   r5   r  rX   r   r@   rA   )r9   rY   rI   rf   r<   valsrK   r   r   r   0test_pivot_table_multiindex_columns_doctest_cases  s@    z?TestPivotTable.test_pivot_table_multiindex_columns_doctest_casec                 C   s   t g dg dg dg d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g dg dgddgdd}t|| d S )N)d1Zd4Zd3r\   )   ri  "   )2018r:  2019)r]   r   numr  r]   r   r  r<  rS   F)r<   r=   r;   rT   sortr8  ri  r9  r:  r;  r   rp   rx  )	r   r   r5   r   r
   r   r   r@   rA   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g dd	dtjddgd d
gddd}t|| d S )Nr/   r   r-   r   r.   Int64r   )r]   r^   salesr^   r]   TrS   rH  ri  r!  r   r@  r/   r@  r   rp   r<   r=   r   )r   r   r   r
   r   rq   r@   rA   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      /   rk  )	firstnamelastnameheightagerM  rL  rN  rO  F)r<   r;   r=  g     e@g     G@g     f@g     @@)rG  rE  )rH  rF  rp   rx  )r   r   r   rq   r@   rA   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 g dg dg dg dg}g d|_|jdddd	d
dd}t g dg dg dg}g d|_g d|_d|j_d|j_t|| d S )N)r]   ra   r   )r]   rb   r-   )r^   rb   r   )r^   rc   r   )r   r   r  r   r   r  rS   r   T)r<   r=   r;   rT   rU   r   )r   r-   r   r   )r   r   r   r   )r   rN   r   r   )ra   rb   rc   r   )r]   r^   r   )r   r=   r   r<   rE   r@   rA   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 )Nr]   r^   r   r/  r?  r   )ra   rb   rO  ra   rb   rO  r?   )r<   r=   r;   rT   r   r  r   ZFloat64rC  )r   r   r   r
   r@   rA   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 d    n1 sV0    Y  t ddgddgddggttg d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   r-   z
2019-12-31g      $@r.   )r]   r^   r   r@  r^   r   r]   TrS   rH  r  g      5@r!  r   rD  r  rA  rB  rp   r   )r   r   r   r@   r  r   r   r   r
   r/  rq   rA   r  r   r   r   !test_pivot_table_datetime_warning	  s6    $
z0TestPivotTable.test_pivot_table_datetime_warningc              
   C   s   t g dg dg dg dg dg dg dg dd}t|ddd	gd
gdd}t ddgddgddgtjdggtddgd
dtjg dddgd gdd	gdd}|r|d d|d< t	|| d S )Nr]  r^  r_  rb  rc  )r/   r0   r1   r2   r3   )Zcol5)Zcol6r   r   Zsevenr2   r/   r0   rT  rS   r   r}   r   r   r   rz   ra  r`  r   )r'   r'   r&   r&   r)   r*   r-   rp   rx  r   )
r   r   r5   r   r
   r   r   rX   r@   rA   )r9   r  rY   rZ   rK   r   r   r   )test_pivot_table_with_mixed_nested_tuples$	  s0    4z8TestPivotTable.test_pivot_table_with_mixed_nested_tuplesc                 C   s   t tdtdtdtdd}tjdd tdD dd tdD tdgdd}tdtj}t|d	 t |ttdd
d|d}|j	d
gdgdgdgd}t
|| d S )Nr   r   c                 S   s   g | ]}d qS )nuniquer   r~  r   r   r   rL  u	  r   zYTestPivotTable.test_pivot_table_aggfunc_nunique_with_different_values.<locals>.<listcomp>c                 S   s   g | ]}d qS )r_   r   r~  r   r   r   rL  v	  r   )NNr^   rp   )r   r   rz   r]   r   r   r^   r_   rV  r  )r   r   r   r   r5   fullr   Zfill_diagonalr
   r   r@   rA   )r9   testZ	columnvalZnparrrK   rZ   r   r   r   6test_pivot_table_aggfunc_nunique_with_different_valuesi	  s6    	zETestPivotTable.test_pivot_table_aggfunc_nunique_with_different_values)br  r  r  r8  fixturer:   rL   r[   rj   rt   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r  r  r   r"  r5   r  r   r
   r2  r4  r<  Zxfailr@  rB  rF  rJ  rT  r   rq   rf  ru  rv  rz  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  rS   r?   r   r  Zslowr   r*  r+  r.  r1  r6  r>  rD  rP  rQ  rR  rS  rU  rY  r   r   r   r   r$   *   s4  
0%!#



*	


;7
-

	

	!&


$
3	
% ZY

#,>

#
	4
 Er$   c                   @   st   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d Zdd ZdS )	TestPivotc                 C   s   g dg dg d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szJ |jjdksJ |jddd}|jjdksJ |jjdksJ d S )Nr/   r0   r1   r1   r0   r/   Oner_  r_  Twor`  r`  rz   r{   r|   r|   r{   rz   r   r<   r=   r;   rz   r{   r|   r   r_  r`  r   Nr=   )r   r   r<   rE   r=   r@   rA   rC   )r9   r:   r  r  rK   r   r   r   
test_pivot	  s$    

zTestPivot.test_pivotc                 C   s^   t g dg dg dd}tjtdd  |jddd	d
 W d    n1 sP0    Y  d S )N)r'   r'   r&   r&   r&   )r)   r*   r)   r)   r*   )rz   r{   r|   r|   r}   r\   zduplicate entriesr5  r]   r^   r_   r   )r   r8  r9  r  r   )r9   r:   r   r   r   test_pivot_duplicates	  s    zTestPivot.test_pivot_duplicatesc                 C   s>   t g dd}|jdddd}t g g d}tj||dd	 d S )
Nr\   r   r]   r^   r_   r   r   FrC  )r   r   r@   rA   r  r   r   r   test_pivot_empty	  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)r0   r  ZB2r   r   r   r-   r   r/   r0   r   )r   r   reprr@   rr   r=   r
   )r9   rY   rZ   r   r   r   test_pivot_integer_bug	  s    z TestPivot.test_pivot_integer_bugc                 C   s   g dg dg d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sJ |jj
dksJ |jd|_|jddd}d|j_t|| d S )Nr]  r^  ra  r   r<   r=   r;   r=   r;   rz   r{   r|   r   rb  r   r   )r;   r_  )r;   r`  rp   FrC  rc  r   )r   r  r   r<   rE   r=   r@   rA   r   rq   rC   r  )r9   r:   r  rZ   rK   r   r   r   test_pivot_index_none	  s2    

zTestPivot.test_pivot_index_nonec              
   C   s   t g dg dg dg dg dd}ddg}d	g}|j||d
}t tg ddtjdtjgg d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sJ |d	gksJ d S )N)r   r   r   r-   r-   r-   )r   r   r-   r   r   r-   )r   r-   r   r-   r   r-   r'  r>  )lev1lev2lev3lev4r;   rl  rm  rn  r   )rz   r{   r   rz   r|   r{   )r   r}   r}   r|   r   r   r   )r   r-   r   r-   rp   )ro  ro  r;   r;   )	r   r   r5   r  r   r   r   r@   rA   )r9   rY   r<   r=   rZ   rK   r   r   r   0test_pivot_index_list_values_none_immutable_args	  s<    	z:TestPivot.test_pivot_index_list_values_none_immutable_argsc                 C   sJ   t dgdd}tjtdd |  W d    n1 s<0    Y  d S )Nr   rw  z(missing 1 required keyword-only argumentr5  r7  )r9   rY   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   r-   r   Nr^   r_   r   ))r^   r   r_   r   r^   rx  rs  r   r~   r_   r=   r<   r;   )r   r   r@   rA   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   r-   r   rr  r^   rx  )r_   r-   r~   r_   rt  r   r   )r   r   r=   rC   r@   rA   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   r-   r   rr  r^   r_   rt  r   r   rj  r   )r   r   r
   r@   rA   r  r   r   r   test_pivot_values_is_none1
  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 )Nr]   r   r   )r)   r*   threeT)deepr)   r*   rx  r   )r   rq  r   r@   rA   )r9   rY   rK   r   r   r   "test_pivot_not_changing_index_name?
  s    z,TestPivot.test_pivot_not_changing_index_namec                 C   sB   t g g dd}|jddddd}tg ddd	}t|j| d S )
N)r]   r^   r  r   r]   r^   r  r  r  r/  r  )r   r   r
   r@   rr   r=   r9   rY   r   rK   r   r   r   .test_pivot_table_empty_dataframe_correct_indexF
  s    z8TestPivot.test_pivot_table_empty_dataframe_correct_indexc                 C   s   t dddddddddd	d
dg}t|d |d< td( |jddgdgddd}W d    n1 sp0    Y  tjdt	ddfdt	ddfdt	ddfdgddgd}t
|j| d S )Nra   z
2023-01-01r   )r]   date_strrl   rb   z
2023-01-02r-   rc   z
2023-01-03r   r}  r   Fr]   rl   rS   T)r<   r;   rT   r   z2023-01-01 00:00:00z%Y-%m-%d %H:%M:%Sz2023-01-02 00:00:00z2023-01-03 00:00:00rP  rp   )r   r   to_datetimer@   r  r   r   rq   r   strptimerr   r<   r{  r   r   r   0test_pivot_table_handles_explicit_datetime_typesN
  s(    


$	z:TestPivot.test_pivot_table_handles_explicit_datetime_typesN)r  r  r  rd  re  rf  ri  rk  rp  rq  ru  rv  rw  rz  r|  r  r   r   r   r   r\  	  s   $&r\  )&r   r   r   	itertoolsr   rQ  numpyr5   r8  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   rZ  r   r   r#   r$   r\  r   r   r   r   <module>   sF   (

.
                  w