U
    +if$                     @   s(  d Z ddlZddlZddlmZ ddlZddlZddlZddlm	Z	 ddl
Zddl
mZmZmZmZmZmZ ddlmZ ddlmZ ddlm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d dd ggdd Z$d d! Z%ej"#d"d#d$d%d&gd'i fd(d)gd* e&e'e'e'd+fd,d-gd* e&e'e'e'd+fd#d$d%d&gd.d/d'ifd(d)gd* d.e'e'e'd+fd,d-gd* d.d0d0d0d+fgd1d2 Z(ej"#d3d#d4d5gd6d7gd8d9ggd'd'd:fd(d;gd4 gd* d0fd,d4gd4 gd* d0d0d:fgd<d= Z)d>d? Z*d@dA Z+dBdC Z,dDdE Z-dFdG Z.dHdI Z/dJdK Z0dLdM Z1dNdO Z2ej"#dPdQd dRd dSd dTd dUd dVd gdWdX Z3ej"#dYdZged[gdZd\fdZd]ged[gd4ggdgdggdZd]gd^fgej"#d_d`dad'dbd0gej"#dcd`dad'dbd0gej"#dddedfdggdhdi Z4ej"#dYdZged[gdZd\fdZd]ged[gd4ggdgdggdZd]gd^fgej"#djdkd[dlgej"#dme5e&e'gej"#dddedfdggdndo Z6dpdq Z7ej"#dmej8ej9gej"#drdsdtdudvdwdxgdydz Z:d{d| Z;ej"#d}e<e=d~e>dd*ej?dd*dde@dddggdd ZAdd ZBdd ZCG dd dZDG dd dZEej"#dddejFfdd[d*gdd4gddgfddd fddd fdd[d*gd[d[gddgfeGddveGdejHeGddd d[d*gddgd[d[gfgdd ZIdd ZJdd ZKej"#dddugig dugdgdd ZLdd ZMdd ZNdd ZOdd ZPej"#ddd dd dd gdd ZQdd ZRej"#ddd eRgdd ZSdd ZTej"jUdddd ZVG dd dZWdd ZXej"#ddududd[d$gdZdgdfdduiddZdgifdduidd[d$gifgddƄ ZYej"#ddudvgdudddgfdududvgdddgfddudvgiddgfgdd΄ ZZddЄ Z[dd҄ Z\ddԄ Z]ddք Z^dd؄ Z_ddڄ Z`ej"#ddddgdgfdddgdgfgdd Zaej"#ddwddgfd#ddgfgdd Zbej"#ddudvd,gdd ZcdS )zN
test .agg behavior / note that .apply is tested generally in test_groupby.py
    N)partial)is_integer_dtype)	DataFrameIndex
MultiIndexSeriesconcatto_datetime)SpecificationError)Groupingc                  C   sB   t ddddgddddgd} | d	d
 }dd }|| d S )Nabc            )keyvaluer   r   c                 S   s   t | dkst|  S Nr   )lenAssertionErrorsumx r   `/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/groupby/aggregate/test_aggregate.py
dummy_func!   s    z3test_groupby_agg_no_extra_calls.<locals>.dummy_func)r   groupbyagg)dfgbr   r   r   r   test_groupby_agg_no_extra_calls   s    r"   c                 C   s:   |  dd dd g}|tj}| }t|| d S )Nc                 S   s   | j S Nyearr   r   r   r   <lambda>)       z&test_agg_regression1.<locals>.<lambda>c                 S   s   | j S r#   monthr   r   r   r   r&   )   r'   r   r   npmeantmassert_frame_equal)tsframegroupedresultexpectedr   r   r   test_agg_regression1(   s    r3   c              	   C   sf   |  dd }d}tjt|d |dd  W 5 Q R X tjt|d |dd  W 5 Q R X d S )NACzMust produce aggregated valuematchc                 S   s   |   S r#   )Zdescriber   r   r   r   r&   4   r'   z#test_agg_must_agg.<locals>.<lambda>c                 S   s   | j d d S Nr   indexr   r   r   r   r&   6   r'   )r   pytestraises	Exceptionr   )r    r0   msgr   r   r   test_agg_must_agg/   s    r?   c                 C   sH   dd }| j | j| jg|}| ddg d }t|| d S )Nc                 S   s   |   S r#   r   r   r   r   r   r&   ;   r'   z(test_agg_ser_multi_key.<locals>.<lambda>r4   Br5   )r5   r   r4   rA   	aggregater   r-   assert_series_equal)r    fresultsr2   r   r   r   test_agg_ser_multi_key9   s    rF   c                  C   s  t dddtjddddgdddtjddd	d
gdtjddddddddgddgdd} t dddddddtjddddgd
ddddddtjd	dddgddddtjdddddtjd gd!d"dd#tjd$d#dddtjtjgd%}|ddg}|d&d'g  }t||  d S )(N      r   r   r   7   M   !   ,      )v1v2)r   _   )r   c   )r   rP   )r   rQ   )bigdamp)bluedry)redrV   )rV   wetby1by2namesr9      	   X   rQ   rV   rT   r   rR      rW   rU   rP   rS   )rN   rO   rX   rY   rN   rO   )	r   r+   nanr   from_tuplesr   r,   r-   r.   )r2   r    gr1   r   r   r   $test_groupby_aggregation_mixed_dtypeA   sN    
rc   c                  C   s   ddddgddt jdgddt jdgddt jdgg} t| tddddgd}|jddd	}|jdd
}tddddgddddgd}t|| d S )NTF)r4   r   )r4   r   )rA   r   )rA   r   )datacolumnsr   levelaxis)Znumeric_only       @r   r   r   )	r+   r`   r   r   ra   r   r   r-   r.   )lstr    r!   r1   r2   r   r   r   +test_groupby_aggregation_multi_level_columnr   s    
rl   c                 C   s   |  | tj }| jtjks ttg tjtg tjdd}t	|
 | t	|tj
| tj	|tj
|dd | |d tj }t|jttg dtjdd}t|
 | t|tj
| t|tj
| d S )Ndtype)rn   r:   F)Zcheck_index_typer4   )namern   )re   rn   r:   )r   r+   r`   rn   float64r   r   r   r-   rC   r   r   applyr   re   floatr.   )tsr/   r0   expZexp_dfr   r   r   test_agg_apply_corner   s    ru   c                 C   s   t  }|dd }|jjd j}t| jt||jjd< |	t
j}| }t || t| jt||jjd< |	t
j}| }t || d S )Nc                 S   s   | j S r#   r$   r   r   r   r   r&      r'   z1test_agg_grouping_is_list_tuple.<locals>.<lambda>r   )r-   ZmakeTimeDataFramer   grouperZ	groupingsZgrouping_vectorr   r:   listr   r+   r,   r.   tuple)rs   r    r0   rv   r1   r2   r   r   r   test_agg_grouping_is_list_tuple   s    ry   c                 C   s2   |  ddg}|tj}| }t|| d S )Nr4   rA   r*   )Zmframer0   r1   r2   r   r   r   test_agg_python_multiindex   s    rz   groupbyfuncc                 C   s   |   S r#   )weekdayr   r   r   r   r&      r'   r&   c                 C   s   | j S r#   r(   r   r   r   r   r&      r'   c                 C   s   |  |}|d d}|d  }t|| |d}| }t|| |ddddd}t|d  |d  |d 	 |d	 
 d}t|| d S )
Nr4   stdvarr,   sem)r4   rA   r5   DrA   r5   r   )r   r   r}   r-   rC   rB   r~   r.   r   r,   r   )r/   r{   r0   r1   r2   r   r   r   test_aggregate_str_func   s     





r   c              	   C   sZ   | j dd}|dkrt}d}nt}d| d}tj||d |j|dd	 W 5 Q R X d S )
Nr   rg   )ZidxmaxZidxminz3reduction operation '.*' not allowed for this dtypez
Operation z does not support axis=1r6   r   rh   )r   	TypeError
ValueErrorr;   r<   r   )r    reduction_funcr!   errorr>   r   r   r   %test_agg_str_with_kwarg_axis_1_raises   s    r   z(func, expected, dtype, result_dtype_dictr   rG   rH   r]   int64r}   glv @r   )ijkr~   g      @Int64r   rp   c                 C   s   t ddddddggd tddgd	d
dggd||d}|jddd| }t |gd d	d
dgd|}t|| d S )Nr   r   r   r   rG      r   r   r   r   r   re   ))r   r   )r   r   rf   )r   r   from_productastyper   r   r-   r.   )funcr2   rn   result_dtype_dictr    r1   r   r   r   (test_multiindex_groupby_mixed_cols_axis1   s    r   z&func, expected_data, result_dtype_dictr   r   
   r_         )r   r   g;f?c                 C   s   t tdddtdddgddtdd	dd	gd
dddddi}|jd
dd| }t |tdddgddtdd	gd
dd|}t	|| d S )Nr_   r   r   r   r   yro   r   r   r   r   )r:   re   rn   r   r   )rd   r:   re   )
r   r+   arangereshaper   r   r   r   r-   r.   )r   expected_datar   r    r1   r2   r   r   r   test_groupby_mixed_cols_axis1   s"    r   c                 C   s   |  d}dd }||}| jdk }| jdk }t|j}tt|g| t	ddd}t
|d| tt|g| t	ddd}t
|d| dd	 }t  | j|}t|tstt|d
kstd S )Nr4   c                 S   s   | j S r#   sizeZserr   r   r   r&     r'   z-test_aggregate_item_by_item.<locals>.<lambda>foobarZBCDr:   ro   c                 S   s   | j S r#   r   r   r   r   r   aggfun"  s    z+test_aggregate_item_by_item.<locals>.aggfunr   )r   r   r4   r   r   re   r   r+   arrayrw   r-   rC   ZxsZassert_almost_equalr   
isinstancer   )r    r0   r   r1   r   r   Krt   r   r   r   test_aggregate_item_by_item  s    


r   c              	   C   sv   |  ddg}dd }tjtdd ||}W 5 Q R X | jd d | jdkf }| ddg|}t|| d S )Nr4   rA   c                 S   s   | j tkrtn|  S d S r#   )rn   objectr   r   r   r   r   r   r   -  s    
ztest_wrap_agg_out.<locals>.funczDropping invalid columnsr6   r5   )r   r-   assert_produces_warningFutureWarningrB   locre   r.   )Zthree_groupr0   r   r1   Zexp_groupedr2   r   r   r   test_wrap_agg_out*  s    r   c                 C   sP   dt jfdt jfdt jfg}| dd |}tdddg}t|j	| d S )Nr,   maxminr4   r5   )
r+   r,   r   r   r   r   r   r-   assert_index_equalre   )r    funcsr1   Zexp_colsr   r   r   *test_agg_multiple_functions_maintain_order:  s    r   c                     s   t tjddtjdddddddgd	  d
dttj	ddttj	ddgi} tjdd
dd}t
ddg}t fdddD j}t |||d}t| | d S )N  r   1/1/2012S)freqperiodsr4   rA   r5   r:   re   3TH.?q镲q?r   )r4   quantilec                    s"   g | ]}  d jj|djqS r   r   resampler4   r   values.0r   r    r   r   
<listcomp>P  s     z9test_agg_multiple_functions_same_name.<locals>.<listcomp>r   r   re   r:   )r   r+   randomrandnpd
date_ranger   r   r   r   r   ra   r   Tr-   r.   )r1   expected_indexexpected_columnsexpected_valuesr2   r   r   r   %test_agg_multiple_functions_same_nameC  s&    
  r   c               	      s   t tjddtjdddddtddd	gd
dd  dddt	tj
ddt	tj
ddgi} tjddddd}tjddddddgd
d d gd}t fdddD j}t dj |g}t |||d}t| | d S )Nr   r   r   r   Zdti)r   r   ro   r4   rA   r5   alphar   r   r   ohlcr   r   r   r   )r4   r   open)r4   r   high)r4   r   low)r4   r   close)r4   r   r4   rZ   c                    s"   g | ]}  d jj|djqS r   r   r   r   r   r   r   p  s     zKtest_agg_multiple_functions_same_name_with_ohlc_present.<locals>.<listcomp>r   r   )r   r+   r   r   r   r   r   r   r   r   r   r   ra   r   r   Zhstackr4   r   r-   r.   )r1   r   r   Znon_ohlc_expected_valuesr   r2   r   r   r   7test_agg_multiple_functions_same_name_with_ohlc_presentX  s:    
   r   c              	   C   s   ddg}ddg}|  dd |}|  dd |}t|| tjtdd |  d|}W 5 Q R X tjtdd |  d|}W 5 Q R X t|| d S )N)r   r,   r}   )r}   r}   r4   r5   z&\['B'\] did not aggregate successfullyr6   )r   r   r-   r.   r   r   )r    r   Zex_funcsr1   r2   r   r   r   -test_multiple_functions_tuples_and_non_tuplesy  s       r   c           
   	   C   s@  |  d}|tjtjd}|tjtjd}t||gddgdd}|jddddjddd	}tjtjgtjtjgd}||}t	
|| |tjtjtjgd}|tjtjtjgd}t	
|| d
d }dd }d}	tjt|	d& tjtjtjdd}|| W 5 Q R X tjg||gd}|| d S )Nr4   r5   r   r,   r}   r   )keysrh   r   r   rf   c                 S   s
   t | S r#   r+   r,   r   r   r   r   r     s    z4test_more_flexible_frame_multi_function.<locals>.fooc                 S   s   t j| ddS )Nr   )Zddof)r+   r}   r   r   r   r   r     s    z4test_more_flexible_frame_multi_function.<locals>.barnested renamer is not supportedr6   r   r   )r   r   r+   r,   r}   r   Z	swaplevelZ
sort_indexrB   r-   r.   r;   r<   r
   )
r    r0   ZexmeanZexstdr2   dr1   r   r   r>   r   r   r   'test_more_flexible_frame_multi_function  s&    

r   c              	   C   s   |  d}dddddid}d}tjt|d || W 5 Q R X ddddd}tjt|d || W 5 Q R X ddddd}tjt|d || W 5 Q R X d S )	Nr4   r,   r}   r   r   r   r   r6   )r   r;   r<   r
   rB   )r    r0   r   r>   r   r   r    test_multi_function_flexible_mix  s    
r   c                  C   s   t ddddgddddgd d ddgd} | d}tddgdd}|d d	d
 }tddg|dd}t|| |d dd
 }tddg|dd}t|| d S )Nr   r   r   r   r   r   r   r   r   r   c                 S   s   | dk  S r   allr   r   r   r   r&     r'   z1test_groupby_agg_coercing_bools.<locals>.<lambda>FTr   r   c                 S   s   |    S r#   )Zisnullr   r   r   r   r   r&     r'   )r   r   r   rB   r   r-   rC   )Zdatgpr:   r1   r2   r   r   r   test_groupby_agg_coercing_bools  s    (
r   opc                 C   s   |   S r#   r@   r   r   r   r   r&     r'   c                 C   s   |   S r#   )cumsumr   r   r   r   r&     r'   c                 C   s
   |  dS Nr   	transformr   r   r   r   r&     r'   c                 C   s
   |  dS Nr   r   r   r   r   r   r&     r'   c                 C   s
   |  dS r   r   r   r   r   r   r&     r'   c                 C   s
   |  dS r   r   r   r   r   r   r&     r'   c                 C   sd   t ddgddgd}|dd }| |dd j}t|sDt| |dj}t|s`td S )Nr   FTr   r   r   r   )r   	set_indexr   rn   r   r   )r   r    sr1   r   r   r   test_bool_agg_dtype  s    r   zkeys, agg_indexr   r   r   r   rZ   input_dtypeboolZint32Zfloat32result_dtypemethodrq   rB   r   c           
         s   t dgdgdgd}|d ||d< t|| dg |}| fdd}|dkrbtd	dn|}t d|d jd	 gi|d
 }	|dkrd	g|	j_t	
||	 d S )Nr   r   Tr   r   c                    s   |   jd S r   r   ilocr   r   r   r   r&     r'   z2test_callable_result_dtype_frame.<locals>.<lambda>r   r   r9   rq   )r   r   getattrr   r   
RangeIndexr   re   r[   r-   r.   )
r   	agg_indexr   r   r   r    r   r1   r   r2   r   r   r    test_callable_result_dtype_frame  s    
r   inputT      ?rn   c           
         s   t dgdg|gd}t|| d |}| fdd}|dkrNtddn|}t|d jd g|dd	 }	t	||	 d S )
Nr   r   r   r   c                    s   |   jd S r   r   r   rm   r   r   r&     r'   z3test_callable_result_dtype_series.<locals>.<lambda>r   r   r   )
r   r   r   r   r   r   r   r   r-   rC   )
r   r   r   rn   r   r    r   r1   r   r2   r   rm   r   !test_callable_result_dtype_series  s     r   c                  C   sf   t ddddgddddgd} | dddd	d
dg}|jjd }tddd	d
dg}t|| d S )Nr   r   r   r   r4   rA   r4   r   r   r,   r   r   )r   r   r   re   levelsr   r-   r   )r    resr1   r2   r   r   r   #test_order_aggregate_multiple_funcs$  s
    r  howfirstlastr   r   r,   medianc                 C   st   t dddgd}|dd|i}|j| |_|dd|i}|dkr`|jtj|_tj||dd	 d S )
Nl   &tLWHd~ r   r   r   r   r   r   )r,   r  T)Zcheck_exact)	r   r   r   r   r   r+   r   r-   r.   )rn   r  r    r2   r1   r   r   r   test_uint64_type_handling0  s    r	  c               	   C   sT   d} t ddddgddddgd}tjt| d |d	d
d
g W 5 Q R X d S )NzFunction namesr   r   r   r   r   r   r6   r4   r   )r   r;   r<   r
   r   r   )r>   r    r   r   r   test_func_duplicates_raises>  s    r
  r:   abcZ2020r   )r   r   )r   r   )r   r   )r   r   c                 C   s`   t dddgdddgd| d}|ddtji}t ddgddgdd}t|| d S )Nr   r   r   )groupr   r9   r  r   )r   r   r   r   Znuniquer   r-   r.   )r:   r    r1   r2   r   r   r   $test_agg_index_has_complex_internalsF  s    r  c                  C   sr   t dddddgdddddgdddddgd} | d }t ddgddgd	tddgdd
d}t|| d S )Nr   r   onetwothreesix)key1key2key3r  )r  r  r   r9   )r   r   r   r   r-   r.   r    r1   r2   r   r   r   test_agg_split_blockW  s    r  c               
   C   s   t tjdddddddgdd	d
dgddddgtjddddd	d
dgdt} | ddddg }t tdgdgdgdgtdgdgd}t	|| d S )N2000r   )r   r   r   r   r   r   r   r   e)r4   rA   r5   r   EFr   )
r   r   r   r   r   r   r   	Timestampr-   r.   r  r   r   r   #test_agg_split_object_part_datetimeh  s,    



	



r  c                   @   sV   e Zd Zdd Zdd Zdd Zdd Zej	d	e
jd
dddd
dggdd ZdS )TestNamedAggregationSeriesc                 C   s   t ddddg}|ddddg}|jddd}tdd	gddgdd
dgddgd}t|| |jddd}|dd
g }t|| d S )Nr   r   r   r   r   r   r   r   rH   r   r   r   )r   r   r   r   r   r   r-   r.   )selfr    grr1   r2   r   r   r   test_series_named_agg  s      z0TestNamedAggregationSeries.test_series_named_aggc              	   C   sX   t ddgddg}tjtdd |  W 5 Q R X |g }t }t|| d S )Nr   r   r   Must provider6   )	r   r   r;   r<   r   r   r   r-   r.   r  r   r1   r2   r   r   r   test_no_args_raises  s    
z.TestNamedAggregationSeries.test_no_args_raisesc                 C   sN   t dddgdddg}|jddd}tddgddgd}t|| d S )Nr   r   r   r   r   r   r  )r  r   r0   r2   r   r   r   *test_series_named_agg_duplicates_no_raises  s    zETestNamedAggregationSeries.test_series_named_agg_duplicates_no_raisesc                 C   sV   t dddgdddg}|jdd dd d}tddgddgd}t|| d S )	Nr   r   r   r   c                 S   s   dS r   r   r   r   r   r   r&     r'   z9TestNamedAggregationSeries.test_mangled.<locals>.<lambda>c                 S   s   dS Nr   r   r   r   r   r   r&     r'   r   r  r#  r   r   r   test_mangled  s    z'TestNamedAggregationSeries.test_mangledinpanythingr   columnaggfunc)r)  r   c              	   C   sZ   t ddddddddg}dt|j }tjt|d ||jj|d W 5 Q R X d S )	Nr   r   r   r   rG   zfunc is expected but received r6   r   )	r   type__name__r;   r<   r   r   r   r   )r  r(  r   r>   r   r   r   test_named_agg_nametuple  s    
z3TestNamedAggregationSeries.test_named_agg_nametupleN)r/  
__module____qualname__r!  r$  r%  r'  r;   markparametrizer   NamedAggr0  r   r   r   r   r    s   
r  c                   @   sL   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S )TestNamedAggregationDataFramec              	   C   s
  t ddddgddddgddd	d
gd}|djddd}t ddgdd
gdtddgddddgd}t|| tjtj	dd}|djddt
fdtjfddd|fd}t dd	gddgddgddgdd
gddgdtddgdddddddd gd}t|| d S )!Nr   r   r   r   r   r   rG   r   rH   r\   r  r4   rA   r  r4   r   rA   r   )a_maxb_maxr   r:  r;  r   b   r   rA   r   r4   )b_mina_mina_meanr:  r;  a_98g      ?g      @g\(\?gףp=
@r>  r?  r@  rA  )r   r   r   r   r-   r.   	functoolsr   r+   
percentiler   r,   )r  r    r1   r2   Zp98r   r   r   test_agg_relabel  s>    "
z.TestNamedAggregationDataFrame.test_agg_relabelc                 C   sn   t ddddgddddgddd	d
gd}|djf ddi}t dddgitddgddd}t|| d S )Nr   r   r   r   r   r   rG   r   rH   r\   r7  r  zmy colr8  r   r9   r   r   r   r   r-   r.   r  r    r1   r2   r   r   r   test_agg_relabel_non_identifier  s    " z=TestNamedAggregationDataFrame.test_agg_relabel_non_identifierc                 C   s  t ddddgddddgd}|djddd	}t ddgddgd	tddgdd
d}t|| tjtj	dd}tjtj	dd}d|_
d|_
t dddddgdddddgd}|djd|fd|fd}t ddgddgdtddgdd
d}t|| d S )Nr   r   r   r   r   r   r4   r=  r   r   r9   2   r   F   quant50quant70r   r   rG   )col1col2rL  rM  )Zquantile_50Zquantile_70      ?      @g333333?g@)r   r   r   r   r-   r.   rB  r   r+   rC  r/  )r  r    r0   r2   rJ  rK  testr   r   r   test_duplicate_no_raises  s$    &"
 z6TestNamedAggregationDataFrame.test_duplicate_no_raisesc                 C   s   t ddddgddddgdtddgd	d
ggd}|jddjdddd}t ddgddgddgdddgd}t|| d S )Nr   r   r   r   r   r   r4   rA   r   r   r9   r   r8  )r4   r   )rA   r,   )ZaaZbbccrN  g      @)r   r   r   r   r   r-   r.   rF  r   r   r   test_agg_relabel_with_level  s       z9TestNamedAggregationDataFrame.test_agg_relabel_with_levelc              	   C   s   t dddgdddgd}|d}d}tjt|d |jdd	 W 5 Q R X tjt|d |  W 5 Q R X tjt|d |jd
dd W 5 Q R X d S )Nr   r   r   r   r   r4   r"  r6   )r   r9  )r   r   r   r   )r   r   r;   r<   r   r   )r  r    r0   r7   r   r   r   test_agg_relabel_other_raises  s    
z;TestNamedAggregationDataFrame.test_agg_relabel_other_raisesc              	   C   sP   t ddgddgd}td}tjt|d |djdd	 W 5 Q R X d S )
Nr   r   r   r   zColumn(s) ['C'] do not existr6   r4   )r5   r   )r   )r   reescaper;   r<   KeyErrorr   r   )r  r    r7   r   r   r   test_missing_raises  s    
z1TestNamedAggregationDataFrame.test_missing_raisesc                 C   s`   t ddgddgd}|djtddtjddd	d
}|djddd
}t|| d S )Nr   r   r   r   r4   rA   r   countr*  r   r   )rA   r   )rA   rY  r   r   r   r   r5  r-   r.   rF  r   r   r   test_agg_namedtuple  s    

 z1TestNamedAggregationDataFrame.test_agg_namedtuplec                 C   sv   t ddgddgddgd}|djdd	d
 fddd
 fd}t ddgddgdtddgddd}t|| d S )Nr   r   r   r   r   )r4   rA   r5   r4   rA   c                 S   s   dS r   r   r   r   r   r   r&   (  r'   z<TestNamedAggregationDataFrame.test_mangled.<locals>.<lambda>r5   c                 S   s   dS r&  r   r   r   r   r   r&   (  r'   rZ  r   r9   rE  rF  r   r   r   r'  &  s    $&z*TestNamedAggregationDataFrame.test_mangledN)r/  r1  r2  rD  rG  rQ  rS  rT  rX  r\  r'  r   r   r   r   r6    s   $	r6  zCagg_col1, agg_col2, agg_col3, agg_result1, agg_result2, agg_result3r   r4   r   r^  )r   rA   r,   g      @      @c                 C   s   t | S r#   )r   r   r   r   r   r&   9  r'   c                 C   s   dS r&  r   r   r   r   r   r&   :  r'   r_  c                 C   s   dS r&  r   r   r   r   r   r&   C  r'   c           
      C   s   t ddddgddddgddd	d
gd}tdddg|_tddgdd}|djdd}t dddgi|d}	t||	 |dj| ||d}t |||d|d}	t||	 d S )Nr   r   r   r   r   r   rG   r   rH   r\   r7  r   r  r^  r_  r   r]  )r:  r:  r9   )Zcol_1Zcol_2Zcol_3)	r   r   ra   re   r   r   r   r-   r.   )
Zagg_col1Zagg_col2Zagg_col3Zagg_result1Zagg_result2Zagg_result3r    idxr1   r2   r   r   r   "test_agg_relabel_multiindex_column-  s$    !"
  
 rc  c               	   C   sj   t ddddgddddgddd	d
gd} tdddg| _tjtdd | djdd W 5 Q R X d S )Nr   r   r   r   r   r   rG   r   rH   r\   r7  ra  r^  r_  zdo not existr6   ))Yr   r   r-  )	r   r   ra   re   r;   r<   rW  r   r   r   r   r   r   ,test_agg_relabel_multiindex_raises_not_exista  s    "re  c                  C   s   t ddddgddddgddd	d
gd} tdddg| _| djddd}tddgdd}t ddgddgd|d}t|| d S )Nr   r   r   r   r   r   rG   r   rH   r\   r7  ra  r^  r_  )r^  r   r   r   r9   )	r   r   ra   re   r   r   r   r-   r.   )r    r1   rb  r2   r   r   r   &test_agg_relabel_multiindex_duplicatesl  s    "
 rf  kwargsr   rZ  c                 C   sn   t dddgdddgdddgd}|d| }t ddgtddgdddtd	d
ggd}t|| d S )Nr   r   r   r   r   r   r   rn   ro   r   r   r   )r   r   r   r   r   ra   r-   r.   )rg  r    r1   r2   r   r   r    test_groupby_aggregate_empty_key}  s    "ri  c                  C   sb   t dddgdddgdddgd} | ddg i}t tdgg gg g gdd	}t|| d S )
Nr   r   r   r   r   r   r   )r  codesr   )r   r   r   r   r-   r.   r  r   r   r   -test_groupby_aggregate_empty_key_empty_return  s    "rk  c                  C   s^   t dddgd} | ddgjdtfd}t dgtg g gg g gddgdd}t|| d S )	Nr   r   r   r   )r   r   rZ   r   )r   r   r   rw   r   r-   r.   r  r   r   r   2test_groupby_aggregate_empty_with_multiindex_frame  s     rl  c                  C   st   t ddddddgdddddd	gd
} | jddd}|jtjdddd}t dddgddd	gd}t|| d S )Nr   r   zr   皙?ri         @@      ?)r   valr   FZas_indexrr  r   r*  min_val)r   ru  r[  r    r0   r1   r2   r   r   r   9test_grouby_agg_loses_results_with_as_index_false_relabel  s     rw  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} | jddgdd}|jtjdddd}t dddgdddgdddgd}t|| d S )Nr   r   r   r   r   r   rn  ri   ro  rp  rq  )r   r  rr  r   r  Frs  rr  r   r*  rt  )r   r  ru  r[  rv  r   r   r   Dtest_grouby_agg_loses_results_with_as_index_false_relabel_multiindex  s    rx  r   c                 C   s   |   S r#   )r,   r   r   r   r   r&     r'   c                 C   s
   t | S r#   r   ry  r   r   r   r&     r'   c                 C   s
   t | S r#   )r+   Znanmeanry  r   r   r   r&     r'   c                 C   s   dddgdddgg}t |tjdddgdddggddgd	d
}|tddg| }dddddddddd}t |}|j|_t	|| d S )Nr   r   r   rG   rH   r   ZSiskoZJanewayrZ   r   r   r   g      @rj   rO  g      @ri   ))r   r   )r   r   )r   r   )
r   r   Zfrom_arraysr   r+   r   r   re   r-   r.   )r   rd   r    r1   expected_dictr2   r   r   r   test_multiindex_custom_func  s      r{  c                 C   s   t j| ddS Ng?r   r+   rC  ry  r   r   r   myfunc  s    r~  c                 C   s   t j| ddS r|  r}  ry  r   r   r   r&     r'   c                 C   sz   t ddddgddddgddd	d
gd}|djdd| fd}t ddgddggddgtddgddd}t|| d S )Ncatdog333333"@      @      #@      A@皙@r`  #@     h@kindheightweightr  )r  r,   r  )mean_heightperc90g"@g0'5"@g      4@g5^I@r  r  r   r   rE  )r   Zanimalsr1   r2   r   r   r   test_lambda_named_agg  s     



 r  c                  C   s   t tdgd ddtdtdd} dddg| d	< | d	d
d }dgdgdggddgddgddggg}t |tddgdd	dtdddgddd}t	|| d S )Nr   r]   r   ZXYZr  rd   re   r:   zgroup 1r   groupingc                 S   s   |   S r#   )tolistr   r   r   r   r&     r'   z,test_aggregate_mixed_types.<locals>.<lambda>r   rh  Xrd  Zrm   r   )
r   r+   r   r   rw   r   rB   r   r-   r.   )r    r1   r   r2   r   r   r   test_aggregate_mixed_types  s      &r  zNot implemented;see GH 31256reasonc                  C   sj   dd } t dtdddgi}|dddg| }t dtjdtjgddiddgd	}t|| d S )
Nc                 S   s   t | dkrdS tjS d S )Nr   r   )r   r   NAr   r   r   r   r,  
  s    z5test_aggregate_udf_na_extension_type.<locals>.aggfuncr4   r   r   r   r   rm   r9   )r   r   r   r   r   r  r-   r.   )r,  r    r1   r2   r   r   r   $test_aggregate_udf_na_extension_type  s
    	$r  c                   @   sN   e Zd Zdd Zdd Zejjddejddd	 Z	d
d Z
dd ZdS )TestLambdaManglingc                 C   st   t ddddgddddgd}|ddd	d
 dd
 gi}t ddgddgdtddgddd}t|| d S )Nr   r   r   r   r   r   r4   rA   c                 S   s   dS r   r   r   r   r   r   r&     r'   z/TestLambdaMangling.test_basic.<locals>.<lambda>c                 S   s   dS r&  r   r   r   r   r   r&     r'   ))rA   
<lambda_0>)rA   
<lambda_1>r   r9   rE  rF  r   r   r   
test_basic  s     zTestLambdaMangling.test_basicc                 C   sZ   t ddddgddddg}|dd dd g}tddgddgd	}t|| d S )
Nr   r   r   r   r   c                 S   s   dS r   r   r   r   r   r   r&   #  r'   z?TestLambdaMangling.test_mangle_series_groupby.<locals>.<lambda>c                 S   s   dS r&  r   r   r   r   r   r&   #  r'   r  r  r  r#  r   r   r   test_mangle_series_groupby!  s    z-TestLambdaMangling.test_mangle_series_groupbyzGH-26611. kwargs for multi-agg.r  z-ignore:Dropping invalid columns:FutureWarningc                 C   s   ddd}ddd}t ddgddg||gd}tdgdgd	}t|| t ddgddgj||gdd
d}tdgdgd	}t|| d S )Nr   c                 S   s   |   | | S r#   r@   r   r   r   r   r   r   r&   *  r'   z5TestLambdaMangling.test_with_kwargs.<locals>.<lambda>r   c                 S   s   |   ||  S r#   r@   r  r   r   r   r&   +  r'   r   r   r   r  r   )r         )r   )r   r  )r  f1f2r1   r2   r   r   r   test_with_kwargs'  s    

"&z#TestLambdaMangling.test_with_kwargsc                 C   s   t ddddgddddgddd	d
gd}dddg}t ddgddgd	d
gdtddgdd|d}|jddjtjddd dtjdddtjdddd}t|| |jddjddd fddd}t|| d S )Nr  r  r  r  r  r  r  r`  r  r  r  height_sqr_min
height_max
weight_maxp=
׳T@      B@)r  r  r  r  r   r   Zbyr  c                 S   s   t | d S r8   r+   r   r   r   r   r   r&   L  r'   z=TestLambdaMangling.test_agg_with_one_lambda.<locals>.<lambda>r*  r   r  c                 S   s   t | d S r8   r  r   r   r   r   r&   U  r'   r  r   r  r   )r   r   r   r   r   r5  r-   r.   r  r    re   r2   Zresult1Zresult2r   r   r   test_agg_with_one_lambda4  s<    



 
z+TestLambdaMangling.test_agg_with_one_lambdac              	   C   s  t ddddgddddgddd	d
gd}dddddg}t ddgddgd	d
gddgddgdtddgdd|d}|jddjddd fddddd fddd fd}t|| |jddjtjdd d d!tjdd"d!tjdd"d!tjdd#d d!tjdd$d d!d}t|| d S )%Nr  r  r  r  r  r  r  r`  r  r  r  r  r  r  height_max_2
weight_minr  r  )r  r  r  r  r  r  r   r   r  r  c                 S   s   t | d S r8   r  r   r   r   r   r&   z  r'   z=TestLambdaMangling.test_agg_multiple_lambda.<locals>.<lambda>r  r  c                 S   s
   t | S r#   r+   r   r   r   r   r   r&   }  r'   r  c                 S   s
   t | S r#   r  r   r   r   r   r&   ~  r'   c                 S   s   t | d S r8   r  r   r   r   r   r&     r'   r*  r   c                 S   s
   t | S r#   r  r   r   r   r   r&     r'   c                 S   s
   t | S r#   r  r   r   r   r   r&     r'   )r   r   r   r   r-   r.   r   r5  r  r   r   r   test_agg_multiple_lambda[  sR    





 	z+TestLambdaMangling.test_agg_multiple_lambdaN)r/  r1  r2  r  r  r;   r3  xfailfilterwarningsr  r  r  r   r   r   r   r    s   

'r  c                  C   s^   t dddgdddgd} | dddd	 i}t ddgddgdd}t|| d S )
Nr   Wr   ri   r   r4   rA   c                 S   s   |  | jd S )N)getr:   r   r   r   r   r&     r'   z+test_groupby_get_by_index.<locals>.<lambda>)r   r   r   r   r-   r.   )r    r  r2   r   r   r   test_groupby_get_by_index  s    r  zgrp_col_dict, exp_data)nrcat_ordr  r  c              	   C   s   t ddddddddgtd	td
d}|ddd}|d j |d< |d| }tjddgddgdddd}t ||d}d|kr|d j	}|d ||d< t
|| d S )Nr   r   r   r   rG   r   rH   r\   aabbccddaaaabbbbr  r  r  categoryr  r  r  r  r   r   F
categoriesZorderedro   rn   )rd   r:   )r   rw   r   r  
as_orderedr   r   r   CategoricalIndexrn   r-   r.   )grp_col_dictexp_datainput_df	result_df	cat_indexexpected_dfrn   r   r   r    test_groupby_single_agg_cat_cols  s*        
r  )r   r   r   )rG   r\   r   )r   r   r   )rG   r   r   r   )r   r   c              	   C   s   t ddddddddgtd	td
d}|ddd}|d j |d< |d| }tjddgddgdddd}g }| 	 D ]:\}}t
|tr|D ]}|||g qq|||g qtt|}	t ||	|d}
|
jD ].}t
|trd|kr|
| |d j|
|< qt||
 d S )Nr   r   r   r   rG   r   rH   r\   r  r  r  r  r  r  r  r   r   Fr  r  )r   rw   r   r  r  r   r   r   r  itemsr   appendr   ra   rx   re   rn   r-   r.   )r  r  r  r  r  Zmulti_index_listr   vr   Zmulti_indexr  colr   r   r   #test_groupby_combined_aggs_cat_cols  s8        

r  c                  C   s\   t ddddgddddgd} | d}|dg}|jd|_|d}t|| d S )Nr   r   r   r   r   r  )r   r   r   re   Z	droplevelr-   r.   )r    rb   r1   r2   r   r   r   test_nonagg_agg  s    

r  c                  C   sh   t ddgtdddddddtd	ddddddgd
} | dj }| dd }t|| d S )Nr  rd  i  r   r   r     i`= i  r   r4   rA   )r   datetimer   rA   r   r   r-   rC   r  r   r   r   test_aggregate_datetime_objects  s    	r  c                  C   s   t dddgdddgdddgd} | jd| _| dd	g}|jd
d }tjddgdd}tddg|dd}t	
|| d S )Nr   r   r   r   r   )c0c1pOr  r  c                 S   s   t | dkS r   r   r   r   r   r   r&     r'   z1test_groupby_index_object_dtype.<locals>.<lambda>)r   r   r  )r  r  rZ   FTr  r   )r   r:   r   r   r  r   r   ra   r   r-   rC   )r    r0   r  r   r2   r   r   r   test_groupby_index_object_dtype  s    " r  c                  C   sT   dd } t dgtdgd}|dd | }t dggdgd}t|| d S )	Nc                 S   s   |    rd S t| S r#   )Zisnar   r+   r   r   r   r   r   r      s    z)test_timeseries_groupby_agg.<locals>.funcr   z2018-01-16 00:00:00+00:00r9   c                 S   s   dS r&  r   r   r   r   r   r&   &  r'   z-test_timeseries_groupby_agg.<locals>.<lambda>r   )r   r   r  r   r   r-   r.   )r   r    r  r2   r   r   r   test_timeseries_groupby_agg  s
    r  c                 C   s   | dkrd S t ddgdtjgg}|d| }|dd| i}| dkrdtj||d dd nt|| t|j|j d S )N)ZcorrwithZnthr   r   )r   ZngroupF)Zcheck_names)	r   r+   r`   r   r   r-   rC   r.   Zdtypes)r   objZresult_reduced_seriesZresult_reduced_framer   r   r    test_groupby_aggregate_directory,  s        r  c                  C   sD   t dddgdd} t dgdd}| dddg }t|| d S )Nz1 dayz3 daysNaTztimedelta64[ns]rm   z2 daysr   )r   r   r,   r-   rC   )rd   r2   r1   r   r   r   test_group_mean_timedelta_natB  s    r  zinput_data, expected_outputz2021-01-01T00:00r  z2021-01-01T02:00z2021-01-01T01:00z2021-01-01T00:00-0100z2021-01-01T02:00-0100z2021-01-01T01:00-0100c                 C   s<   t t| }t t|}|dddg }t|| d S r   )r	   r   r   r,   r-   rC   )Z
input_dataZexpected_outputrd   r2   r1   r   r   r   test_group_mean_datetime64_natL  s    r  zfunc, outputy       @      2@y      $@      6@y      D@     V@y      I@     [@c                 C   sN   t tdddddg}||jd | }t |}t	|| d S )Nr   r   r   r                  @)
r   r+   r   r   dotr   r:   r   r-   rC   )r   outputrd   r1   r2   r   r   r   test_groupby_complexb  s     r  c              	   C   sX   t tdddddg}d}tjt|d ||j	d 
|  W 5 Q R X d S )Nr   r   r   r   r  zNo matching signature foundr6   )r   r+   r   r   r  r;   r<   r   r   r:   r   )r   rd   r>   r   r   r   test_groupby_complex_raisesm  s     r  )d__doc__r  rB  r   rU  numpyr+   r;   Zpandas.core.dtypes.commonr   Zpandasr   r   r   r   r   r   r	   Zpandas._testingZ_testingr-   Zpandas.core.baser
   Zpandas.core.groupby.grouperr   r"   r3   r?   rF   rc   rl   ru   ry   rz   r3  r4  r   r   intrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   Zuint64r	  r
  r  rw   Zinterval_rangeZperiod_rangera   r  r  r  r  r6  r   r5  r,   rc  re  rf  ri  rk  rl  rw  rx  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s   
1 

 	
	!$
(  (

	
5v	

	



 


y

)

	 
