o
    Ehun                    @   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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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)using_string_dtype)PerformanceWarning)Categorical	DataFrameGrouperIndex
MultiIndexSeriesconcat
date_range)CategoricalDtype)reshapepivot_tableTF)paramsc                 C   s   | j S N)param)request r   ?lib/python3.10/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@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMejdd\e jNfdWe jOfde jPfd\dWge jNe jOgfd\dge jNe jPgfddWge jPe jOgfgdd ZQejjRdd ZSdd ZTdd ZUejdd.d/gdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\ejdd.d/gddÄ Z]ddń Z^ddǄ Z_ddɄ Z`dS )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r7|jjt|ks6J n
|jj|d ksAJ t|dkrP|jj|ksOJ n
|jj|d ksZJ |	||g d 
d	 }t|| d S )
Nr0   r1   r2   r3   )valuesindexcolumnsobserved)r<   r=   r?   r   r   mean)r   tmassert_frame_equallenr=   namestuplenamer>   groupbyaggunstack)r:   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col3rQ   rS   rR   sumr   )r=   r<   r>   aggfunc
fill_valuecategory)r=   r<   r>   rU   rV   r?   )
r	   listr   r=   astyper>   rQ   rR   rA   rB   )r:   r?   dfrL   resultr   r   r   +test_pivot_table_categorical_observed_equalz   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   )Zrowscolsr<   rf   rT   )r>   rU   r=   rU   r<   r@   )r	   r   TrA   rB   )r:   rZ   Z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   r0   r1   r2   i[ i] i\ i^ r^   r_   r`   di i  i@B )amountcustomermonthr   quantityrn   rm   rl   r   F)r   ))r0   r^   )r0   r_   )r0   r`   )r0   rj   )r1   r^   )r1   r_   )r1   r`   )r1   rj   )r2   r^   )r2   r_   )r2   r`   )r2   rj   rD   )r	   r   r   from_tuplesrA   assert_index_equalr>   r=   )r:   rZ   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}d	}tjt|d
 t|dddgdd}W d    n1 s>w   Y  tj||gddgd}tdg di|d}t|| d S )Nr^   r^   r_   r_   )r^   r_   rd   T
categoriesordered)r`   rj   r`   rj   )r`   rj   rc   r   r.   r   r   )r0   r1   r<   1The default value of observed=False is deprecatedmatchr<   r0   r1   )r<   r=   r   ro   )      ?       @      @      @r=   )	r   r	   rA   assert_produces_warningFutureWarningr   r   r    rB   )r:   Zcat1Zcat2rZ   msgr[   Z	exp_indexrL   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 t|dd|d< d	}tjt|d
 |jddd|d}W d    n1 s<w   Y  tg ddd}|t|dd}tg ddd}t g dg dg dg||d}|sw|j	t
|dd}t|| d S )Nr^   r_   r`   rj   )	r^   r^   r^   r_   r_   r_   r`   r`   r`   )	r   r.   r   r   r.   r   r   r.   r   	   r0   r1   r2   r0   Frw   ry   rz   r1   r2   )r=   r>   r<   r   r]   rF   re   )        r~         @)r|   r         @)r}         @       @r=   r>   r>   float)r	   rangerY   r   rA   r   r   r   r   Zreindexr   rB   )	r:   r   rv   rZ   r   r[   expected_columnsexpected_indexrL   r   r   r   $test_pivot_table_dropna_categoricals   s2   
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}d}tjt|d |jd	d
|d}W d    n1 s2w   Y  |rBd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highTru   )r   r|   r}   r~   r   r0   r1   ry   rz   r0   r1   r=   r<   r   r}   r~   r   r   r}   r~   r   )r   r   r   r   )r	   r   r6   nanrA   r   r   r   r   
from_codesrB   )r:   r   rZ   r   r[   r<   codesrL   r   r   r   %test_pivot_with_non_observable_dropna   s8   


z4TestPivotTable.test_pivot_with_non_observable_dropnac                 C   s   t tg dg dddtdd}d}tjt|d |jd	d
|d}W d    n1 s.w   Y  t d
g dittjg dg dddd	dd}|sV|d
 	t
|d
< t|| d S )N)r"   r   r   r   r   )r   r   r"   Tru   rO   r   ry   rz   r0   r1   r   r   )r   r   r.   r   r   )r	   r   r   rA   r   r   r   r   r   rY   r   rB   )r:   r   rZ   r   r[   rL   r   r   r   /test_pivot_with_non_observable_dropna_multi_cat  s2   
	z>TestPivotTable.test_pivot_with_non_observable_dropna_multi_catc                 C   s   t |dd}d}tjt|d |jdd|d}W d    n1 s#w   Y  t ddit| dd	d
}|s=|t}t	|| d S )Nr   r   ry   rz   r0   r1   r   r|   r   r   )
r	   rA   r   r   r   r   uniquerY   r   rB   )r:   r$   r   rZ   r   r[   rL   r   r   r   test_pivot_with_interval_index7  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}d}t	j
t|d t|dddddd}W d    n1 sCw   Y  |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   ry   rz   r2   r1   r0   rT   r=   r>   r<   rU   marginsAll)r      
   r   r.   r   )r=   rF   r   )r   r   r    r	   r6   arangeZintpr   Zsort_valuesrA   r   r   r   r   r   ZIntervalassert_series_equal)r:   Zordered_catrZ   r   Z	pivot_tabr[   rL   r   r   r   &test_pivot_with_interval_index_marginsE  s.   
 z5TestPivotTable.test_pivot_with_interval_index_marginsc                 C   s4   |j d|j|jd}|j dddd}t|| d S )Nr3   r   r0   r2   )r   r0   r2   rA   rB   r:   r;   r[   rL   r   r   r   test_pass_arraya  s   zTestPivotTable.test_pass_arrayc                 C   s<   |j ddd |jd}|j d|jd dd}t|| d S )Nr3   c                 S   s   | d S )NrO   r   rb   r   r   r   <lambda>g  s    z3TestPivotTable.test_pass_function.<locals>.<lambda>r   rO   r2   )r   r2   r=   rA   rB   r   r   r   r   test_pass_functionf  s   z!TestPivotTable.test_pass_functionc                 C   sD   ddg}d}t |||d}|||g d }t|| d S )Nr0   r1   r2   r   r@   )r   rG   rH   rI   rA   rB   )r:   r;   r=   r>   rJ   rL   r   r   r   test_pivot_table_multiplek  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sUJ 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   rx   r   )r^   vir   int64r^   r   r   rT   )r<   r=   r>   rV   rU   r.   abr   r   )      ?      @      @      @float64r@   )
r	   dtypesr   r   r6   r   r   rX   rA   r   )r:   frd   r[   rL   r   r   r   test_pivot_dtypesr  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s3J d S )NrO   r   r}   r.   r   )r   r   r   r   r=   r=   r>   r<   c                 S   s   i | ]}|t d qS )r   )r6   r   ).0colr   r   r   
<dictcomp>      z=TestPivotTable.test_pivot_preserve_dtypes.<locals>.<dictcomp>)r6   r   r   r	   reset_indexr   dictr   )r:   r>   r<   r   rZ   Zdf_resr[   rL   r   r   r   test_pivot_preserve_dtypes  s   

z)TestPivotTable.test_pivot_preserve_dtypesc                 C   sj  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jdgt jdgddgd dgd}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   r0   rN   r   r   )r0   r   )r0   r.   r   )levelr   r   r}   r.   r   r   r3   rO   )freqperiods)r0   dtr   ME)keyr   z
2011-01-31zM8[ns]ro         
@YEr   r~   z
2011-12-31)r   DatetimeIndexr	   r   r=   rm   dayr   rp   Z
set_levelslevelsrY   r6   int32r   r   rA   rB   r   r
   r    )r:   idxrZ   resZexp_columnsZexpr   r   r   test_pivot_no_values  sN   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 )Nr3   r4   r0   r1   r2   r   )r<   r=   r>   rV   r5   r   axis)r=   r>   rV   )r   droprA   rB   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 )Nr3   r4   r0   r1   r2   r<   r=   r>   rU   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 )Nr3   r4   r0   r1   r2   T)r<   r=   r>   rU   r   r   r   r   r   r   r     s    )r   rA   rB   )r:   r;   r   r[   ZmeansZstdsrL   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   )	r6   r   r	   pivotr   r   rA   rB   rh   )r:   r   r   rZ   r[   rL   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< |r=|jdd	dd}n	tj|dd	dd}|	 j
 t|ksSJ | D ]\}}|j|d |d	 f |d kslJ qW|rx|jd	ddd}n	tj|d	ddd}t||j d S )Nz
2014-02-01   r3   )r   r   d   )r^   r`   r^   z
2014-02-02r_   )r   r^   )r   r^   r   r_   )r   r_   r`   r   )r	   r   r6   r   r   	Timestampr   locr   Znotnar<   rT   rC   ZiterrowsrA   rB   rh   )r:   r   rZ   pv_rowr[   r   r   r   test_pivot_index_with_nan_dates  s$   $z.TestPivotTable.test_pivot_index_with_nan_datesc           
      C   s  t tj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| ddtj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| d
dtjdddtjdddd}tg d}tjddgd dd| d
d}t||g}tjddgdd| dd}t g dg dg||d}|r|j	ddd}	ntj	|ddd}	t
|	| t ddgddgg||d d d}|r|j	dddd}	n	tj	|dddd}	t
|	| d S )N  r   r   r   r.   zM8[z, US/Pacific]r     z, Asia/Tokyo]r   r   )dt1dt2data1data2r  r  r  r  z2014/01/01 09:00z2014/01/02 09:00r  rF   r   z2013/01/01 09:00z2013/01/02 09:00r   r   r.   r   r.   r   r   r   r   r   r   r  r   )r	   r   r   r   r6   r   r   r   r    r   rA   rB   )
r:   r   ZunitrZ   exp_col1exp_col2exp_colexp_idxrL   r   r   r   r   test_pivot_with_tz4  sf   
	
	



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-0700z
US/Pacific)tz)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   )hourZminutesecondZmicrosecond)replacer   r   r   r   r     s    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   rA   rB   )r:   rZ   Zminsr[   rL   r   r   r   test_pivot_tz_in_valuest  sR   z&TestPivotTable.test_pivot_tz_in_valuesc              	   C   st  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}|rs|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-01r3   z
2013-01-02z2013-01Mz2013-02r   r   r   )p1p2r  r  r  r.   r  )rF   r   r  r  r  r   r   r   r   r  r   )r	   r   Periodr6   r   r   ZPeriodIndexr   r    r   rA   rB   )r:   r   rZ   r  r	  r
  rL   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2019Q2r|   )r^   r_   rb   r   r.   r   r^   r   r   r_   r;   r=   r>   rb   T)r=   r>   r<   r   )r	   r   r  r   r   rA   rB   )r:   rZ   rL   r[   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}|r|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< t|| d S )Nr*   r*   r*   r+   r+   r+   r0   r1   r2   r0   r1   r2   r   r.   r   r   rO   r   rb   rc   rd   qwtr'   r(   r  r   r'   r(   r   )r   r.   r   rb   rc   rd   )r   rO   r   r%  r&  r'  r*   r+   r;   rF   r  r   r   )r   r   r   r   r   r   )r   r   r.   r   r   r.   r   r   rD   r  )	r	   r   r   r   r   rY   objectrA   rB   	r:   r<   r   rZ   r[   r;   r=   r>   rL   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}|r|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< t	
|| d S )Nr!  r"  r#  r$  r(  r   r'   r   r0   r   r2   r   r1   rO   r   r.   r   )r%  r'  r&  rb   rc   rd   r)  r(   r  r*   r+   r   r   r   r   r   r*  r  )r	   r   r   r6   r   r   r   rY   r+  rA   rB   r,  r   r   r   %test_pivot_with_list_like_values_nans  s4   	z4TestPivotTable.test_pivot_with_list_like_values_nansc                 C   sb   t g dg dg dd}d}tjt|d |jddd W d    d S 1 s*w   Y  d S )	Nr]   re   rP   z=pivot\(\) missing 1 required keyword-only argument: 'columns'rz   rQ   rS   )r=   r<   r	   pytestraises	TypeErrorr   )r:   rZ   r   r   r   r   #test_pivot_columns_none_raise_errorB  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   rO   r   )r*   r0   r   rb   )r*   r1   r.   rc   )r*   r2   r   rd   )r+   r0   r   r%  )r+   r1   rO   r&  )r+   r2   r   r'  r(   r  firstr  r   r.  )r   r   r+  )r;   r=   r>   r   )r(   r8  )r(   r  )r  r8  r   r   r   r*   r+   r   r.   rO   r   r   r   )r   r   r	   r   r   r   rA   rB   )r:   r   r=   r;   r>   rZ   r[   rL   r   r   r   test_pivot_with_multiindexI  s>   z)TestPivotTable.test_pivot_with_multiindexc                 C   s   t g dg dg dg dd}tjtdd% |r$|jdd	d
d ntj|dd	d
d W d    d S W d    d S 1 s@w   Y  d S )Nr!  r"  r#  r$  r(  z^\('bar', 'baz'\)$rz   r   r'   )r(   r  r   )r	   r1  r2  KeyErrorr   r   )r:   r   rZ   r   r   r   test_pivot_with_tuple_of_valuess  s   "z.TestPivotTable.test_pivot_with_tuple_of_valuesr0   r1   r2   r   c                 C   s   |j |jd d |f }|||  }tj||dd |j|ks$J | }|j |df jd d }	|||  }
tj|	|
dd |	j|dfksNJ |j |df|f }||  }||kscJ d S )Nr   FZcheck_names )	r   r=   rG   r@   rA   r   rF   Z
sort_indexZiloc)r:   r[   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_output  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 ]}| || || q:d S )Nr3   r0   r1   r2   Tr@   )r<   r=   r>   r   rU   ZTotals)r<   r=   r>   r   rU   margins_name)r>  r=   r>   r   rU   r   )r   r?  r>   r   )r:   r;   r[   rJ   	value_colr   r   r   test_margins  s&   zTestPivotTable.test_marginsc                 C   s>  dd |j D |_ td}|rd}tjt|d |jddgdd	d
 W d    n1 s.w   Y  |jddjddgdd	d
}|j D ]}|jd|f }||| 	 ksWJ qDtjt|d |jddgdd	d
 W d    n1 stw   Y  |jddjddgdd	d
}dD ]}|jd|f }||| 	 ksJ qd S )Nc                 S   s   g | ]}|d  qS )r.   r   )r   kr   r   r   
<listcomp>  s    z.TestPivotTable.test_no_col.<locals>.<listcomp>&agg function failed [how->mean,dtype->-dtype 'str' does not support operation 'mean'rz   ZAAZBBTr@   )r=   r   rU   ZCCr   r   r=  )ZDDZEEZFF)
r>   reescaper1  r2  r3  r   r   r   r@   )r:   r;   using_infer_stringr   rJ   rB  Ztotalsitemr   r   r   test_no_col  s.   



zTestPivotTable.test_no_colz*columns, aggfunc, values, expected_columnsr@   )      @rN  皙@rO  )r   r   皙@rP  )r(   r   r'   r   r   rT   )r         rO   r   r/   )          r/   r/   rR  ))r(   r*   )r(   r+   )r(   r   )r'   r*   )r'   r+   )r'   r   ro   c           
      C   s   t g dg dg dg dg dd}|dkr@td}|r!d	}tjt|d
 |j|d|d W d    n1 s;w   Y  d|vrJ|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largerZ  rY  rY  rZ  rY  rY  rZ  	r   r.   r.   r   r   r   rO   r   r   	r.   r   rO   rO   r   r      r   r   r0   r1   r2   r3   r4   rT   rF  rG  rz   T)r>   r   rU   r1   r   r2   r3   r4   r   )r	   rI  rJ  r1  r2  r3  r   r   r   rA   rB   )
r:   r>   rU   r<   r   rK  rZ   r   r[   rL   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   Zi8)r3   r4   r5   r(   r'   r*   r+   rH  r   ro   )      r   r   -   )!   r   $   3   x   r,   r-   r   r2   r   r   r,   r-   r   r3   r0   r1   TrT   r   r<   r=   r>   r   rU   rV   )copyr6   r   rC   r   rY   rX   r   r   rp   r	   rename_axisr   rA   rB   )r:   r;   rZ   mi_valmirL   r[   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+   rH  r   ro   )r   r   r.   r   rO   )r.   r   r.   r.   r   rg  r   r2   r   r   r,   r-   r   r3   r0   r1   Tr   rh  )
rX   r   r   rp   r	   rj  r   rC   rA   rB   )r:   r;   rk  rl  rL   r[   r   r   r   test_margins_dtype_len-  s"   	z%TestPivotTable.test_margins_dtype_lenrf   ))r   r.   r^   r_   r   )r^   r   c                 C   s~   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
kr1dnddd}t|| d S )Nr   re   r   r   )r   rO   r   )r<   r>   )r   r   r   ))r   r   )r.   r.   )r   r   ro   ro  strr+  r   r>   r=   )r	   r   r   rp   r   rA   rB   )r:   rf   df2r[   rL   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 	|s1J d S )Nz
2016-01-01r   zEurope/Amsterdam)r   r  r.   r   r1   r2   F)r=   r   r   )
r   r	   r6   r7   r8   r9   r   r=   r   Zequals)r:   ZdtirZ   r[   r   r   r   test_pivot_table_retains_tzN  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   Zx1Zx2c                    s   g | ]} t | qS r   )r   r   r   rj   r   r   rE  e  r   z=TestPivotTable.test_pivot_integer_columns.<locals>.<listcomp>r   r|   r   )r   r   r   r.   )r<   r=   r>   r   4)0132Fr<  )r   r  rX   r   r   r	   r   renamerp  rA   rB   )r:   r;   rZ   rJ   rr  rK   r   rv  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   Zhow)r	   r6   r7   r8   r9   r   rG   r@   rI   r   rA   rB   )r:   r;   rJ   ZgroupedrL   r   r   r   test_pivot_no_level_overlapq  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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sJ 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  r`     r   r}   )r   r  r  r@   r=   r>   rU   )r6   r   r+  intr   arrayemptyr7   r8   ZintegersrC   r   r   yearrm   r   Z	lognormalr	   r   r>   Zis_monotonic_increasing)
r:   nr   ZproductsitemsZiproductZdrZdatesrZ   pivotedr   r   r   test_pivot_columns_lexsorted  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   rT   r3   r4   r0   r1   r  )rG   rH   rI   r   rA   rB   )r:   r;   r   rL   r[   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 )Nr0   r1   T)r=   rU   r   r   )r   rC   tolistrT   )r:   r;   r[   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sJ d S )Nr   r0   r1   r2   Tr=   r>   rU   r   r~   r|   r   r~         &@r   rC   r   r  r:   r;   r[   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sJ d S )Nr0   r1   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s"J d S )
N)r^   r_   r`   rj   er   ghr   jrD  r3   r0   r1   r2   r3   r0   r1   r2   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 s%w   Y  t jt|d t|ddgddgd|d	 W d    n1 sIw   Y  t jt|d t|ddgdgd|d	 W d    d S 1 smw   Y  d S )
NzConflicting name "z3" in margins|margins_name argument must be a stringrz   r3   r0   r1   r2   T)r<   r=   r>   r   r@  )r1  r2  
ValueErrorr   )r:   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 s1w   Y  tjt|d t|dtdd dddd W d    n	1 sVw   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 sw   Y  tjt|d t|dtdd d!ddd W d    d S 1 sw   Y  d S )#NA A A A A A A B$Carl Mark Carl Carl Joe Joe Joe Carlr   r   rO   r   r]  r   r   r   r   r   r   r.   r`  )BranchBuyerr  Dater  )r   rT  r   r   r   r   r  r   r   zCarl Joe Markr   r  r  rT   r=   r>   r<   rU   r   rT  r   Z6MSZCarlr   r   z#'The grouper name foo is not found'rz   r'   )r   r   zThe level foo is not valid)r	   splitr   r  r6   r  r   r   r   r=   rF   r>   r   r
   rA   rB   rh   r   rY   r   r1  r2  r:  r  )r:   using_array_managerrZ   rL   r[   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   rQ  r   r   rO   r   r   r.   r`  rS  r   r   r      )r  r  r  r  PayDayr   r  r  r  r  rT   r  r   r   r  r   r   ro   r0   r1   r  )r	   r  r   r   r
   r6   r  r   r   r   r   r=   rF   r>   rA   rB   rh   r   rp   )r:   rZ   r[   rL   Ztuplesr   r   r   r   test_pivot_timegrouper_double  s   





	



(

&z,TestPivotTable.test_pivot_timegrouper_doublec                 C   s  t jg dddd}t jg ddd}tg d||tjd	d
ddd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d,}	t	
|	| d S )-N2011-07-19 07:00:002011-07-19 08:00:002011-07-19 09:00:00r  r  r  zM8[ns, US/Pacific]r   r   rF   2013-01-01 15:00:00r  r  2013-02-01 15:00:00r  r  zM8[ns, Asia/Tokyo]r   r^   r^   r^   r_   r_   r_   r   r   r   r.   r   labelr   r  value1value2r  r^   r_   r  r   r   r~   r|   r   r}   r   r   r   )rT   rT   rT   rT   r@   r@   r@   r@   )r  r  r  r  r  r  r   r  )r   r   r   r.   )r   r   r.   r   )r.   rO   r   r.   )r   r~   r|   r}   )r|   r   r}   r|   )r}   r   r|   r}   r   r  rT   r@   r  )r   r   r	   r6   r   r   r   r    r   rA   rB   r  r   )r:   dates1dates2rZ   r  r  r	  r
  rL   r[   Zexp_col3Z	expected1Z	expected2r   r   r   test_pivot_datetime_tz  s   





z%TestPivotTable.test_pivot_datetime_tzc              
   C   s2  t g d}t g d}tg d||tjdddddg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  r   r  r   r^   r_   r   r   r~   r|   r   r}   r   )r   r]  r   r  r   r  )r   r   r]  r]  r   r   ro   )r   r~   r|   r   r}   r   r   )Xr  r  r  Yr  r   r   rO   r  r  )r   r   r	   r6   r   r   r   r  r   r   rA   rB   rm   r  r<   r   r    r  r   )r:   r  r  rZ   r[   r  rL   r
  r   r   r   test_pivot_dtaccessorv  s   



*z$TestPivotTable.test_pivot_dtaccessorc                 C      t dddd}ttt||d}tt||jj|jj	d}|j
d|_
t|jj	}i }|jj jD ]}|jj|k}t|j| || d||< q6t|tdj}t|| d S )	N1/1/2000
12/31/2004r3   r   r   r   r   r   )r   r   r6   r   rC   r   r	   r=   r  Z	dayofyearr>   	droplevelasarrayr   r<   r   rh   rA   rB   )r:   rngr  r[   ZdoyrL   rc   maskr   r   r   
test_daily  s   zTestPivotTable.test_dailyc                 C   r  )	Nr  r  r   r   r   r   r   r   )r   r   r6   r   rC   r   r	   r=   r  rm   r>   r  r  r   r<   r   rh   rA   rB   )r:   r  r  r[   rm   rL   rc   r  r   r   r   test_monthly  s   zTestPivotTable.test_monthlyc                 C   sv   ddd}t |dgt| |d}t |dg| |d}t|| dd |D }t |dg||d}t|| d S )NrT   r@   r  r0   )r=   r<   rU   c                 s   s    | ]}|V  qd S r   r   )r   r  r   r   r   	<genexpr>  s    zGTestPivotTable.test_pivot_table_with_iterator_values.<locals>.<genexpr>)r   rX   r   rA   rB   )r:   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|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   )rL  costr   rL  r   Tr@   max)r=   r>   r   r@  rU   r  r  r   )r@   r  r   )r@   r  rh   r  )r  r  r   )r  r  rh   )NNr   ro   r   )r	   r   r   r   rp   r<   rA   rB   )r:   r@  ZcostsrJ   ZixZtupsrf   rL   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 )Nr]  r   r.   ra   r|   r}   r   rO   r   rN  r   r   r   r   r   r   rc   r   rd   rb   Tr   r   )	r	   r6   r   r   r=   r>   r   rA   rB   )r:   r?   rZ   rL   rJ   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|_d}t	j
t|d |jdd	d|dd}W d    n1 s`w   Y  t	|| d S )Nr]  r   r.   ra   r  r  r  r  rc   r   rd   rW   ry   rz   rb   Tr  )r	   r6   r   r   r=   r>   rc   rY   rd   rA   r   r   r   rB   )r:   r?   rZ   rL   r   rJ   r   r   r   !test_categorical_margins_category0  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   r]  )r   r   rO   r]  )r   r   r   r   )r  r  r  r  r  r3   T)r=   r   )r~   r   rO   )r   g      @r   )r}   r   r   r   )r  r  r   r   r   r	   r   r   rA   rB   r:   rZ   r[   rL   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   r0   r1   ru   r   r   )InColValr  r  r  )r=   r>   r<   r?   )rw   rF   r}   r~   )r;   r>   r   )r>   r<   r?   r   )r;   r>   r=   )r6   r   r	   r   r   r   r   CategoricalIndexr   r=   rA   rB   )	r:   r?   rw   r   r   rZ   r[   Zexpected_colsrL   r   r   r   test_pivot_with_categoricalR  s.   z*TestPivotTable.test_pivot_with_categoricalc           	      C   s   t g dg dg dd}|d d|d< d}tjt|d |jd	dd
|dd}W d    n1 s5w   Y  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)r0   r1   r2   r2   rt   rx   )r   r   Vr   rW   ry   rz   r  r   count)r=   r>   r   rU   r   Frv   rw   rF   r^   r_   r   r   r   r.   r   r   )r	   rY   rA   r   r   r   r   r  r   r6   r  r   rB   )	r:   r?   rZ   r   r[   r   r   expected_datarL   r   r   r   test_categorical_aggfuncu  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}|rV|jdg }t	
|| d S )N)r   rf     )Januaryr  r  )r   r   r   )Salesr  r  )r  ZFebruaryZMarchZAprilZMayZJuneZJulyZAugustZ	SeptemberZOctoberZNovemberZDecemberr  rW   r  r  rT   )r<   r=   r>   r?   rU   r   r   r   r  Fr  i@  rf  r   r/   r   r  )r	   rY   r   Zset_categoriesr   r   r   r  r   rA   rB   )	r:   r?   rZ   Zmonthsr[   r   r   r  rL   r   r   r   %test_categorical_pivot_index_ordering  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   rO   )r2   r3   r4   )r   r   r   rP   rQ   rS   rR   rT   rg   ro   r   r  r   r   rO   r   )	r	   r   r   r    rA   rB   r6   r   r   )r:   rZ   r[   rr   rL   r   r   r   test_pivot_table_not_series  s    &z*TestPivotTable.test_pivot_table_not_seriesc                 C   sh   d}t dg ditdgtdd}t|dgtd|d}tdd	d
|gddd}t |g d}t|| d S )Nu   Δοκιμήr'   re   r   r   T)r=   rU   r   r@  r   r.   r   r+  r  r   )r	   r   r+  r   rC   rA   rB   )r:   greekframerJ   r=   rL   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   r0   r1   rT   r  r2   r*   r+   r   r   r*  r   rQ  )r(   r'   r   r   ))r2   r*   )r2   r+   r   r@   r   )r   r   r   r   r.  )NNr1   r   r   r   g@))r@   r2   r*   )r@   r2   r+   )rT   r2   r*   )rT   r2   r+   )r	   r   r   r   rj  rA   rB   )r:   r;   r[   rl  rL   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rd|n|}d| d}tjt|d	 t|dd|d}W d    n1 s:w   Y  t|| d S )
Nr2   r   r0   r1   r  |zusing DataFrameGroupBy.[]rz   )	r   r   
isinstancerX   joinrA   r   r   rB   )r:   r   Zf_numpyr;   r[   opsr   rL   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( t
jtd	d |jd
dddd W d    n1 sHw   Y  W d    n1 sWw   Y  W d    d S W d    d S 1 sow   Y  d S )Nc                       s   e Zd Zd fddZ  ZS )zSTestPivotTable.test_pivot_number_of_levels_larger_than_int32.<locals>.MockUnstackerreturnNc                    s   t  j|i | td)NDon't compute final result.)super__init__	Exception)r:   argskwargs	__class__r   r   r  7  s   z\TestPivotTable.test_pivot_number_of_levels_larger_than_int32.<locals>.MockUnstacker.__init__)r  N)__name__
__module____qualname__r  __classcell__r   r   r  r   MockUnstacker6  s    r  
_Unstackeri   r   )ind1ind2r  z$The following operation may generaterz   r  r
  r  r  r  )reshape_libr	  contextsetattrr	   r6   r   rA   r   r   r1  r2  r  r   )r:   Zmonkeypatchr  rr   rZ   r   r   r   r   -test_pivot_number_of_levels_larger_than_int322  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}	|rY|	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_oneS  s   z?TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_onec                 S   s   t | S r   )rT   r   r   r   r   ret_sumV  s   z?TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_sumc                 S   s   t jS r   )r6   r   r   r   r   r   ret_noneY  s   z@TestPivotTable.test_pivot_table_aggfunc_dropna.<locals>.ret_noner  r>   rU   r   r   r   rQ  r   )r  r  r  r  r  ro   r  r  r   r>   r   )	r	   r   r6   r   r   Zfrom_productr   rA   rB   )
r:   r   rZ   r  r  r  r[   r;   r   rL   r   r   r   test_pivot_table_aggfunc_dropnaI  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   )r0   rb   rc   r0   r@   r  r   r*   r+   r   rb   rc   r   r>   r   )r	   r6   r   r   r   r   rA   rB   )r:   r   rZ   r[   r;   r   rL   r   r   r   &test_pivot_table_aggfunc_scalar_dropnal  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.   )rO   r   r   r]  r   )pr%  r%  r  r%  )NNNNN)r0   idr2   r3   r0   r3   r  r   r   r   r  r   )r	   r   r6   r  r   rA   rB   )r:   r   rZ   r[   Zexp_colsrL   r   r   r   test_pivot_table_empty_aggfunc}  s   z-TestPivotTable.test_pivot_table_empty_aggfuncc                 C   sj   dd }t g dg dg dd}tjtdd |jdd	d
|d W d    d S 1 s.w   Y  d S )Nc                 S   s
   t | S r   )r6   r@   )Zarrr   r   r   rH     s   
z=TestPivotTable.test_pivot_table_no_column_raises.<locals>.aggr   r.  )r   r   r  (   )r  r  ZZ
notpresentrz   r  r  )rU   )r	   r1  r2  r:  r   )r:   rH   rZ   r   r   r   !test_pivot_table_no_column_raises  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 )NrV  rW  rX  r[  r\  r^  r3   r4   r0   r2   r@   )r  r  r@   r  )r<   r=   rU   ))r3   r@   r4   r  )r4   r@   r4   r  ))r(   rZ  )r(   rY  )r'   rZ  )r'   rY  ro   )rN        "@g      @r   )rN  r#  g      !@r   )r}   r   r   r   )g["8@r   g.UUU@r}   rq  r"  r!  )
r	   r   r   rp   r6   r  rY   r   rA   rB   )r:   rZ   rJ   rf   r=   ZvalsrL   r   r   r   0test_pivot_table_multiindex_columns_doctest_case  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)Zd1Zd4Zd3r]   )   ra  "   )2018r'  2019)r^   r   numr  r^   r   r  r)  rT   F)r=   r>   r<   rU   sortr%  ra  r&  r'  r(  r   ro   rq  )	r	   r   r6   r   r   r   r    rA   rB   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 )Nr0   r   r.   r   r/   Int64r   )r^   r_   salesr_   r^   TrT   rA  ra  r  r   r-  r0   r-  r   ro   r=   r>   r   )r	   r   r   r   r   rp   rA   rB   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      /   rc  )	firstnamelastnameheightager:  r9  r;  r<  F)r=   r<   r*  g     e@g     G@g     f@g     @@)r4  r2  )r5  r3  ro   rq  )r	   r   r   rp   rA   rB   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^   rb   r   r^   rc   r.   r_   rc   r   r_   rd   r   )r   r   r  r   r   r  rT   r   Tr=   r>   r<   rU   rV   r   r   r.   r   r   r   r   r   r   r   rO   r   r   rb   rc   rd   r   r^   r_   r   )r	   r>   r   r=   rF   rA   rB   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   )rb   rc   r<  rb   rc   r<  r@   )r=   r>   r<   rU   r   r  r   ZFloat64r0  )r	   r   r   r   rA   rB   )r:   r   rZ   r[   rL   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 s+w   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 )Nr0   r   r.   z
2019-12-31g      $@r/   )r^   r_   r   r-  r_   r   r^   TrT   rA  r  g      5@r  r   r=  r  r.  r/  ro   r   )r	   r   r   rA   r   r   r   r    r   r+  rp   rB   r  r   r   r   !test_pivot_table_datetime_warning)	  s8   
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 )NrV  rW  rX  r[  r\  )r0   r1   r2   r3   r4   )Zcol5)Zcol6r   r   Zsevenr3   r0   r1   rK  rT   r   r   r   r   r   r|   rZ  rY  r   )r(   r(   r'   r'   r*   r+   r.   ro   rq  r   )
r	   r   r6   r   r   r   r    rY   rA   rB   )r:   r  rZ   r[   rL   r   r   r   )test_pivot_table_with_mixed_nested_tuplesI	  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      g | ]}d qS )nuniquer   ru  r   r   r   rE  	      zYTestPivotTable.test_pivot_table_aggfunc_nunique_with_different_values.<locals>.<listcomp>c                 S   rM  )r`   r   ru  r   r   r   rE  	  rO  )NNr_   ro   )r   r   r|   r^   r   r   r_   r`   rN  r  )r	   r   r   r    r6   Zfullr   Zfill_diagonalr   r   rA   rB   )r:   testZ	columnvalZnparrrL   r[   r   r   r   6test_pivot_table_aggfunc_nunique_with_different_values	  s6   	zETestPivotTable.test_pivot_table_aggfunc_nunique_with_different_values)ar  r  r  r1  fixturer;   rM   r\   ri   rs   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r  r  r  r  r6   r  r   r   r-  r/  r4  xfailr9  r;  r?  rC  rM  r   rp   r_  rm  rn  rs  rt  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  rT   r@   r   r  Zslowr  r  r  r  r   r$  r+  r1  r=  rH  rI  rJ  rL  rQ  r   r   r   r   r%   ,   s2   
0% ##



.	


?7
-

	

	"&


&
3	
% [[#,>

#
	4
 Er%   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	e
jje dd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s=J |jjdksEJ |jddd}|jjdksTJ |jjdks\J d S )Nr0   r1   r2   r2   r1   r0   OnerX  rX  TworY  rY  r|   r}   r~   r~   r}   r|   r   r=   r>   r<   r|   r}   r~   r   rX  rY  r   Nr>   )r	   r   r=   rF   r>   rA   rB   rD   )r:   r;   r  r  rL   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    d S 1 s)w   Y  d S )N)r(   r(   r'   r'   r'   )r*   r+   r*   r*   r+   )r|   r}   r~   r~   r   r]   zduplicate entriesrz   r^   r_   r`   r   )r	   r1  r2  r  r   )r:   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   Fr<  )r	   r   rA   rB   r  r   r   r   test_pivot_empty	  s   zTestPivot.test_pivot_emptyc                 C   sV   t ddg|d}|jdddd}tdd	gd|d
}|dkr"|d}t|j| d S )N)r0   ry  ZA1)r1   r{  ZB2)r;   r   r   r   r.   r   r0   r1   r  r+  rp  )r	   r   r   rY   rA   rq   r>   )r:   Zany_string_dtyperZ   r[   r   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s]J |jj
dkseJ |jd|_|jddd}d|j_t|| d S )NrV  rW  rZ  r   r=   r>   r<   r>   r<   r|   r}   r~   r   r[  r   r   )r<   rX  )r<   rY  ro   Fr<  r\  r   )r	   r  r   r=   rF   r>   rA   rB   r   rp   rD   r  )r:   r;   r  r[   rL   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s`J |d	gksgJ d S )N)r   r   r   r.   r.   r.   )r   r   r.   r   r   r.   )r   r.   r   r.   r   r.   r#  r7  )lev1lev2lev3lev4r<   rc  rd  re  r   )r|   r}   r   r|   r~   r}   )r   r   r   r~   r   r   r   )r   r.   r   r.   ro   )rf  rf  r<   r<   )	r	   r   r6   r  r   r   r    rA   rB   )r:   rZ   r=   r>   r[   rL   r   r   r   0test_pivot_index_list_values_none_immutable_args
  s<   	z:TestPivot.test_pivot_index_list_values_none_immutable_argsc                 C   sL   t dgdd}tjtdd |  W d    d S 1 sw   Y  d S )Nr   ro  z(missing 1 required keyword-only argumentrz   r0  )r:   rZ   r   r   r   test_pivot_columns_not_given8
  s   
"z&TestPivot.test_pivot_columns_not_givenz&TODO(infer_string) None is cast to NaNr5  c                 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_   rq  rj  r   r   r`   r>   r=   r<   )r	   r   rA   rB   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}|rAtj|j	_
t|| d S )Nr   r.   r   ri  r_   rq  )r`   r.   r   r`   rk  r   r   )r	   r   r>   rD   rA   rB   r   r6   r   r=   rF   )r:   rK  rZ   r[   rL   r   r   r   test_pivot_index_is_noneR
  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   ri  r_   r`   rk  r   r   ra  r   )r	   r   r   rA   rB   r  r   r   r   test_pivot_values_is_nonea
  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)Zdeepr*   r+   ro  r   )r	   ri  r   rA   rB   )r:   rZ   rL   r   r   r   "test_pivot_not_changing_index_nameo
  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   rA   rq   r>   r:   rZ   r   rL   r   r   r   .test_pivot_table_empty_dataframe_correct_indexv
  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 s8w   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 )Nrb   z
2023-01-01r   )r^   date_strrk   rc   z
2023-01-02r.   rd   z
2023-01-03r   rs  r   Fr^   rk   rT   T)r=   r<   rU   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:00rH  ro   )r	   r   Zto_datetimerA   r   r   r   rp   r   strptimerq   r=   rq  r   r   r   0test_pivot_table_handles_explicit_datetime_types~
  s*   


	z:TestPivot.test_pivot_table_handles_explicit_datetime_typesc                 C   s~   t g dg dg dg dg}|jdddddd	d
}t g dg dg dgtg dddtg dddd}t|| d S )Nr>  r?  r@  rA  r   r   r.   rT   TrB  rC  rD  rE  rF  r   rG  rq  r  r  r   r   r   6test_pivot_table_with_margins_and_numeric_column_names
  s    z@TestPivot.test_pivot_table_with_margins_and_numeric_column_namesN)r  r  r  r]  r^  r_  r`  rb  rg  rh  r1  rS  rT  r   rl  rm  rn  rp  rr  ru  rv  r   r   r   r   rU  	  s$    $&
rU  )'r   r   r   	itertoolsr   rI  Znumpyr6   r1  Zpandas._configr   Zpandas.errorsr   Zpandasr   r   r	   r
   r   r   r   r   r   Zpandas._testingZ_testingrA   Zpandas.api.typesr   Zpandas.core.reshaper   r  Zpandas.core.reshape.pivotr   rR  r   r   r$   r%   rU  r   r   r   r   <module>   sL    (

,
                   