U
    ¾mœd@,  ã                   @   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 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.d!d$ddg¡ej d/ed0ƒed1ƒg¡d2d3„ ƒƒZ(ej d4dddddd	ddd5d6d7d8d9d:d;d!d$d<d=d>g¡d?d@„ ƒZ)ej ddddd	d
dddddg
¡dAdB„ ƒZ*ej dCdDdEg¡ej dFdGdHdIdJdKdLdMdNdOg	¡ej d/ej+dPdQdRdSgdTdU�ej+dPdQdRdSgdVdU�ej+dWdXdYdZgd[dU�ej+dWdXdYdZgd\dU�ej+dDdDdEdEgd]dU�g¡d^d_„ ƒƒƒZ,dS )`z
test cython .agg behavior
é    N)Úis_float_dtypeÚis_integer_dtype)Ú	DataFrameÚIndexÚNaTÚSeriesÚ	TimedeltaÚ	TimestampÚbdate_rangeÚop_nameÚcountÚsumZstdÚvarZsemÚmeanÚmedianzignore::RuntimeWarning)ZmarksÚprodÚminÚmaxc           
         s8  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 ¡|< qÈt|ƒjjdd�}ddg|j_d|_	ˆ |ƒd }ˆdk�r4t
 ||¡ d S )Nr   é   g      ð?ÚAÚBé   é   )r   r   ÚCé   é
   r   c                    s   t | ˆ ƒƒ S ©N)Úgetattr©Úx)r   © úc/home/sam/Atlas/atlas_env/lib/python3.8/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   s.    

ý
r?   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ÚbrD   rE   )
r   r*   r,   ÚrandintÚastyper/   r   Úaggr2   r8   )Úframer=   Úexpectedr    r    r!   Útest_cython_agg_booleanO   s    þÿrK   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 5 Q R X 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   r@   rA   ÚfooÚbaré   rC   úKCannot use numeric_only=True with SeriesGroupBy.mean and non-numeric dtypes©ÚmatchrD   rE   T©Únumeric_only)r0   Úcolumns)r   r*   r,   rF   ÚpytestÚraisesÚ	TypeErrorr/   r   Zsort_valuesZdrop_duplicatesr2   r3   )rI   Úmsgr=   rJ   r    r    r!   Útest_cython_agg_nothing_to_agg\   s    " "  ÿrY   c               	   C   sf   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 5 Q R X d S )Nr   r@   rA   rL   rM   rN   Únowr5   )ÚperiodsÚfreq)rD   rE   ÚdatesrO   rP   rE   TrR   )r   r*   r,   rF   ÚpdZ
date_rangerU   rV   rW   r/   r]   r   )rI   rX   r    r    r!   Ú)test_cython_agg_nothing_to_agg_with_datesl   s    
ýÿr_   c                  C   sf   t dddgdddgdœƒ} | jddd	� ¡  | jddd	� ¡  | jddd	� ¡  | jddd	� ¡  d S )
Nr   r   é   é   r@   )r   Úyr   rT   )Úlevelr$   )r   r/   r   )r:   r    r    r!   Útest_cython_agg_frame_columnsy   s
    rd   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¡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 )NrL   rM   ÚoneÚtwoÚthreeé   )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   )rf   re   rg   r   ©r1   )r0   r1   )
r   r*   r,   r-   r/   rH   r   r   r2   r8   )r:   ÚtsrJ   r    r    r!   Útest_cython_agg_return_dictƒ   s    

üÿ	ýrm   c                  C   sX   t ddd�} tdddddgd	 | d
�}| dd„ ¡}| ¡ }| tj¡}t ||¡ d S )Nz1/1/2000rA   )r[   r   r   r   ri   ÚEr   ©r0   c                 S   s   | j S r   )Úmonthr   r    r    r!   r"   ›   r#   z&test_cython_fail_agg.<locals>.<lambda>)r
   r   r/   r   rH   r*   r2   r8   )Zdrrl   r;   ZsummedrJ   r    r    r!   Útest_cython_fail_agg—   s    rq   z
op, targopÚfirstc                 C   s
   | j d S ©Nr   ©Zilocr   r    r    r!   r"   «   r#   r"   Úlastc                 C   s
   | j d S )Néÿÿÿÿrt   r   r    r    r!   r"   ¬   r#   c                 C   s^   t tj d¡ƒ}tjjdddd� t¡}| |¡j| d dd�}| |¡ 	|¡}t
 ||¡ d S )Niè  r   rA   )ÚsizeT©ZaltrS   )r   r*   r,   r-   rF   rG   Úfloatr/   Ú_cython_agg_generalrH   r2   r3   )r(   Útargopr:   Úlabelsr=   rJ   r    r    r!   Útest__cython_agg_general¡   s
    r}   c                 C   s   t | ƒdkrt | ¡S tjS rs   )Úlenr*   r   r+   r   r    r    r!   r"   ¼   r#   c                 C   s   t j| dd�S )Nr   )Zddof)r*   r   r   r    r    r!   r"   ½   r#   c                    s€   t dddgƒ}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   r@   ©ÚobservedTrx   c                    s   ˆ | ƒS r   r    r   ©r{   r    r!   r"   Ì   r#   z/test_cython_agg_empty_buckets.<locals>.<lambda>)	r   Úranger/   r^   Úcutrz   rH   r2   r3   )r(   r{   rƒ   r:   ÚgrpsÚgr=   rJ   r    r„   r!   Útest_cython_agg_empty_buckets¸   s    r‰   c                 C   s  t dddg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ddddgitj	|ddd�d�}| r”||j
dk }t ||¡ |jt |d |¡| d
�jdd dd�}t dddddgitj	|ddd�d�}| rü||j
dk }t ||¡ d S )Nr   r   r€   rD   )rT   r   rN   r@   ©Údtyper‚   r   Trx   é   )r\   é$   )r1   Zorderedro   r   r   i´  )r   r*   ZarangeÚint_r/   r^   r†   rz   Zinterval_rangeZCategoricalIndexrD   r2   r3   )rƒ   r:   r‡   r=   Z	intervalsrJ   r    r    r!   Ú$test_cython_agg_empty_buckets_nanopsÐ   s6      ÿþ  ÿþr�   r(   r9   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   rC   rD   rk   rE   ro   )r   r   r   r/   Ú	aggregater2   r3   )r(   r9   r:   r0   rJ   r=   r    r    r!   Ú"test_cython_with_timestamp_and_natñ   s
    r‘   rH   ZohlcZcumprodZcumsumÚshiftÚanyÚallZquantileZrankZcumminZcummaxc                 C   sr   t dddddgdddddgdœƒ}d|jjd	 j_| d
g¡ d| i¡}| ¡  d
g¡ d| i¡}t 	||¡ d S )Ngffffff@gš™™™™™@gÍÌÌÌÌÌ@gffffff@g      @Zsetosa)Úsepal_lengthÚspeciesFr   r–   r•   )
r   Z_mgrZarraysÚflagsZ	writeabler/   rH   Úcopyr2   Zassert_equal)rH   r:   r=   rJ   r    r    r!   Ú test_read_only_buffer_source_agg  s    þÿ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rŠ| d¡}t 	||¡ d S )Nr   r   r@   r   r   r`   ra   r   é   rh   é	   ÚInt64rŠ   )r   r   Zfloat64)r   r   )
r   r^   ÚarrayÚNAr   r/   ZassignrG   r2   r8   )r   r:   r=   Zdf2rJ   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£   )rr   r£   )ru   r£   r   r   r`   ra   rœ   rŠ   ZInt8gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?ZFloat32ZFloat64Úbooleanc                 C   s$  |rt j| d< tddddg| dœƒ}| d¡}|dkr@t  ¡ }nh|dkrvt| jƒrZ| j}q¨t| jƒrl| j}q¨t  ¡ }n2|dkršt| jƒr�| j}q¨t  ¡ }n|d	kr¨| j}t	||ƒƒ }|d
 j|ksÆt
‚| |¡}|d
 j|ksât
‚t	|d
 |ƒƒ }|j|k�st
‚|d
  |¡}|j|k�s t
‚d S )Nr`   rD   rE   )ÚkeyÚcolr¥   Z
always_intr¡   r¢   r£   r¦   )r^   rž   r   r/   Z
Int64Dtyper   r‹   r   ZFloat64Dtyper   ÚAssertionErrorr�   )r9   r   Úactionr    r:   r;   Zexpected_dtyper=   r    r    r!   Útest_cython_agg_EA_known_dtypesM  s4    








r©   )-Ú__doc__Únumpyr*   rU   Zpandas.core.dtypes.commonr   r   Zpandasr^   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr2   ÚmarkZparametrizeÚparamÚfilterwarningsr?   rK   rY   r_   rd   rm   rq   r   r   r   r   r   r   r   r}   r‰   r�   r‘   r™   rŸ   r�   r©   r    r    r    r!   Ú<module>   sú   $	üñþ
!



÷þ
	

ûþ

! ÿìþ
öþ
ôþûþ
