o
    թZh 2                     @   s  d Z ddlZddlZddlmZ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  mZ ejddddd	d
dejdejdgddddg
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ej"fdej#fd	ej$fdej%fdej&fdej'fdej(fd!d"d# fd$d%d# fg	d&d' Z)ejd dej"fdd(d# fd	d)d# fdej'fdej(fgd*d+ Z*d,d- Z+ejd.g d/ejd0ed1ed2gd3d4 Z,ejd5g d6d7d8 Z-ejdg d9d:d; Z.ejd<g d=d>d? Z/ejd@dAdBgejdCg dDejd0ej0g dEdFdGej0g dEdHdGej0g dIdJdGej0g dIdKdGej0g dLdMdGgdNdO Z1dS )Pz
test cython .agg behavior
    N)is_float_dtypeis_integer_dtype)	DataFrameIndexNaTSeries	Timedelta	Timestampbdate_rangeop_namecountsumstdvarsemmeanmedianzignore::RuntimeWarning)Zmarksprodminmaxc           
         s@  ddddddddddt jt jgddgd t jddd	}t|}t j|jdd
ddf< fdd |jdgddd} fdd|D }td|i}d|j	_
 |}t|| |ddg}i }|D ]\\}}}	 |	d ||i |< qgt|jjdd}ddg|j	_d|_
 |d }dv rt|| d S d S )Nr      g      ?AB         r   r   C
   r   c                    s   t |   S N)getattrx)r    a/var/www/html/lang_env/lib/python3.10/site-packages/pandas/tests/groupby/aggregate/test_cython.py<lambda>8       z(test_cythonized_aggers.<locals>.<lambda>)axisc                    s   i | ]\}}| |d  qS )r   r#   ).0catgroup)opr#   r$   
<dictcomp><   s    z*test_cythonized_aggers.<locals>.<dictcomp>T)Zfuture_stack)r   r   )npnanrandomdefault_rngstandard_normalr   locZdropgroupbyindexnametmassert_frame_equal
setdefaultTstacknamesassert_series_equal)
r   datadfgroupedexpresultZexpdZcat1cat2r*   r#   )r+   r   r$   test_cythonized_aggers   s0   
rC   c                  C   s   t tjddddtjdddddd} | dd  }d	}tj	t
|d
 | dd tj}W d    n1 sDw   Y  t|| d S )Nr   r      2   boolabrH   rI   zusing SeriesGroupBy.meanmatch)r   r-   r/   r0   integersastyper3   r   r6   assert_produces_warningFutureWarningaggr<   )framerA   msgexpectedr#   r#   r$   test_cython_agg_booleanP   s   rT   c                  C   s   t tjddddddgd d} d	}tjt|d
 | dd j	dd W d    n1 s3w   Y  t tjddddddgd d} | dg | d j	dd}t g | d 
  g d}t|| d S )Nr   r   rD   rE   foobar   rG   KCannot use numeric_only=True with SeriesGroupBy.mean and non-numeric dtypesrJ   rH   rI   Tnumeric_only)r4   columns)r   r-   r/   r0   rL   pytestraises	TypeErrorr3   r   Zsort_valuesZdrop_duplicatesr6   r7   )rQ   rR   rA   rS   r#   r#   r$   test_cython_agg_nothing_to_agg`   s   ""r_   c                  C   s   t tjddddddgd tjddd	d
d} d}tjt	|d | 
djjdd W d    d S 1 s:w   Y  d S )Nr   r   rD   rE   rU   rV   rW   nowr   )periodsfreq)rH   rI   datesrX   rJ   rI   TrY   )r   r-   r/   r0   rL   pdZ
date_ranger\   r]   r^   r3   rc   r   )rQ   rR   r#   r#   r$   )test_cython_agg_nothing_to_agg_with_datest   s   
"re   c                  C   s   t g dg dd} d}tjt|d | jddd  W d    n1 s(w   Y  tjt|d | jddd  W d    n1 sHw   Y  tjt|d | jddd  W d    n1 shw   Y  tjt|d | jddd  W d    d S 1 sw   Y  d S )	N)r   r      )rf      rD   )r"   yz+DataFrame.groupby with axis=1 is deprecatedrJ   r   r[   )levelr'   )r   r6   rN   rO   r3   r   )r>   rR   r#   r#   r$   test_cython_agg_frame_columns   s   "rj   c                  C   s   t g dg dtjddtjddd} | dd dd	 }td
d
d
dddd
dgtddgdddd}t	
|| d S )N)rU   rV   rU   rV   rU   rV   rU   rU   )onerk   twothreerl   rl   rk   rm   r      )r   r   r   Dr   r   c                 S   s   |    S r   )Zvalue_countsto_dictr!   r#   r#   r$   r%      r&   z-test_cython_agg_return_dict.<locals>.<lambda>r   )rl   rk   rm   rV   rU   r5   )r4   r5   )r   r-   r/   r0   r1   r3   rP   r   r   r6   r<   )r>   tsrS   r#   r#   r$   test_cython_agg_return_dict   s   	rs   c                  C   s   t ddd} tg dd | d}|dd }| }d	}tjt|d
 |tj}W d    n1 s5w   Y  t	|| d S )Nz1/1/2000rE   )ra   )r   r   r   ro   Er   r4   c                 S   s   | j S r   )monthr!   r#   r#   r$   r%      s    z&test_cython_fail_agg.<locals>.<lambda>zusing SeriesGroupBy.sumrJ   )
r
   r   r3   r   r6   rN   rO   rP   r-   r<   )Zdrrr   r?   ZsummedrR   rS   r#   r#   r$   test_cython_fail_agg   s   rw   z
op, targopfirstc                 C   
   | j d S Nr   Zilocr!   r#   r#   r$   r%         
 r%   lastc                 C   ry   )Nr{   r!   r#   r#   r$   r%      r|   c                 C   s   t tjdd}tjdjddddt}||j	| d dd}|t
jv r,tnd }d|  }tj||d	 |||}W d    n1 sMw   Y  t|| d S )
Nr   i  r   rE   )sizeTZaltrZ   zusing DataFrameGroupBy.rJ   )r   r-   r/   r0   r1   rL   rM   floatr3   _cython_agg_generalcomZ_cython_tablerO   r6   rN   rP   r7   )r+   targopr>   labelsrA   warnrR   rS   r#   r#   r$   test__cython_agg_general   s   
r   c                 C   s   t | dkrt| S tjS rz   )lenr-   r   r.   r!   r#   r#   r$   r%      s    c                 C   s   t j| ddS )Nr   )Zddof)r-   r   r!   r#   r#   r$   r%      s    c                    s~   t g d}tddd}|jt|d ||d}|j| d dd}|jt|d ||d}| fdd	}t|| d S )
N   r      r   7   rD   observedTr   c                    s    | S r   r#   r!   r   r#   r$   r%      s    z/test_cython_agg_empty_buckets.<locals>.<lambda>)	r   ranger3   rd   cutr   rP   r6   r7   )r+   r   r   r>   grpsgrA   rS   r#   r   r$   test_cython_agg_empty_buckets   s   r   c                 C   s   t g ddgd}tjdddtd}|jt|d || djd	d d
d}tjdddd}t dg ditj	|dd
dd}| rF||j
dk }t|| |jt|d || djdd d
d}t dg ditj	|dd
dd}| rx||j
dk }t|| d S )Nr   rH   )r[   r   rW   rD   dtyper   r   Tr      )rb   )r   r   $   r   )r5   Zorderedru   r   )r   r   i  r   r   )r   r-   Zarangeintr3   rd   r   r   Zinterval_rangeZCategoricalIndexrH   r6   r7   )r   r>   r   rA   Z	intervalsrS   r#   r#   r$   $test_cython_agg_empty_buckets_nanops   s.   

r   r+   )rx   r}   r   r   r=   z2016-10-14 21:00:44.557z17088 days 21:00:44.557c                 C   sZ   t ddg|tgd}tddgdd}t d|tgi|d}|d| }t|| d S )Nr   r   rG   rH   rq   rI   ru   )r   r   r   r3   	aggregater6   r7   )r+   r=   r>   r4   rS   rA   r#   r#   r$   "test_cython_with_timestamp_and_nat  s
   r   rP   )r   r   r   r   r   r   r   r   ZohlcZcumprodZcumsumshiftanyallZquantilerx   r}   ZrankZcumminZcummaxc                 C   sf   t g dg dd}d|jjd j_|dgd| i}| dgd| i}t	|| d S )N)gffffff@g@g@gffffff@g      @)setosar   r   r   r   )sepal_lengthspeciesFr   r   r   )
r   Z_mgrZarraysflagsZ	writeabler3   rP   copyr6   Zassert_equal)rP   r>   rA   rS   r#   r#   r$    test_read_only_buffer_source_agg  s   r   )
r   r   r   r   r   r   r   r   r   r   c                 C   s   t ddgd tjddddddd	d
dtjg
ddd}t|dd |  }|j|d dd}t|dd |  }| dv rCd}nd}|j|d}t	
|| d S )Nr   r   rD   r   r   rf   rg   r      rn   	   Int64r   )r   r   Zfloat64)r   )r   r   FT)convert_integer)r   rd   arrayNAr    r3   ZassignrM   Zconvert_dtypesr6   r<   )r   r>   rA   Zdf2rS   r   r#   r#   r$   test_cython_agg_nullable_int>  s   
"r   r   )r   Float64booleanc                 C   st   t ddgtjdtjg| dtjddg| dd}|d }t ddggtdgddddgd	d
}t|| d S )Nr   r   r   r   r   rq   r   r   r   )r4   r[   r   )	r   rd   r   r   r3   r   r   r6   r7   )r   r>   rA   rS   r#   r#   r$   &test_count_masked_returns_masked_dtypea  s   r   with_naTFzop_name, action)	)r   	large_int)r   always_float)r   r   )r   r   )r   r   )r   preserve)r   r   )rx   r   )r}   r   )r   r   rf   rg   r   r   ZInt8)g?g?g333333?g?ZFloat32r   )TTFFr   c                 C   s  |rt j| d< tg d| d}|d}|dkrt  }n4|dkr9t| jr+| j}n't| jr4| j}nt  }n|dkrKt| jrF| j}nt  }n|dkrR| j}t	|| }|d	 j|ksaJ |
|}|d	 j|ksoJ t	|d	 | }|j|ks~J |d	 
|}|j|ksJ d S )
Nrf   )rH   rH   rI   rI   )keycolr   Z
always_intr   r   r   r   )rd   r   r   r3   Z
Int64Dtyper   r   r   ZFloat64Dtyper    r   )r=   r   actionr   r>   r?   Zexpected_dtyperA   r#   r#   r$   test_cython_agg_EA_known_dtypesq  s4   








r   )2__doc__numpyr-   r\   Zpandas.core.dtypes.commonr   r   Zpandasrd   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr6   Zpandas.core.commoncorecommonr   markZparametrizeparamfilterwarningsrC   rT   r_   re   rj   rs   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   <module>   s    $	
!






!



