U
    sVcN                     @   s  d Z ddlZddlmZ ddlZddlZddlm	Z	 ddl
Zddl
mZmZmZmZmZmZmZ 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 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)gd*d+ Z*d,d- Z+d.d/ Z,ej()d0e-ed1d2d3d4ife.ed1d5d5d5gd6d7d7gd4ifd8d9 ed1d2d3d4ifd:d9 ed1d5d5d5gd6d7d7gd4ifgd;d< Z/ej()d0e-ed2d3gd5d6gd1d=fe.ed5d5d5gd6d7d7ggd5d6gd1d=fd>d9 ed2d3gd5d6gd1d=fd?d9 ed5d5d5gd6d7d7ggd5d6gd1d=fgd@dA Z0dBdC Z1dDdE Z2dFdG Z3ej()dHe4e5e6e7e8e9e:e;gdIdJ Z<dS )Kz
test all other .agg behavior
    N)partial)SpecificationError)	DataFrameIndex
MultiIndexPeriodIndexSeries
date_rangeperiod_range)pprint_thingc               	   C   s   t tjdtjddddddgdddddgd} | d}dd	 }tjtd
d ||g}W 5 Q R X ddg|_	tjtd
d ||}W 5 Q R X t
|| d S )N   abonetwo)data1data2key1key2r   c                 S   s   |   |   S N)maxmin)Zarr r   M/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/groupby/aggregate/test_other.pypeak_to_peak+   s    z"test_agg_api.<locals>.peak_to_peakz)\['key2'\] did not aggregate successfullymatchr   r   )r   nprandomrandngroupbytmassert_produces_warningFutureWarningaggcolumnsassert_frame_equal)dfgroupedr   expectedresultr   r   r   test_agg_api   s*    



r+   c                  C   s   dddgdddgdd dgg} t d	d
 | D dd
 | D dd
 | D d}dd
 | D } t dd
 | D dd
 | D dd
 | D d}|d |d   |d< |dtj}|d |d   |d< |dtj}t|t|kstd S )N   
2012-01-01      ?   z
2012-01-02g       @   g      @c                 S   s   g | ]}|d  qS r   r   .0xr   r   r   
<listcomp>B   s     z,test_agg_datetimes_mixed.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r,   r   r2   r   r   r   r5   C   s     c                 S   s   g | ]}|d  qS r/   r   r2   r   r   r   r5   D   s     )keydatevaluec                 S   s<   g | ]4}|d  |d r,t j|d d nd|d gqS )r   r,   z%Y-%m-%dNr/   )dtdatetimestrptimer9   )r3   rowr   r   r   r5   H   s
    c                 S   s   g | ]}|d  qS r1   r   r2   r   r   r   r5   S   s     c                 S   s   g | ]}|d  qS r6   r   r2   r   r   r   r5   T   s     c                 S   s   g | ]}|d  qS r7   r   r2   r   r   r   r5   U   s     r:   weightsr9   )r   sumr    	aggregater   lenAssertionError)dataZdf1Zdf2Zgb1Zgb2r   r   r   test_agg_datetimes_mixed=   s*    	rE   c                  C   s   t dddd} ttjdd| d}|jdd }t|jt	sDt
t d	d
dd}ttjt||d}ttjt||d}t||d}||jj}t| d S )Nz2012-1-1Mr0   )freqperiodsr/   indexr   )levelz1999-01r   )startrH   rG   )s1s2)r
   r   r   r   r   r    r@   
isinstancerJ   r   rC   r   ZrandrB   	from_dictmonthlist)Zprngr'   rsrJ   rM   rN   r(   r   r   r   test_agg_period_indexb   s    rT   c               	   C   s  t ddddddddgtddddd	} d | jd
dddgdf< | jd
dddg d}| d}t| | t|d| t|ddi| t	|j
 |d  t	|j
d|d  | jd
dddg d}| d}t| | t|d| t|ddi| t	|j
 |d  t	|j
d|d  tddddgttddddd}t	|j
t| t	|j
 | td
dddgttddddd}t	|j
 | d S )NABCDz1/1/2011   H)rH   rG   )classtimer   r,   r/   r   r\   r0         r[   first   lastABCDnamerJ   rd   )r   r	   locZ	set_indexr    r!   r&   r_   r$   assert_series_equalr\   ra   r   r   rR   rB   sizecount)r'   expr(   r   r   r   *test_agg_dict_parameter_cast_result_dtypesq   s2    

""rk   c                  C   s^   dd t dD } td}t|| d}|dd t}|dd  }t|| d S )Nc                 S   s   g | ]}t d |d dqS )i  r,   )r;   r<   r2   r   r   r   r5      s     z0test_agg_cast_results_dtypes.<locals>.<listcomp>   Zaaabbbbbbccd)XYrm   rn   )	rangerR   r   r    r$   rB   ri   r!   rg   )uvr'   r*   r)   r   r   r   test_agg_cast_results_dtypes   s    rr   c                  C   s   t dddddgdddddgdddddgd} t dddddgiddddgd	}d
|j_| d
dg  }t|| t ddddgddddgdddddgd	}d
|j_| d
ddg  }t|| d S )Nr,   r/   r0   r]   r   )r   r   cr   g      @rI   r   )r   rs   rs   )r   rJ   rd   r    meanr!   r&   )r'   r)   r*   r   r   r   test_aggregate_float64_no_int64   s    . *ru   c            	   
   C   s  t ddddddddgddddddddgtjdd tdd} | dd	g}|d
  }|d
  }|d  }|d  }|d ddg}t	j
||gdd}ddg|_tj||dd |tjtjg}t	j
||||gdd}td
dgddgg|_tj||dd |dd
g tjtjg}t	j
||||gdd}tdd
gddgg|_tj||dd |ddd}t	j
||gdd}tj||dd |ddgddgd}t	j
||||gdd}td
dgddgg|_d}tjt|d" |dd
g tjtjd W 5 Q R X d S )Nfoobarr   r   rY   r.   rU   rV   rW   rX   rU   rV   rW   rX   r@   rt   r,   )ZaxisT)Z
check_likerW   rX   z&Column\(s\) \['r', 'r2'\] do not existr   )rr2)r   r   r   r   aranger    rt   r@   r$   pdconcatr%   r!   r&   r   Zfrom_productpytestraisesKeyError)	r'   r(   Zc_meanZc_sumZd_meanZd_sumr*   r)   msgr   r   r   test_aggregate_api_consistency   sB    	
r   c               	   C   s   t dddddgtdtdd} d}tjt|d, | ddd	d
gidddgid W 5 Q R X d}tjt|d" | dddg dd
i W 5 Q R X d}tjt|d | djddi W 5 Q R X d S )Nr,   r/   r   rU   rV   rW   nested renamer is not supportedr   rU   rv   r@   r   rw   ri   r   )rV   rW   z!Column\(s\) \['ma'\] do not existrV   rW   ma)	r   ro   r   r   r   r    r$   r   rV   )r'   r   r   r   r   "test_agg_dict_renaming_deprecation   s    "
&r   c               
   C   s   t ddddddddgddddddddgtjdd tdd} | dd	g}d
}tjt|d |d 	dddgi W 5 Q R X tjt|d |d 	ddd W 5 Q R X d S )Nrv   rw   r   r   rY   r.   rx   rU   rV   r   r   rX   rW   r@   stdry   )
r   r   r   r   r|   r    r   r   r   r$   r'   gr   r   r   r   test_agg_compat   s    	 r   c               
   C   s2  t ddddddddgddddddddgtjdd tdd} | dd	g}d
}tjt|d& |	dddgidddgid W 5 Q R X tjt|d& |
dddgidddgid W 5 Q R X tjt|d |d 
tjtjd W 5 Q R X tjt|d |d 
tjtjd W 5 Q R X d S )Nrv   rw   r   r   rY   r.   rx   rU   rV   r   r   rW   rt   r@   rX   )Zr1r{   rar   rbry   )result1result2)rX   r   )r   r   r   r   r|   r    r   r   r   rA   r$   r@   rt   r   r   r   r   test_agg_nested_dicts  s"    	**"r   c               
   C   sd   t tjjddd} dd }tjtdd0 tjt	dd | 
d	| W 5 Q R X W 5 Q R X d S )
N
   )   r   )rh   c                 S   s    t d t |   tdd S )Nz(----------------------------------------test)r   Z	to_string	TypeError)r'   r   r   r   raiseException+  s    z=test_agg_item_by_item_raise_typeerror.<locals>.raiseExceptionr   r   zDropping invalidr   )r   r   r   randintr   r   r   r!   r"   r#   r    r$   )r'   r   r   r   r   %test_agg_item_by_item_raise_typeerror(  s
    r   c                  C   sB   t  } | dd dd g}|tj}| }t || d S )Nc                 S   s   | j S r   )yearr4   r   r   r   <lambda>7      z*test_series_agg_multikey.<locals>.<lambda>c                 S   s   | j S r   )rQ   r   r   r   r   r   7  r   )r!   ZmakeTimeSeriesr    r$   r   r@   rg   )tsr(   r*   r)   r   r   r   test_series_agg_multikey5  s
    r   c                  C   s   t dddddddddddgdddddddddddgdddddddddddgtjdtjdtjdd} d	d
 }| ddg|}| ddgdd }t|| d S )Nrv   rw   r   r   ZdullZshiny   )rU   rV   rW   rX   EFc                 S   s   t | jjdkstdS )Nr   rv   )rB   valuesbaserC   r   r   r   r   badn  s    z.test_series_agg_multi_pure_python.<locals>.badrU   rV   c                 S   s   dS )Nrv   r   r   r   r   r   r   s  r   z3test_series_agg_multi_pure_python.<locals>.<lambda>)r   r   r   r   r    r$   r!   r&   )rD   r   r*   r)   r   r   r   !test_series_agg_multi_pure_python>  s\    


/r   c                  C   s   dd } t ddddgddd	d
gtdddtdddtdddtdddgd}|d}|| g}|jjd |_|| }t|| d S )Nc                 S   s   t j|  ddS )Nr,   )q)r   Z
percentileZdropna)r   r   r   r   P1z  s    z test_agg_consistency.<locals>.P1r,   r/   r0   r]   r            i  r   )Zcol1Zcol2r9   r9   r   )	r   r;   r9   r    r$   r%   levelsr!   r&   )r   r'   r   r)   r*   r   r   r   test_agg_consistencyw  s     



r   c                  C   s   t ddgddgdtj} G dd d}ttjdd	 d
d	 tt| g}| dt}|D ] }| d|}t	|| q`d S )Nr,   r/   r0   r]   )rv   rw   c                   @   s   e Zd Zdd ZdS )z$test_agg_callables.<locals>.fn_classc                 S   s   t |S r   r@   )selfr4   r   r   r   __call__  s    z-test_agg_callables.<locals>.fn_class.__call__N)__name__
__module____qualname__r   r   r   r   r   fn_class  s   r   c                 S   s   t | S r   r   r   r   r   r   r     r   z$test_agg_callables.<locals>.<lambda>c                 S   s   |   S r   r   r   r   r   r   r     r   rv   )
r   Zastyper   Zint64r@   r   r    r$   r!   r&   )r'   r   Zequiv_callablesr)   Zecallr*   r   r   r   test_agg_callables  s    	r   c               	   C   s   t dtdddggdtdddggdtdddgggd	d
gd} | d	}tdddggtdddggg}tddgd	d}d
g}t |||d}|jdd}t|| |jddd}t|| d S )Nr,   r   r      (   2   <   r/   categoryZ	arraydata)r%   F   Z   rc   rJ   r%   FZnumeric_onlyr@   )	r   r   arrayr    r   r@   r!   r&   r$   )r'   gbZexpected_dataZexpected_indexZexpected_columnr)   Zaltr*   r   r   r   test_agg_over_numpy_arrays  s     
$r   	as_periodTFc                 C   s,  t dddd}| r"|d d}tddddg|d}|d	}|d
 dd }t|d d d d
d}d	|j_t	
|| |d
 dd }tddgd
d}d	|j_t	
|| |d
 dd }ttjddtjddgd
d}d	|j_| rttjdtjdgd
d}d	|j_t	
|| d S )Nr-   r]   UTC)rH   tzrX   r   r,   r   r   r   r   c                 S   s
   | j d S Nr   ilocr   r   r   r   r     r   z6test_agg_tzaware_non_datetime_result.<locals>.<lambda>r/   rc   c                 S   s   | j d jS r   )r   r   r   r   r   r   r     r   i  c                 S   s   | j d | j d  S )Nr   r   r   r   r   r   r     r   )days)r	   Ztz_localizeZ	to_periodr   r    r$   r   rJ   rd   r!   rg   r}   Z	TimedeltaoffsetsZDay)r   Zdtir'   r   r*   r)   r   r   r   $test_agg_tzaware_non_datetime_result  s(    
  r   c                     s  t jddd td fddtdD d} | d	d
 tjjd }| d	d
 dd jd }| d	d
  jd }| kst	| kst	| kst	dd tddD }td	d
gd |d} | d}| d jd   |
dd jd kst	 |dd jd ks"t	 | d jd ks>t	 |dd jd ks\t	| d jd   | d jd kst	 |dd jd kst	d S )Nz2016-01-01 12:00:00
US/Pacificr   r,   c                    s   g | ]} t j|d  qS ))minutes)r;   	timedelta)r3   nnr   r   r   r5     s     z0test_agg_timezone_round_trip.<locals>.<listcomp>r   r   r   r   r   c                 S   s
   t | S r   )r   r   r   r   r   r   r     r   z.test_agg_timezone_round_trip.<locals>.<lambda>c                 S   s$   g | ]}t jd |ddddqS )z	2016-01-0dz	 12:00:00r   r   )r}   	Timestamp)r3   ir   r   r   r5     s    r   r/   rU   rV   rU   rV   c                 S   s
   | j d S r   r   r   r   r   r   r     r   )r   r,   c                 S   s
   | j d S )Nr   r   r   r   r   r   r     r   )r}   r   r   ro   r    r$   r   r   r   rC   Znthheadr_   applyra   )r'   r   r   Zresult3datesr(   r   r   r   test_agg_timezone_round_trip  s*     
r   c                  C   s   t ddgddgddggtd} | d } td	d
dgtjd}t ddddgi|d}d|j_| djdd}t	
|| | djdd}|g  }t	
|| d S )Nr,   r/   r0   r]   r   r^   )Zdtypel    l            l           l           l           l           l           rI   r   Fr   T)r   objectr   r   Zuint64rJ   rd   r    r@   r!   r&   )r'   rJ   r)   r*   r   Z	expected2r   r   r   test_sum_uint64_overflow  s      r   zstructure, expectedrW   )r,   r,   r,   )r0   r]   r]   ))r,   r,   )r0   r]   r,   r0   r]   c                 C   s   t | S r   tupler   r   r   r   r   %  r   r   c                 C   s   t | S r   rR   r   r   r   r   r   )  r   c              	   C   sd   t ddddddgddddddgddddddgd}|ddg| }ddg|j_t|| d S )Nr,   r0   r]   r   rU   rV   )r   r    rA   rJ   namesr!   r&   Z	structurer)   r'   r*   r   r   r   test_agg_structs_dataframe  s    .r   re   c                 C   s   t | S r   r   r   r   r   r   r   =  r   c                 C   s   t | S r   r   r   r   r   r   r   >  r   c              	   C   s`   t ddddddgddddddgddddddgd}|dd | }d|j_t|| d S )Nr,   r0   r]   r   rU   rW   )r   r    rA   rJ   rd   r!   rg   r   r   r   r   test_agg_structs_series8  s    .r   c                 C   s   dddg}t tjdddg|ddddgd}|jd	| d
jtj}tdddgtj	dddg|d	ddd}| r|||dk }t
|| d S )Nr   r   rs   )
categoriesr,   r/   r0   r   rU   )observedr   )r   rd   rV   re   )r   r}   ZCategoricalr    rV   r$   r   Znansumr   ZCategoricalIndexr!   rg   )r   r   r'   r*   r)   r   r   r   test_agg_category_nansumL  s    
r   c                  C   s   t dd tdD dd tdD d} | jdddd}|dd	d
 i}t dd tdD dd tdD d}t|| d S )Nc                 S   s   g | ]}t |qS r   strr2   r   r   r   r5   ^  s     z+test_agg_list_like_func.<locals>.<listcomp>r0   r   rU   F)Zas_indexsortrV   c                 S   s   t | S r   r   r   r   r   r   r   `  r   z)test_agg_list_like_func.<locals>.<lambda>c                 S   s   g | ]}t |qS r   r   r2   r   r   r   r5   b  s     c                 S   s   g | ]}t |gqS r   r   r2   r   r   r   r5   b  s     )r   ro   r    r$   r!   r&   )r'   r(   r*   r)   r   r   r   test_agg_list_like_func\  s    *$r   c                  C   sx   t ddgtjdddtjdddgd} | ddd	d
 i}t tjdddgtdgdddgd}t|| d S )Nr,   z
2018-01-01r   r   z
2018-01-02)tagr9   r   r9   c                 S   s
   |  dS )Nr,   )r   )er   r   r   r   r  r   z/test_agg_lambda_with_timezone.<locals>.<lambda>rc   r   )r   r}   r   r    r$   r   r!   r&   )r'   r*   r)   r   r   r   test_agg_lambda_with_timezoneg  s    	r   err_clsc           	         s   ddl m}m}m} | d d }tdddddgdddddg||d}t||d |d g} fdd}|d	 |d
 |}tj	||dd d S )Nr   )DecimalArray	make_data
to_decimalr   r,   )id1Zid2decimalsr0   c                    s   t | dkr | jd S r   )rB   r   r   r   r   r   
weird_func  s    z1test_groupby_agg_err_catching.<locals>.weird_funcr   r   F)Zcheck_names)
Z$pandas.tests.extension.decimal.arrayr   r   r   r   r   r    r$   r!   rg   )	r   r   r   r   rD   r'   r)   r   r*   r   r   r   test_groupby_agg_err_catching{  s    "r   )=__doc__r<   r;   	functoolsr   Znumpyr   r   Zpandas.errorsr   Zpandasr}   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr!   Zpandas.io.formats.printingr   r+   rE   rT   rk   rr   ru   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   rR   r   r   r   r   r   NotImplementedErrorRuntimeErrorr   
IndexErrorOSError
ValueErrorArithmeticErrorAttributeErrorr   r   r   r   r   <module>   s   $	!%&/	9
" 

$(	
