U
    sVcK                    @   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   C/tmp/pip-unpacked-wheel-xj8nt62q/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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d3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dVdLe j-dWdWdXdXgdYdYdZdZgge#dAdOd[dOgdLd\fdLdMgd]d^d_d`dadbdcgdddedfdcdcd`gge.j/dgdhdidjdkdlgdLdMgdmfgdndo Z0dpdq Z1drds Z2ejdtdudvdwdxgdydz Z3d{d| Z4d}d~ Z5dd Z6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<ejdd[dddddg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Ą ZVddƄ ZWddȄ ZXddʄ ZYdd̄ ZZdd΄ Z[ddЄ Z\ejdd-d.gddӄ Z]ddՄ Z^ddׄ Z_dS )TestPivotTablec                 C   sv   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| _d S )	Nfoobaronetwodullshiny   )ABCDEF)r   nprandomrandndataselfr   r   r   setup_method*   sT    


zTestPivotTable.setup_methodc                 C   s   ddg}d}t | jd|||d}| jj d|||d}t|| t | jd||d t|dkrt|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| j||g d tj }t|| d S )	Nr+   r,   r-   r.   )valuesindexcolumnsobserved)r8   r9   r;   r   r   )r   r4   tmassert_frame_equallenr9   namestupleAssertionErrornamer:   groupbyaggr1   meanunstack)r6   r;   r9   r:   tabletable2expectedr   r   r   test_pivot_tableZ   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col3rN   rP   rO   r   )r9   r8   r:   aggfunc
fill_valuecategory)r9   r8   r:   rQ   rR   r;   )r   listr   r1   sumr9   astyper:   rN   rO   r<   r=   )r6   r;   dfrI   resultr   r   r   +test_pivot_table_categorical_observed_equalv   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
}d}tjt|d( |jdtjd}|jdtjdj}W 5 Q R X t|| |jdddid}|jdddidj}t|| d S )Nabcxyzr   rK   r   )Zrowscolsr8   z#The operation <function sum.*failedmatchr`   )r:   rQ   r9   rQ   r8   rE   )	r   r<   assert_produces_warningFutureWarningr   r1   rU   Tr=   )r6   rW   msg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   rK   r   r+   r,   r-   i[ i] i\ i^ rZ   r[   r\   di i  i@B )amountcustomermonthr   quantityrn   rm   rl   r   F)r   )r+   rZ   )r+   r[   )r+   r\   )r+   rj   )r,   rZ   )r,   r[   )r,   r\   )r,   rj   )r-   rZ   )r-   r[   )r-   r\   )r-   rj   r?   )r   r   r   from_tuplesr<   assert_index_equalr:   r9   )r6   rW   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 )NrZ   r[   r_   T
categoriesorderedr\   rj   r^   r   rK   r   r   )r+   r,   r8   r8   r+   r,   )r8   r9   r   ro   r9   )r   r   r   r   r   r<   r=   )r6   Zcat1Zcat2rW   rX   Z	exp_indexrI   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 )NrZ   r[   r\   rj   r   rK   r   r   	   r+   r,   r-   r+   Frv   r,   r-   )r9   r:   r8   r   rB      r      rL      r9   r:   r:   float)
r   rangerV   CDTr   r   Zreindexr   r<   r=   )r6   r   ru   rW   rX   expected_columnsexpected_indexrI   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highTrt                 ?       @      @      @r+   r,   r+   r,   r9   r8   r   r   r   r|   rw   )	r   r   r1   nanr   r
   
from_codesr<   r=   r6   r   rW   rX   rI   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   Trt   rL   r   r+   r,   r   rK   r   r   r   r|   rw   )
r   r   r   r   r
   r   rV   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   r|   rw   )r   r   r
   uniquerV   r   r<   r=   )r6   r"   r   rW   rX   rI   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   rK   r   dtyperZ   r[   Tr{   F)Z	ascendingrz   r-   r,   r+   rU   )r9   r:   r8   rQ   marginsAllr   r~   
   r|   )r9   rB   r   )r   r   r   r   r1   arangeZintpr   Zsort_valuesr   r   r
   ZIntervalr<   assert_series_equal)r6   Zordered_catrW   Z	pivot_tabrX   rI   r   r   r   &test_pivot_with_interval_index_margins/  s2    

      z5TestPivotTable.test_pivot_with_interval_index_marginsc                 C   s<   | j jd| j j| j jd}| j jdddd}t|| d S )Nr.   r   r+   r-   )r4   r   r+   r-   r<   r=   r6   rX   rI   r   r   r   test_pass_arrayI  s    zTestPivotTable.test_pass_arrayc                 C   sD   | j jddd | j jd}| j jd| j jd dd}t|| d S )Nr.   c                 S   s   | d S )NrL   r   r]   r   r   r   <lambda>O      z3TestPivotTable.test_pass_function.<locals>.<lambda>r   rL   r-   )r4   r   r-   r9   r<   r=   r   r   r   r   test_pass_functionN  s    z!TestPivotTable.test_pass_functionc                 C   sJ   ddg}d}t | j||d}| j||g tj }t|| d S )Nr+   r,   r-   r   )	r   r4   rC   rD   r1   rE   rF   r<   r=   )r6   r9   r:   rG   rI   r   r   r   test_pivot_table_multipleS  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catZbatr   rK   r   r   rZ   r[   )rZ   vir   int64r   r   )r8   r9   r:   rR   rQ   abr|   rw         ?      @      @      @float64)r   dtypesrA   r   r1   rU   r   r   r
   rT   r<   r   rE   )r6   fr_   rX   rI   r   r   r   test_pivot_dtypesZ  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 )NrL   r   r   rK   r   )r   r   r   r   r9   r9   r:   r8   c                 S   s   i | ]}|t d qS )r   )r1   r   ).0colr   r   r   
<dictcomp>  s      z=TestPivotTable.test_pivot_preserve_dtypes.<locals>.<dictcomp>)	r1   r   r   r   reset_indexr   dictr   rA   )r6   r:   r8   r   rW   Zdf_resrX   rI   r   r   r   test_pivot_preserve_dtypes~  s    
  
z)TestPivotTable.test_pivot_preserve_dtypesc                 C   sH  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}tddgdt	j
ggddg|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ddg|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   rK   r   r   rL   rw   r   )r+   r   )r+   rK   r   r   r   r.   )freqperiods)r+   dtr   M)keyr   z
2011-01-31      
@r   z
2011-12-31)r   DatetimeIndexr   r   r9   rm   dayr   rp   r1   r   r<   r=   r   r	   	Timestampr?   )r6   idxrW   resZexp_columnsexpr   r   r   test_pivot_no_values  s:     
 
  z#TestPivotTable.test_pivot_no_valuesc                 C   sN   t | jddgdddgdd}t | jjdgd	d
dddgdd}t|| d S )Nr.   r/   r+   r,   r-   r   )r8   r9   r:   rR   r0   r   axis)r9   r:   rR   )r   r4   Z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  jddgddgd| dS )Nr.   r/   r+   r,   r-   r8   r9   r:   rQ   r   r4   funcr5   r   r   r     s       z;TestPivotTable.test_pivot_multi_functions.<locals>.<lambda>rE   stdr   )keysr   c                    s   t  jddgddgd| ddS )Nr.   r/   r+   r,   r-   T)r8   r9   r:   rQ   r   r   r   r5   r   r   r     s   )r1   rE   r   r   r<   r=   )r6   r   rX   ZmeansZstdsrI   r   r5   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}|rZtt |jdddd}W 5 Q R X n(tt tj|dddd}W 5 Q R X 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            rZ   r[   r\   rZ   r[   r\   r:   r8   r|   r   r   )r1   r   r   r<   rd   re   pivotr   r
   r=   rf   )r6   r   r   rW   rX   rI   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-01r}   r.   )r   r   d   )rZ   r\   rZ   z
2014-02-02r[   )r   rZ   )r   rZ   r   r[   )r   r[   r\   r   )r   r   r1   r   r   r   r   locr   Znotnar8   rU   r>   rA   Ziterrowsr<   r=   rf   )r6   r   rW   pv_rowrX   r   r   r   test_pivot_index_with_nan_dates  s$    $z.TestPivotTable.test_pivot_index_with_nan_datesz1ignore:Timestamp.freq is deprecated:FutureWarningc                 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   ry   r   rK     r   r   r   )dt1dt2data1data2r   c                 S   s   t j| ddS N
US/Pacifictzr   r   rj   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   )rB   r   r   z2013/01/01 09:00z2013/01/02 09:00r   r   r   )r   r   r1   r   applyr
   r   r   r   r   r   r<   r=   r6   r   rW   exp_col1exp_col2exp_colrI   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   k  r   z8TestPivotTable.test_pivot_tz_in_values.<locals>.<lambda>r   r   r|   z2016-08-12 00:00:00z2016-08-25 00:00:00r   )r   r   r   	set_indexr   r   mapr   r1   minr
   r   r<   r=   )r6   rW   ZminsrX   rI   r   r   r   test_pivot_tz_in_valuesO  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   rK   r	  )rB   r   r   r   r   r  r   r   )r   r   Periodr1   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   rK   Z2019Q1Z2019Q2r   )rZ   r[   r]   r   rZ   r|   r[   )r4   r9   r:   r]   T)r9   r:   r8   r   )r   r   r
  r
   r   r<   r=   )r6   rW   rI   rX   r   r   r   test_pivot_periods_with_margins  s"    
z.TestPivotTable.test_pivot_periods_with_marginsr8   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   rK   r   r   rL   r}   r]   r^   r_   qwtr$   r%   r  r  r$   r%   r   r4   rB   r  r  r   levelscodesr?   objectr4   r9   r:   r   )r   r   r   r
   r   r<   r=   	r6   r8   r   rW   rX   r4   r9   r:   rI   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   rK   r   r   rL   r}   r]   r^   r_   r  r  r  r  r  r$   r   r  r%   r  r   r  r  r  )	r   r   r   r1   r   r
   r   r<   r=   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 )NrZ   r[   r\   r   rK   r   rM   z0pivot\(\) missing 1 required argument: 'columns'ra   rN   rP   )r9   r8   )r   pytestraises	TypeErrorr   )r6   rW   rg   r   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   rK   r   r   rL   r4   r&   r+   r]   r,   r^   r-   r_   r'   r  r  r}   r  r%   r  firstr  )r  r  r  r  )r%   r#  )r%   r  )r  r#  r   rw   rz   )r
   r   r   r   r   r   r<   r=   )r6   r   r9   r4   r:   rW   rX   rI   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   rK   r   r   rL   r}   r]   r^   r_   r  r  r  r  z^\('bar', 'baz'\)$ra   r  r$   )r%   r  r   )r   r  r  KeyErrorr   r   )r6   r   rW   r   r   r   test_pivot_with_tuple_of_valuesL  s    z.TestPivotTable.test_pivot_with_tuple_of_valuesr+   r,   r-   r   c                 C   s   |j |jd d |f }| j||  }tj||dd |j|ksJt|	 }|j |df j
d d }| j||  }	tj||	dd |j|dfkst|j |df|f }
| j|  }|
|kstd S )Nr   FZcheck_names )r   r9   r4   rC   rE   r<   r   rB   rA   Z
sort_indexZiloc)r6   rX   Z
values_colr9   r:   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 jdddgddtjd}| |d | j jdddgddtjdd}| j|ddd	 | j jddgddtjd
}|jjd D ]}| || | q|d S )Nr.   r+   r,   r-   T)r8   r9   r:   r   rQ   ZTotals)r8   r9   r:   r   rQ   margins_name)r)  r9   r:   r   rQ   r   )r4   r   r1   rE   r*  r:   r  )r6   rX   rG   	value_colr   r   r   test_marginsq  s2           zTestPivotTable.test_marginsc              	   C   s   dd | j jD | j _d}tjt|d | j jddgdtjd}W 5 Q R X |jD ](}|jd	|f }|| j |  ksRt	qRd
}tjt|d | j jddgddd}W 5 Q R X dD ](}|jd	|f }|| j |  kst	qd S )Nc                 S   s   g | ]}|d  qS )rK   r   )r   kr   r   r   
<listcomp>  s     z.TestPivotTable.test_no_col.<locals>.<listcomp>$The operation <function mean.*failedra   ZAABBT)r9   r   rQ   r   r(  ;pivot_table dropped a column because it failed to aggregaterE   )ZDDZEEZFF)
r4   r:   r<   rd   re   r   r1   rE   r   rA   )r6   rg   rG   r-  Ztotalsitemr   r   r   test_no_col  s*      
  zTestPivotTable.test_no_colz*columns, aggfunc, values, expected_columns      @g@       @g@r$   r|   rU   ry         rL   r}   r*             )r%   r&   )r%   r'   )r%   r   )r$   r&   )r$   r'   )r$   r   ro   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r|d}nd}tjt|d |j|d|d}W 5 Q R X t |tddg|d}t|| d S )Nr$   r%   r&   r'   smalllarger   rK   r   r   rL   r}   r~   r   ry   r+   r,   r-   r.   r/   rU   r4  r1  ra   T)r:   r   rQ   r.   r/   r   )r   r<   rd   re   r   r
   r=   )	r6   r:   rQ   r8   r   rW   rg   rX   rI   r   r   r   %test_margin_with_only_columns_defined  s0    z4TestPivotTable.test_margin_with_only_columns_definedc                 C   s   | j  }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.   r/   r0   r%   r$   r&   r'   r3  r   ro         ry   -   !   r   $   3   x   r(   r)   rw   r-   r   r   r(   r)   r   r+   r,   Tr8   r9   r:   r   rQ   rR   )r4   copyr1   r   r>   r   rV   rT   r   r   rp   r   rename_axisr   rU   r<   r=   )r6   rW   mi_valmirI   rX   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jdddgddtdd}t	
|| d S )Nr%   r$   r&   r'   r3  r   ro   r   rK   rL   r   r}   rJ  rw   r-   r   r(   r)   r   r.   r+   r,   TrK  )rT   r   r   rp   r   rM  r4   r   r>   r<   r=   )r6   rN  rO  rI   rX   r   r   r   test_margins_dtype_len  s&      	z%TestPivotTable.test_margins_dtype_lenr`   )r   rK   )rZ   r[   r   )rZ   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   rK   r   r   r   rL   r}   )r8   r:   )r   r   )rK   rK   )r   r   ro   r:   r9   )r   r   r   rp   r
   r<   r=   )r6   r`   df2rX   rI   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   rz   r,   r-   F)r9   r   r   )
r   r   r1   r2   r3   r   r9   r  equalsrA   )r6   ZdtirW   rX   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   r0  *  s     z=TestPivotTable.test_pivot_integer_columns.<locals>.<listcomp>r   r   r   r   r   r   rK   )r8   r9   r:   r   40132Fr'  )r   r  rT   r   r   r   r   renamestrr<   r=   )r6   r4   rW   rG   rS  rH   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 )NrZ   r[   rK   r   r   r$   r   r%      )rZ   r[   r\   valuera  r\   r   all)r   how)r   r1   r2   r3   r   rC   rE   rF   r   r<   r=   )r6   r4   rG   ZgroupedrI   r   r   r   test_pivot_no_level_overlap6  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
   ZSymbolYearMonthZDayQuantityZPrice)SP500ZADBE)rh  ZNVDA)rh  ZORCL)NDQ100ZAAPL)ri  ZMSFT)ri  ZGOOG)FTSEzDGE.L)rj  zTSCO.L)rj  zGSK.Lr   r   i  r   i  rC     r   r   rE   r9   r:   rQ   )r1   r   r  intr   arrayemptyr2   randintr>   r   r   yearrm   r   Z	lognormalr   r   r:   Zis_monotonic_increasingrA   )
r6   nr   ZproductsitemsZiproductZdrdatesrW   pivotedr   r   r   test_pivot_columns_lexsortedH  sT    


z+TestPivotTable.test_pivot_columns_lexsortedc                 C   sL   dgdgd}| j ddg|d}| j jdd|d}t|| d S )Nr   rU   r.   r/   r+   r,   rl  )r4   rC   rD   rF   r   r<   r=   )r6   r   rI   rX   r   r   r   test_pivot_complex_aggfunc|  s    z)TestPivotTable.test_pivot_complex_aggfuncc                 C   sF   | j ddg jddgtdd}| }t|d d |d ksBtd S )Nr+   r,   T)r9   rQ   r   r   )r4   r   r>   tolistrU   rA   )r6   rX   Zresult_listr   r   r   test_margins_no_values_no_cols  s      z-TestPivotTable.test_margins_no_values_no_colsc                 C   sB   | j 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r9   r:   rQ   r   r   r   r         &@r4   r   r>   r   ry  rA   r6   rX   r   r   r   test_margins_no_values_two_rows  s       z.TestPivotTable.test_margins_no_values_two_rowsc                 C   s8   | j ddg jddtdd}|j dddgks4t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   sh   ddddddddd	d
dg| j d< | j ddddg jddgddgtdd}|j dddddgksdtd S )NrZ   r[   r\   rj   er   ghr   jr/  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  NrZ   r[   c              	   C   s   d| d}t jt|d" t| jdddgdgd|d	 W 5 Q R X t jt|d" t| jddgddgd|d	 W 5 Q R X t jt|d  t| j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 stringra   r.   r+   r,   r-   T)r8   r9   r:   r   r+  )r  r  
ValueErrorr   r4   )r6   r  rg   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   rL   r   ry   r   r   rK   rC  )BranchBuyerrg  Dater  r<  r   r   rk  r+   r   zCarl Joe Markr   r  rg  r9   r:   r8   rQ   r~   Z6MSZCarlr   r   z#'The grouper name foo is not found'ra   r$   )r   levelzThe level foo is not valid)r   splitr   r  r1   rn  r   r   r   r9   rB   r:   r   r	   rU   r<   r=   rf   r   rV   r   r  r  r%  r  )r6   using_array_managerrW   rI   rX   rg   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   rL   r   ry   r   r*   r9  r   r   r   rK   rC  r;  r   r   r~      )r  r  rg  r  PayDayr   r  r  r  rg  r  r}   rk  r   r   ro   r+   r,   r  )r   r  r   r   r	   r1   rU   rn  r   r   r   r   r9   rB   r:   r<   r=   rf   r   rp   )r6   rW   rX   rI   Ztuplesr   r   r   r   test_pivot_timegrouper_doubleb  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:00rZ   r[   r}   r   r   r   rK   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   rB   r  r  r|   r   r   rL   r   r   rU   rE   r  r   r  )r   r1   r   r   r   r   r
   r   r   r   r<   r=   rn  rU   rE   )r6   dates1dates2rW   exp_idxr   r   r   rI   rX   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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ddtdddgddd}t	|| t||d jjj|d jj|d jj
gdd}tjddddddgddgd gddgd }t tjddddddggd	d
d!g|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  rZ   r[   r}   r   r   r   rK   r   r  r   c                 S   s
   t | S r   r   r   r   r   r   r   C  r   z6TestPivotTable.test_pivot_dtaccessor.<locals>.<lambda>r   c                 S   s
   t | S r   r   r   r   r   r   r   D  r   r  r  r   r|   r   r   rL   )r~   r   ry   r~   r   ry   r   ro   r   XY)r   r1   r   r   r   r   r   r
   r<   r=   rm   rq  r8   r   r   rn  r   )r6   r  r  rW   rX   r  rI   r   r   r   r   test_pivot_dtaccessor(  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   rw   r   r   Fr'  )r   r   r1   r2   r3   r>   r   r   r9   rq  Z	dayofyearr:   	droplevelZasarrayr   r<   r   rB   rA   )r6   r   rngr   annualZdoysubsetrX   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   rw   r   r   Fr'  )r   r   r1   r2   r3   r>   r   r   r9   rq  rm   r:   r  r   r<   r   rB   rA   )r6   r   r  r   r  rm   r  rX   r   r   r   test_monthly  s    
zTestPivotTable.test_monthlyc                 C   s   ddd}t | jdgt| |d}t | jdg| |d}t|| dd | D }t | jdg||d}t|| d S )NrU   rE   rw  r+   )r9   r8   rQ   c                 s   s   | ]
}|V  qd S r   r   )r   ra  r   r   r   	<genexpr>  s     zGTestPivotTable.test_pivot_table_with_iterator_values.<locals>.<genexpr>)r   r4   rT   r   r<   r=   )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WeeklyZbaconZcheeser   r   g	@gffffff
@r   rf   )r5  costr   r5  r   T)r9   r:   r   r+  rQ   r  r   rB   )rE   r  r   )rE   r  rf   rE   r  )maxr  r   )r  r  rf   r  ro   r   )r   r   r1   rE   r  r
   r   rp   r8   r<   r=   )r6   r+  ZcostsrG   ixZtupsr`   rI   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   rK   r]   r^   r_   r   r   r   rL   r}   r7  r   r   r   r   r   r^   r|   r_   r]   Tr   r   )node
add_markerr  markxfailr   r1   r   r
   r9   r:   r   r<   r=   r6   r;   r   rW   rI   rG   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   rK   r  r   r   r   rL   r}   r7  r   r   r   r   r   r^   r|   r_   rS   r]   Tr  )r  r  r  r  r  r   r1   r   r
   r9   r:   r^   rV   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 )NrK   r   r}   r   r   rL   r   r  r  )r+   r,   r-   r.   r.   T)r9   r   r~   r   g      @r   r   rz   r   r|   rw   )r   r   r
   r<   r=   r6   rW   rX   rI   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,   rt   r   r}   )InColValr  r  r  )r9   r:   r8   r;   )rv   rB   r   r   )r4   r:   r|   )r:   r8   r;   r   )r4   r:   r9   )r1   r   r   r   r   r   r   CategoricalIndexr
   r9   r<   r=   )	r6   r;   rv   r   r   rW   rX   Zexpected_colsrI   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-   rZ   r[   r   rK   r   r   )r   r   Vr   rS   r  r   count)r9   r:   r   rQ   Fru   rv   rB   r|   r   r   r   )r   rV   r   r   r  r
   r1   rn  r   r<   r=   )r6   r;   rW   rX   r   r   expected_datarI   r   r   r   test_categorical_aggfunc*  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   rI     Januaryr   r   )Salesrf  re  FebruaryZMarchZAprilMayZJuneZJulyZAugustZ	SeptemberZOctoberZNovemberZDecemberrf  rS   r  re  rU   )r8   r9   r:   r;   rQ   r   )rB   r   Fr  i@  r   r*   r   )r   rV   r   Zset_categoriesr   r
   r   r  r   r<   r=   )	r6   r;   rW   monthsrX   r   r   r  rI   r   r   r   %test_categorical_pivot_index_ordering>  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   rL   r-   r.   r/   r   ry   rM   rN   rP   rO   rc   ro   r   rl  r|   rU   )
r   r   r1   rU   r   r   r<   r=   NaNr
   )r6   rW   rX   rr   rI   r   r   r   test_pivot_table_not_seriesj  s     ""&"z*TestPivotTable.test_pivot_table_not_seriesc                 C   sZ   d}t ddddgi}t|dgtd|d}tddd|gddd	}t |d
}t|| d S )Nu   Δοκιμήr$   r   rK   r   T)r9   rQ   r   r+  r  r  rw   )r   r   r>   r
   r<   r=   )r6   greekframerG   r9   rI   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*   rz   r+   r,   rU   rl  r-   r   r   r  r   r9  )r%   r$   r~   r   ))r-   r&   )r-   r'   r   rE         @r   r  g@))rE   r-   r&   )rE   r-   r'   )rU   r-   r&   )rU   r-   r'   )r   r   r   r   rM  r<   r=   )r6   r4   rX   rO  rI   r   r   r   test_pivot_string_as_func  st        	z(TestPivotTable.test_pivot_string_as_funcz
f, f_numpyrE   r   c              	   C   sR   d}t jt|d* t| jdd|d}t| jdd|d}W 5 Q R X t || d S )Nr4  ra   r+   r,   rl  )r<   rd   re   r   r4   r=   )r6   r   Zf_numpyrg   rX   rI   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)r6   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 generatera   r  r  r  r  r  )reshape_libr  contextsetattrr   r1   r   r<   rd   r   r  r  r  r   )r6   Zmonkeypatchr  rr   rW   rg   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 )NZappleZpeachr   rK   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   )rU   r   r   r   r   ret_sum  s    z?TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_sumc                 S   s   t jS r   )r1   r   r   r   r   r   ret_none  s    z@TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_noner  r:   rQ   r   r   r9  r  r  r  ro   r  r  r   r:   r   )	r   r   r1   r   r   Zfrom_productr   r<   r=   )
r6   r   rW   r  r  r  rX   r4   r   rI   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   rK   r   )r+   r]   r^   r+   r  r   r|   r]   r^   r   r:   r   )	r   r1   r   r   rE   r
   r   r<   r=   )r6   r   rW   rX   r4   r   rI   r   r   r   &test_pivot_table_aggfunc_scalar_dropna  s    "z5TestPivotTable.test_pivot_table_aggfunc_scalar_dropnac              	   C   sz   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 tg dddd}d|j_t|| d S )NrK   r   rL   r}   r~   r   ry   pr  )r+   idr-   r.   r+   r.   r  r  r   r  rw   )	r   r   r1   r  r
   r:   rB   r<   r=   r  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   )r1   rE   )Zarrr   r   r   rD   @  s    z=TestPivotTable.test_pivot_table_no_column_raises.<locals>.aggr   r   r   r   r  (   )r  r  ZZ
notpresentra   r  r  )rQ   )r   r  r  r%  r   )r6   rD   r$   r   r   r   !test_pivot_table_no_column_raises>  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'   r>  r?  r   rK   r   r   rL   r}   r~   r   ry   r@  r.   r/   r+   r-   rw  )r8   r9   rQ   )r.   rE   )r/   r  )r/   rE   )r/   r  )r%   r?  )r%   r>  )r$   r?  )r$   r>  ro   r7  g      "@g      @      @g      !@r8  r   r  r   r   g["8@g.UUU@rR  )r   r   r1   rE   r  r  r   rp   rn  rV   r   r<   r=   )r6   rW   rG   r`   r9   valsrI   r   r   r   0test_pivot_table_multiindex_columns_doctest_caseG  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 )Nd1Zd4Zd3rZ   r[   r\      rD  "   Z2018Z2019)rZ   r   numrq  r   rq  r  rU   F)r9   r:   r8   rQ   sortr|   ro   rR  )	r   r   r1   r   r
   r   r   r<   r=   r  r   r   r   test_pivot_table_sort_false{  s.         z*TestPivotTable.test_pivot_table_sort_falsec                 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      /   rF  )	firstnamelastnameheightager  r  r  r  F)r9   r8   r  )r  r	  )r  r
  ro   rR  )r   r   r   rp   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 )NrZ   r]   r   r^   rK   r[   r   r_   r   r   r   r  rU   r   T)r9   r:   r8   rQ   rR   r   r~   rL   r   )r   r:   r   r9   rB   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 )NrZ   r[   r   r  ZInt64r   )r]   r^   r  r]   r^   r  rE   )r9   r:   r8   rQ   r   r  r|   ZFloat64)r9   r:   r   )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   rK   z
2019-12-31g      $@r*   )rZ   r[   r   salesr[   r   rZ   TrU   r,  r|  g      5@r   r|   r(  r  )r  r+   )r  r   ro   r   )r   r   r   r<   rd   r   r   r   r
   r  rp   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'   r>  r?  r   rK   r   r   rL   r}   r~   r   ry   )r+   r,   r-   r.   r/   )Zcol5)Zcol6r}   r~   Zsevenr.   r+   r,   r  r   r   r  r  r   r   r|   ro   rR  r   )r   r   r1   rU   r   r
   r   r   rV   r<   r=   )r6   r  rW   rX   rI   r   r   r   )test_pivot_table_with_mixed_nested_tuples  s    4     z8TestPivotTable.test_pivot_table_with_mixed_nested_tuples)`r  r  r  r7   rJ   rY   ri   rs   rx   r   r   r   r   r   r   r   r   r   r  r  Zparametrizer   r   r   r   r   r   filterwarningsr   r  r  r  r1   rn  r   r
   r  r  r  r  r$  r&  r*  r.  r6  rE   r   rp   rA  rP  rQ  rT  rV  r_  rd  rv  rx  rz  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  rU   r   r  Zslowr  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r#   )   s6  0%	$

!	


;7
-

	

	!&
  

#
4	
% GS

#,>


#	4
 r#   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zd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   r9   r:   r8   rz   r  r  r   Nr:   )	r   r   r9   rB   r:   r<   r=   rA   r?   )r6   r4   r  ru  rI   r   r   r   
test_pivot.	  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 entriesra   rZ   r[   r\   r   )r   r  r  r  r   )r6   r4   r   r   r   test_pivot_duplicatesK	  s    zTestPivot.test_pivot_duplicatesc                 C   s:   t dddgd}|jdddd}t  }tj||dd d S )NrZ   r[   r\   r   r   Fr'  )r   r   r<   r=   r  r   r   r   test_pivot_emptyV	  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+   rZ  A1)r,   r\  ZB2r"  r   r   rK   r   r+   r,   r|   )r   r   reprr<   rq   r:   r
   )r6   rW   rX   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   r9   r:   r8   r   rz   r  r   r   )r8   r  )r8   r  ro   Fr'  r   r   )r   r  r   r9   rB   r:   r<   r=   r   rp   rA   r?   r  )r6   r4   r  rX   rI   r   r   r   test_pivot_index_nonec	  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 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st	d S )Nr   rK   r   r   rL   r}   r   )lev1lev2lev3lev4r8   r(  r)  r*  r   r   r   r   r   r  r   r   )r   r   rK   rK   )r   rK   r   rK   ro   )r+  r+  r8   r8   r   )
r   r   r1   rn  r   r   r   r<   r=   rA   )r6   rW   r9   r:   rX   rI   r   r   r   0test_pivot_index_list_values_none_immutable_args	  s>    	

 z:TestPivot.test_pivot_index_list_values_none_immutable_argsN)	r  r  r  r!  r"  r#  r&  r'  r,  r   r   r   r   r  -	  s   $r  )%r   r   r   	itertoolsr   Znumpyr1   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   Zfixturer   r   r"   r#   r  r   r   r   r   <module>   sD   (

.
                  