o
    d@,                     @   sl  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 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<d=d>gejd?g d@ejd0ej+g dAdBdCej+g dAdDdCej+g dEdFdCej+g dEdGdCej+g dHdIdCgdJdK Z,dS )Lz
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}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 |< qdt|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    ^/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/groupby/aggregate/test_cython.py<lambda>7       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>F)Zdropna)r   r   )npnanrandomrandnr   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   

rA   c                  C   sd   t tjdddtjddddd} | dd  }| dd tj}t	|| d S )	Nr      2   r   boolabrF   rG   )
r   r,   r.   randintastyper1   r   aggr4   r:   )framer?   expectedr"   r"   r#   test_cython_agg_booleanO   s   rM   c                  C   s   t tjdddddgd d} d}tjt|d	 | d
d jdd W d    n1 s0w   Y  t tjdddddgd d} | dg | d
 jdd}t g | d
 	 
 g d}t|| d S )Nr   rB   rC   foobar   rE   KCannot use numeric_only=True with SeriesGroupBy.mean and non-numeric dtypesmatchrF   rG   Tnumeric_only)r2   columns)r   r,   r.   rH   pytestraises	TypeErrorr1   r   Zsort_valuesZdrop_duplicatesr4   r5   )rK   msgr?   rL   r"   r"   r#   test_cython_agg_nothing_to_agg\   s   ""r[   c                  C   s|   t tj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 s7w   Y  d S )Nr   rB   rC   rN   rO   rP   nowr7   )periodsfreq)rF   rG   datesrQ   rR   rG   TrT   )r   r,   r.   rH   pdZ
date_rangerW   rX   rY   r1   r_   r   )rK   rZ   r"   r"   r#   )test_cython_agg_nothing_to_agg_with_datesl   s   
"ra   c                  C   sb   t g dg dd} | jddd  | jddd  | jddd  | jddd  d S )N)r   r      )rb      rB   )r!   yr   rV   )levelr&   )r   r1   r   )r<   r"   r"   r#   test_cython_agg_frame_columnsy   s
   rf   c                  C   s   t g dg dtjdtj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)rN   rO   rN   rO   rN   rO   rN   rN   )onerg   twothreerh   rh   rg   ri      )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   )rh   rg   ri   r   rO   rN   r3   )r2   r3   )
r   r,   r.   r/   r1   rJ   r   r   r4   r:   )r<   tsrL   r"   r"   r#   test_cython_agg_return_dict   s   

	ro   c                  C   sR   t ddd} tg dd | d}|dd }| }|tj}t|| d S )	Nz1/1/2000rC   )r]   )r   r   r   rk   Er   r2   c                 S   s   | j S r   )monthr    r"   r"   r#   r$      s    z&test_cython_fail_agg.<locals>.<lambda>)r
   r   r1   r   rJ   r,   r4   r:   )Zdrrn   r=   ZsummedrL   r"   r"   r#   test_cython_fail_agg   s   rs   z
op, targopfirstc                 C   
   | j d S Nr   Zilocr    r"   r"   r#   r$         
 r$   lastc                 C   ru   )Nrw   r    r"   r"   r#   r$      rx   c                 C   s^   t tjd}tjjddddt}||j| d dd}||	|}t
|| d S )Ni  r   rC   )sizeTZaltrU   )r   r,   r.   r/   rH   rI   floatr1   _cython_agg_generalrJ   r4   r5   )r*   targopr<   labelsr?   rL   r"   r"   r#   test__cython_agg_general   s
   r   c                 C   s   t | dkrt| S tjS rv   )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   rB   observedTr|   c                    s    | S r   r"   r    r   r"   r#   r$      s    z/test_cython_agg_empty_buckets.<locals>.<lambda>)	r   ranger1   r`   cutr~   rJ   r4   r5   )r*   r   r   r<   grpsgr?   rL   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j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}| rG||j
dk }t|| |jt|d || djdd d
d}t dg ditj	|dd
dd}| ry||j
dk }t|| d S )Nr   rF   )rV   r   rP   rB   dtyper   r   Tr|      )r^   )r   r   $   r   )r3   Zorderedrq   r   )r   r   i  r   r   )r   r,   Zarangeint_r1   r`   r   r~   Zinterval_rangeZCategoricalIndexrF   r4   r5   )r   r<   r   r?   Z	intervalsrL   r"   r"   r#   $test_cython_agg_empty_buckets_nanops   s.   

r   r*   )rt   ry   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   rE   rF   rm   rG   rq   )r   r   r   r1   	aggregater4   r5   )r*   r;   r<   r2   rL   r?   r"   r"   r#   "test_cython_with_timestamp_and_nat   s
   r   rJ   )r   r   r   r   r   r   r   r   ZohlcZcumprodZcumsumshiftanyallZquantilert   ry   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	writeabler1   rJ   copyr4   Zassert_equal)rJ   r<   r?   rL   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krE|d}t	|| d S )Nr   r   rB   r   r   rb   rc   r      rj   	   Int64r   )r   r   Zfloat64)r   r   )
r   r`   arrayNAr   r1   ZassignrI   r4   r:   )r   r<   r?   Zdf2rL   r"   r"   r#   test_cython_agg_nullable_int*  s   
"
r   with_naTFzop_name, action)	)r   	large_int)r   always_float)r   r   )r   r   )r   r   )r   preserve)r   r   )rt   r   )ry   r   )r   r   rb   rc   r   r   ZInt8)g?g?g333333?g?ZFloat32ZFloat64)TTFFbooleanc                 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 )
Nrb   )rF   rF   rG   rG   )keycolr   Z
always_intr   r   r   r   )r`   r   r   r1   Z
Int64Dtyper   r   r   ZFloat64Dtyper   r   )r;   r   actionr   r<   r=   Zexpected_dtyper?   r"   r"   r#   test_cython_agg_EA_known_dtypesM  s4   








r   )-__doc__numpyr,   rW   Zpandas.core.dtypes.commonr   r   Zpandasr`   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr4   markZparametrizeparamfilterwarningsrA   rM   r[   ra   rf   ro   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s    $	
!




	



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