U
    >vf0M                     @   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 tjtd
d || W 5 Q R X d S )N   abonetwo)Zdata1Zdata2key1key2r   c                 S   s   |   |   S N)maxmin)Zarr r   M/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/groupby/aggregate/test_other.pypeak_to_peak)   s    z5test_agg_partial_failure_raises.<locals>.peak_to_peakzunsupported operand typematch)	r   nprandomrandngroupbypytestraises	TypeErroragg)dfgroupedr   r   r   r   test_agg_partial_failure_raises   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>8   s     z,test_agg_datetimes_mixed.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r&   r   r,   r   r   r   r/   9   s     c                 S   s   g | ]}|d  qS r)   r   r,   r   r   r   r/   :   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strptimer3   )r-   rowr   r   r   r/   >   s
    c                 S   s   g | ]}|d  qS r+   r   r,   r   r   r   r/   I   s     c                 S   s   g | ]}|d  qS r0   r   r,   r   r   r   r/   J   s     c                 S   s   g | ]}|d  qS r1   r   r,   r   r   r   r/   K   s     r4   weightsr3   )r   sumr   	aggregater   lenAssertionError)dataZdf1Zdf2Zgb1Zgb2r   r   r   test_agg_datetimes_mixed3   s*    	r?   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Mr*   )freqperiodsr)   indexr   )levelz1999-01r   )startrB   rA   )s1s2)r
   r   r   r   r   r   r:   
isinstancerD   r   r=   r   Zrandr<   	from_dictmonthlist)Zprngr#   rsrD   rG   rH   r$   r   r   r   test_agg_period_indexX   s    rN   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)rB   rA   )classtimer   r&   r)   r   rV   r*         rU   first   lastABCDnamerD   r^   )r   r	   locZ	set_indexr   tmassert_frame_equalrY   r"   assert_series_equalrV   r[   r   r   rL   r<   sizecount)r#   expr$   r   r   r   *test_agg_dict_parameter_cast_result_dtypesg   s2    

""rg   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&   )r5   r6   r,   r   r   r   r/      s     z0test_agg_cast_results_dtypes.<locals>.<listcomp>   Zaaabbbbbbccd)XYri   rj   )	rangerL   r   r   r"   r<   re   ra   rc   )uvr#   resultexpectedr   r   r   test_agg_cast_results_dtypes   s    rp   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)   r*   rW   r   )r   r   cr   g      @rC   r   )r   rq   rq   )r   rD   r^   r   meanra   rb   )r#   ro   rn   r   r   r   test_aggregate_float64_no_int64   s    . *rs   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   rS   r(   rO   rP   rQ   rR   rO   rP   rQ   rR   r:   rr   r&   )ZaxisT)Z
check_likerQ   rR   z&Column\(s\) \['r', 'r2'\] do not existr   )rr2)r   r   r   r   aranger   rr   r:   r"   pdconcatcolumnsra   rb   r   Zfrom_productr   r    KeyError)	r#   r$   Zc_meanZc_sumZd_meanZd_sumrn   ro   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   rO   rP   rQ   nested renamer is not supportedr   rO   rt   r:   r   ru   re   r   )rP   rQ   z!Column\(s\) \['ma'\] do not existrP   rQ   ma)	r   rk   r   r    r   r   r"   r~   rP   )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 )Nrt   ru   r   r   rS   r(   rv   rO   rP   r   r   rR   rQ   r:   stdrw   )
r   r   r   r   rz   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 )Nrt   ru   r   r   rS   r(   rv   rO   rP   r   r   rQ   rr   r:   rR   )Zr1ry   rar   rbrw   )result1result2)rR   r   )r   r   r   r   rz   r   r   r    r   r;   r"   r:   rr   r   r   r   r   test_agg_nested_dicts  s"    	**"r   c               	   C   sJ   t tjjddd} dd }tjtdd | d| W 5 Q R X d S )	N
   )   r   )rd   c                 S   s    t d t |   tdd S )Nz(----------------------------------------test)r   Z	to_stringr!   )r#   r   r   r   raiseException!  s    z=test_agg_item_by_item_raise_typeerror.<locals>.raiseExceptionr   r   r   )	r   r   r   randintr   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r.   r   r   r   <lambda>,      z*test_series_agg_multikey.<locals>.<lambda>c                 S   s   | j S r   )rK   r   r   r   r   r   ,  r   )ra   ZmakeTimeSeriesr   r"   r   r:   rc   )tsr$   rn   ro   r   r   r   test_series_agg_multikey*  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 )Nrt   ru   r   r   ZdullZshiny   )rO   rP   rQ   rR   EFc                 S   s   t | jjdkstdS )Nr   rt   )r<   valuesbaser=   r   r   r   r   badc  s    z.test_series_agg_multi_pure_python.<locals>.badrO   rP   c                 S   s   dS )Nrt   r   r   r   r   r   r   h  r   z3test_series_agg_multi_pure_python.<locals>.<lambda>)r   r   r   r   r   r"   ra   rb   )r>   r   rn   ro   r   r   r   !test_series_agg_multi_pure_python3  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   P1o  s    z test_agg_consistency.<locals>.P1r&   r)   r*   rW   r            i  r   )Zcol1Zcol2r3   r3   r   )	r   r5   r3   r   r"   r}   levelsra   rb   )r   r#   r   ro   rn   r   r   r   test_agg_consistencyl  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)   r*   rW   )rt   ru   c                   @   s   e Zd Zdd ZdS )z$test_agg_callables.<locals>.fn_classc                 S   s   t |S r   r:   )selfr.   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   rt   )
r   Zastyper   Zint64r:   r   r   r"   ra   rb   )r#   r   Zequiv_callablesro   Zecallrn   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   r]   rD   r}   FZnumeric_onlyr:   )	r   r   arrayr   r   r:   ra   rb   r"   )r#   gbZexpected_dataZexpected_indexZexpected_columnro   Zaltrn   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'   rW   UTC)rB   tzrR   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)   r]   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   rD   r^   ra   rc   r{   Z	TimedeltaoffsetsZDay)r   Zdtir#   r   rn   ro   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)r5   	timedelta)r-   nnr   r   r   r/     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)r-   ir   r   r   r/     s    r   r)   rO   rP   rO   rP   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   rk   r   r"   r   r   r   r=   ZnthheadrY   applyr[   )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|td}d|j_| djdd}t	
|| | djdd}|g  }t	
|| d S )Nr&   r)   r*   rW   r   rX   )dtypel    l            l           l           l           l           l           )rD   r   r   Fr   T)r   objectr   r   Zuint64rD   r^   r   r:   ra   rb   )r#   rD   ro   rn   r   Z	expected2r   r   r   test_sum_uint64_overflow  s"     r   zstructure, expectedrQ   )r&   r&   r&   )r*   rW   rW   ))r&   r&   )r*   rW   r&   r*   rW   c                 C   s   t | S r   tupler   r   r   r   r     r   r   c                 C   s   t | S r   rL   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&   r*   rW   r   rO   rP   )r   r   r;   rD   namesra   rb   Z	structurero   r#   rn   r   r   r   test_agg_structs_dataframe  s    .r   r_   c                 C   s   t | S r   r   r   r   r   r   r   3  r   c                 C   s   t | S r   r   r   r   r   r   r   4  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&   r*   rW   r   rO   rQ   )r   r   r;   rD   r^   ra   rc   r   r   r   r   test_agg_structs_series.  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   rq   )
categoriesr&   r)   r*   r   rO   )observedr   )r   r^   rP   r_   )r   r{   ZCategoricalr   rP   r"   r   Znansumr   ZCategoricalIndexra   rc   )r   r   r#   rn   ro   r   r   r   test_agg_category_nansumB  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   strr,   r   r   r   r/   T  s     z+test_agg_list_like_func.<locals>.<listcomp>r*   r   rO   F)Zas_indexsortrP   c                 S   s   t | S r   r   r   r   r   r   r   V  r   z)test_agg_list_like_func.<locals>.<lambda>c                 S   s   g | ]}t |qS r   r   r,   r   r   r   r/   X  s     c                 S   s   g | ]}t |gqS r   r   r,   r   r   r   r/   X  s     )r   rk   r   r"   ra   rb   )r#   r$   rn   ro   r   r   r   test_agg_list_like_funcR  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)tagr3   r   r3   c                 S   s
   |  dS )Nr&   )r   )er   r   r   r   h  r   z/test_agg_lambda_with_timezone.<locals>.<lambda>r]   r   )r   r{   r   r   r"   r   ra   rb   )r#   rn   ro   r   r   r   test_agg_lambda_with_timezone]  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decimalsr*   c                    s   t | dkr | jd S r   )r<   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"   ra   rc   )	r   r   r   r   r>   r#   ro   r   rn   r   r   r   test_groupby_agg_err_catchingq  s    "r   )=__doc__r6   r5   	functoolsr   Znumpyr   r   Zpandas.errorsr   Zpandasr{   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingra   Zpandas.io.formats.printingr   r%   r?   rN   rg   rp   rs   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   rL   r   r   r   r   r   NotImplementedErrorRuntimeErrorr~   
IndexErrorOSError
ValueErrorArithmeticErrorAttributeErrorr   r   r   r   r   <module>   s   $	%&/	9
" 

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