o
    DfP                     @   sp  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d1g d2g d3d4ifd5d6 ed1d2d3d4ifd7d6 ed1g d2g d3d4ifgd8d9 Z/ej()d0e-ed2d3gd:d;gd1d<fe.eg d2g d3gd:d;gd1d<fd=d6 ed2d3gd:d;gd1d<fd>d6 eg d2g d3gd:d;gd1d<fgd?d@ Z0dAdB Z1dCdD Z2dEdF Z3ej()dGe4e5e6e7e8e9e:e;gdHdI Z<dS )Jz
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dtjddg dg dd} | d}dd }tjtd	d
 |	|g W d    n1 s<w   Y  tjtd	d
 |	| W d    d S 1 sYw   Y  d S )N      )ar   br   r   )onetwor   r   r   )data1data2key1key2r   c                 S   s   |   |   S N)maxmin)arr r   b/home/ubuntu/webapp/venv/lib/python3.10/site-packages/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default_rngstandard_normalgroupbypytestraises	TypeErroragg)dfgroupedr   r   r   r   test_agg_partial_failure_raises   s   
"r*   c                  C   s   g dg dg d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d}|d |d   |d< |dd}t|t|ksrJ d S )N)   
2012-01-01      ?)r   z
2012-01-02g       @)   Ng      @c                 S      g | ]}|d  qS r   r   .0xr   r   r   
<listcomp>8       z,test_agg_datetimes_mixed.<locals>.<listcomp>c                 S   r/   r+   r   r1   r   r   r   r4   9   r5   c                 S   r/   r   r   r1   r   r   r   r4   :   r5   )keydatevaluec                 S   s<   g | ]}|d  |d rt j|d d nd|d gqS )r   r+   z%Y-%m-%dNr   )dtdatetimestrptimer9   )r2   rowr   r   r   r4   >   s     c                 S   r/   r0   r   r1   r   r   r   r4   I   r5   c                 S   r/   r6   r   r1   r   r   r   r4   J   r5   c                 S   r/   r7   r   r1   r   r   r   r4   K   r5   r:   weightsr9   sum)r   r@   r#   	aggregatelen)datadf1df2gb1gb2r   r   r   test_agg_datetimes_mixed3   s*   	rH   c                  C   s   t dddd} ttjdd| d}|jdd	 }t|j	t
s$J t d
ddd}ttjdt||d}ttjdt||d}t||d}||j	j}t| d S )Nz2012-1-1Mr.   )freqperiodsr   )r.   r   indexr   )levelz1999-01r   )startrK   rJ   )s1s2)r
   r   r   r    r!   r"   r#   r@   
isinstancerM   r   r   rB   	from_dictmonthlist)prngr(   rsrM   rP   rQ   r)   r   r   r   test_agg_period_indexX   s   rX   c                  C   s  t g dtddddd} d | jg ddf< | jg d	 d
}| d
}t| | t|d| t|ddi| t	|j
 |d  t	|j
d|d  | jg d d
}| d
}t| | t|d| t|ddi| t	|j
 |d  t	|j
d|d  tg dttdd
ddd}t	|j
t| t	|j
 | tg dttdd
ddd}t	|j
 | d S )N)ArY   BrZ   Cr[   Dr\   z1/1/2011   h)rK   rJ   )classtime)r   r+   r   r   r`   )r   r.         r_   first)r   r.   ra      last)r   r   r   r   ABCDnamerM   rh   )r   r+   r+   r   )r   r	   loc	set_indexr#   tmassert_frame_equalrc   r'   assert_series_equalr`   re   r   r   rU   rB   sizecount)r(   expr)   r   r   r   *test_agg_dict_parameter_cast_result_dtypesg   s2   

rr   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<   r1   r   r   r   r4      s    z0test_agg_cast_results_dtypes.<locals>.<listcomp>   aaabbbbbbccd)XYru   rv   )	rangerU   r   r#   r'   rB   rp   rl   rn   )uvr(   resultexpectedr   r   r   test_agg_cast_results_dtypes   s   r|   c                  C   s   t g dg dg dd} t dg dig dd}d|j_| ddg  }t|| t g dg dd	g dd}d|j_| ddd
g  }t|| d S )N)r+   r   r.   ra   r   )r+   r   r   ra   r   r   r   cr   )r+   g      @ra   r   )r+   r   ra   r   rL   r   )r   r~   r~   )r   rM   rh   r#   meanrl   rm   )r(   r{   rz   r   r   r   test_aggregate_float64_no_int64   s   r   c            	      C   s  t g dg dtjd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 |	ddg}t
j||||gdd}td	d
gddgg|_tj||dd |d
d	g 	dd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 	ddd W d    d S 1 sw   Y  d S )Nfoobarr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r-   rY   rZ   r[   r\   rY   rZ   r[   r\   r@   r   r+   )axisT)
check_liker[   r\   z&Column\(s\) \['r', 'r2'\] do not existr   )rr2)r   r   r    r!   r"   aranger#   r   r@   r'   pdconcatcolumnsrl   rm   r   from_productr$   r%   KeyError)	r(   r)   c_meanc_sumd_meand_sumrz   r{   msgr   r   r   test_aggregate_api_consistency   sD   	
$r   c                  C   s  t g dtdtdd} d}tjt|d | dddd	gid
ddgid W d    n1 s5w   Y  d}tjt|d | dddg dd	i W d    n1 s\w   Y  d}tjt|d | djddi W d    d S 1 sw   Y  d S )N)r+   r+   r+   r   r   r   rY   rZ   r[   nested renamer is not supportedr   rY   r   r@   r   r   rp   r   )rZ   r[   z!Column\(s\) \['ma'\] do not existrZ   r[   ma)	r   rw   r$   r%   r   r#   r'   r   rZ   )r(   r   r   r   r   "test_agg_dict_renaming_deprecation   s   
"r   c                  C   s   t g dg dtjddd tdd} | ddg}d	}tjt	|d
 |d 
dddgi W d    n1 s?w   Y  tjt	|d
 |d 
ddd W d    d S 1 saw   Y  d S )Nr   r   r   r]   r-   r   rY   rZ   r   r   r\   r[   r@   stdr   )r   r   r    r!   r"   r   r#   r$   r%   r   r'   r(   gr   r   r   r   test_agg_compat   s   	"r   c                  C   sr  t g dg dtjd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 d    n1 sDw   Y  tjt	|d
 |dddgidddgid W d    n1 skw   Y  tjt	|d
 |d tjtjd W d    n1 sw   Y  tjt	|d
 |d tjtjd W d    d S 1 sw   Y  d S )Nr   r   r   r]   r-   r   rY   rZ   r   r   r[   r   r@   r\   )r1r   rar   rbr   )result1result2)r\   r   )r   r   r    r!   r"   r   r#   r$   r%   r   rA   r'   r@   r   r   r   r   r   test_agg_nested_dicts  s*   	"""r   c                  C   sf   t tjdjddd} dd }tjtdd | d		| W d    d S 1 s,w   Y  d S )
Nr   
   )   r   )ro   c                 S   s   t d t |   td)Nz(----------------------------------------test)r   	to_stringr&   )r(   r   r   r   raiseException!  s   z=test_agg_item_by_item_raise_typeerror.<locals>.raiseExceptionr   r   r   )
r   r   r    r!   integersr$   r%   r&   r#   r'   )r(   r   r   r   r   %test_agg_item_by_item_raise_typeerror  s
   "r   c                  C   sX   t tjdtjdtdddd} | dd dd g}|d	}| }t	|| d S )
Nr   dtypez
2020-01-01)rK   rL   c                 S      | j S r   )yearr3   r   r   r   <lambda>.      z*test_series_agg_multikey.<locals>.<lambda>c                 S   r   r   )rT   r   r   r   r   r   .  r   r@   )
r   r   r   float64r	   r#   r'   r@   rl   rn   )tsr)   rz   r{   r   r   r   test_series_agg_multikey*  s   
r   c               	   C   s   t g dg dg dtjddtjddtjddd} dd }| d	d
g|}| d	d
g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   )dullr   shinyr   r   r   r   r   r   r   r   r      )rY   rZ   r[   r\   EFc                 S   s   t | jjdks
J dS )Nr   r   )rB   valuesbaser   r   r   r   bade  s   z.test_series_agg_multi_pure_python.<locals>.badrY   rZ   c                 S   s   dS )Nr   r   r   r   r   r   r   j  s    z3test_series_agg_multi_pure_python.<locals>.<lambda>)	r   r   r    r!   r"   r#   r'   rl   rm   )rC   r   rz   r{   r   r   r   !test_series_agg_multi_pure_python5  s   /r   c                  C   s   dd } t g dg d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   
percentiledropna)r   r   r   r   P1q  s   z test_agg_consistency.<locals>.P1)r+   r   r.   ra   )r            i  r   r   r   )col1col2r9   r9   r   )	r   r;   r9   r#   r'   r   levelsrl   rm   )r   r(   r   r{   rz   r   r   r   test_agg_consistencyn  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d}|D ]6}|tu s;|tju r=tnd }d}t	j
||d | d|}W d    n1 s[w   Y  t	|| q0d S )Nr+   r   r.   ra   )r   r   c                   @   s   e Zd Zdd ZdS )z$test_agg_callables.<locals>.fn_classc                 S   s   t |S r   r@   )selfr3   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      t | S 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   r   r@   zusing DataFrameGroupBy.sumr   )r   astyper   int64r@   r   r#   r'   FutureWarningrl   assert_produces_warningrm   )r(   r   equiv_callablesr{   ecallwarnr   rz   r   r   r   test_agg_callables  s$   	r   c                  C   s   t dtg dgdtg dgdtg dggddgd} | d}tg d	gtg d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   )r   r   r   category	arraydata)r   )r   F   Z   rg   rM   r   Fnumeric_onlyr@   )	r   r   arrayr#   r   r@   rl   rm   r'   )r(   gbexpected_dataexpected_indexexpected_columnr{   altrz   r   r   r   test_agg_over_numpy_arrays  s    
 r   	as_periodTFc                 C   s&  t dddd}| r|d d}tg d|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_| rttjdtjdgd	d}d|j_t	
|| d S )Nr,   ra   UTC)rK   tzr\   )r   r   r+   r+   r   r   r   r   c                 S   
   | j d S Nr   ilocr   r   r   r   r        
 z6test_agg_tzaware_non_datetime_result.<locals>.<lambda>r   rg   c                 S   s   | j d jS r   )r   r   r   r   r   r   r     s    i  c                 S   s   | j d | j d  S )Nr   r   r   r   r   r   r     r5   r+   )days)r	   tz_localize	to_periodr   r#   r'   r   rM   rh   rl   rn   r   	TimedeltaoffsetsDay)r   dtir(   r   rz   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
 djd }| d	d
 dd jd }| d	d
  jd }| ksEJ | ksKJ | ksQJ dd tddD }td	d
gd |d} | d}| d jd   |dd jd ksJ  |	dd jd ksJ  |
 d jd ksJ d}tjt|d  |dd jd ksJ W d    n1 sw   Y  | d jd   | d jd ksJ d}tjt|d  |dd jd ksJ W d    d S 1 sw   Y  d S )Nz2016-01-01 12:00:00
US/Pacificr   r+   c                    s   g | ]
} t j|d  qS ))minutes)r;   	timedelta)r2   nnr   r   r   r4     s    z0test_agg_timezone_round_trip.<locals>.<listcomp>r   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)r2   ir   r   r   r4     s    r   r   rY   rZ   rY   rZ   z7DataFrameGroupBy.apply operated on the grouping columnsr   c                 S   r   r   r   r   r   r   r   r     r   )r   r+   c                 S   r   )Nr   r   r   r   r   r   r     r   )r   r  r   rw   r#   r'   r   r   nthheadrc   rl   r   DeprecationWarningapplyre   )r(   r   r   result3datesr)   r   r   r  r   test_agg_timezone_round_trip  s6    
"r  c                  C   s   t ddgddgddggtd} | d } tg d	tjd}t dg d
i|td}d|j_| djdd}t	
|| | djdd}|g  }t	
|| d S )Nr+   r   r.   ra   r   rb   r   l    )l            l           l           )l           l           l           )rM   r   r   Fr   T)r   objectr   r   uint64rM   rh   r#   r@   rl   rm   )r(   rM   r{   rz   r   	expected2r   r   r   test_sum_uint64_overflow  s    

r  zstructure, expectedr[   )r+   r+   r+   )r.   ra   ra   ))r+   r+   )r.   ra   c                 C   r   r   tupler   r   r   r   r   $  r   r   c                 C   r   r   rU   r   r   r   r   r   (  r   c                 C   sL   t g dg dg dd}|ddg| }ddg|j_t|| d S )Nr+   r+   r+   r.   r.   r.   r+   r+   r+   ra   ra   ra   r+   r+   r+   r.   ra   ra   r   rY   rZ   )r   r#   rA   rM   namesrl   rm   	structurer{   r(   rz   r   r   r   test_agg_structs_dataframe  s   r  r+   r.   ri   c                 C   r   r   r  r   r   r   r   r   <  r   c                 C   r   r   r  r   r   r   r   r   =  r   c                 C   sH   t g dg dg dd}|dd | }d|j_t|| d S )Nr  r  r  r   rY   r[   )r   r#   rA   rM   rh   rl   rn   r  r   r   r   test_agg_structs_series7  s   r  c                 C   s   g d}t tjg d|dg dd}d}tjt|d |jd| d	jt	j
}W d    n1 s4w   Y  tg d
tjg d|dddd}| rR||dk }t|| d S )Nr}   )r   r   r   )
categories)r+   r   r.   r  zusing SeriesGroupBy.sumr   rY   )observed)r.   r.   r   )r  rh   rZ   ri   r   )r   r   Categoricalrl   r   r   r#   rZ   r'   r   nansumr   CategoricalIndexrn   )r   r  r(   r   rz   r{   r   r   r   test_agg_category_nansumK  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      g | ]}t |qS r   strr1   r   r   r   r4   _  r5   z+test_agg_list_like_func.<locals>.<listcomp>r.   r  rY   F)as_indexsortrZ   c                 S   r   r   r  r   r   r   r   r   a  r   z)test_agg_list_like_func.<locals>.<lambda>c                 S   r%  r   r&  r1   r   r   r   r4   c  r5   c                 S   s   g | ]}t |gqS r   r&  r1   r   r   r   r4   c  s    )r   rw   r#   r'   rl   rm   )r(   r)   rz   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   s  r   z/test_agg_lambda_with_timezone.<locals>.<lambda>rg   r   )r   r   r  r#   r'   r   rl   rm   )r(   rz   r{   r   r   r   test_agg_lambda_with_timezoneh  s   	r-  err_clsc           	         s   ddl m}m}m} | d d }tg dg d||d}t||d |d g} fdd	}|d
 |d |}tj	||dd d S )Nr   )DecimalArray	make_data
to_decimalr   )r   r   r   r+   r+   )r   r+   r   r+   r+   )id1id2decimalsr.   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_funcr4  r2  F)check_names)
$pandas.tests.extension.decimal.arrayr/  r0  r1  r   r   r#   r'   rl   rn   )	r.  r/  r0  r1  rC   r(   r{   r6  rz   r   r5  r   test_groupby_agg_err_catching|  s   r9  )=__doc__r<   r;   	functoolsr   numpyr   r$   pandas.errorsr   pandasr   r   r   r   r   r   r	   r
   pandas._testing_testingrl   pandas.io.formats.printingr   r*   rH   rX   rr   r|   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r  r  r  rU   r  r  r$  r*  r-  NotImplementedErrorRuntimeErrorr   
IndexErrorOSError
ValueErrorArithmeticErrorAttributeErrorr9  r   r   r   r   <module>   s    $	%&/9
&

 $
	