o
    �¨Êhï2  ã                   @   sÜ  d dl Zd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ ejjZdd„ Zdd„ Zej d¡ej d	d
dg¡ej dddg¡ej dd
dg¡dd„ ƒƒƒƒZej d¡ej d	d
dg¡ej dddg¡dd„ ƒƒƒZdd„ Zej ddddgiddidddgddœideddd�ig¡dd „ ƒZej d!dd"d#„ idfejdd$d#„ d%d#„ giddgejjd&d'�d(�g¡d)d*„ ƒZej ddddgiddiddd+œg¡d,d-„ ƒZejjej d.e	g d/¢ƒdddgife	g d/¢ƒddifeg d/¢g d0¢dœdd1gd2�dddgifeg d/¢g d0¢dœdd1gd2�ddifeg d/¢g d0¢dœdd1gd2�dddgddœifeg d/¢g d0¢dœdd1gd2�d3eddd�ifg¡d4d5„ ƒƒZd6d7„ Zd8d9„ Zd:d;„ Z ej d¡d<d=„ ƒZ!d>d?„ Z"d@dA„ Z#dBdC„ Z$dS )Dé    N)ÚNumbaUtilError)Ú	DataFrameÚIndexÚNamedAggÚSeriesÚoption_contextc                  C   s¾   t  d¡ dd„ } tg d¢g d¢dœddgd	�}t jtd
d�� | d¡j| dd� W d   ƒ n1 s4w   Y  t jtd
d�� | d¡d j| dd� W d   ƒ d S 1 sXw   Y  d S )NÚnumbac                 S   ó   t | ƒd S ©Ngš™™™™™@©Úsum©Úx© r   ú[/var/www/html/env/lib/python3.10/site-packages/pandas/tests/groupby/aggregate/test_numba.pyÚincorrect_function   ó   z;test_correct_function_signature.<locals>.incorrect_function©Úar   Úbr   r   ©ç      ð?ç       @g      @g      @g      @©ÚkeyÚdatar   r   ©ÚcolumnszThe first 2©Úmatch©Úengine©ÚpytestÚimportorskipr   Úraisesr   ÚgroupbyÚagg©r   r   r   r   r   Útest_correct_function_signature   s   
þÿ"ÿr)   c                  C   sÂ   t  d¡ dd„ } tg d¢g d¢dœddgd	�}t jtd
d�� | d¡j| ddd� W d   ƒ n1 s5w   Y  t jtd
d�� | d¡d j| ddd� W d   ƒ d S 1 sZw   Y  d S )Nr   c                 S   r	   r
   r   ©ÚvaluesÚindexr   r   r   r   &   r   z6test_check_nopython_kwargs.<locals>.incorrect_functionr   r   r   r   r   r   znumba does not supportr   é   )r!   r   r"   r(   r   r   r   Útest_check_nopython_kwargs#   s   
þÿ"ÿr.   ÚignoreÚjitTFÚ
pandas_objr   r   Úas_indexc                 C   s¢   t  d¡ dd„ }| rdd l}| |¡}tg d¢g d¢dœddgd	�}|||d
œ}	|jd|d�}
|dkr8|
d }
|
j|d|	d�}|
jdd„ dd�}t ||¡ d S )Nr   c                 S   ó   t  | ¡d S r
   ©ÚnpÚmeanr*   r   r   r   Ú
func_numba<   ó   z(test_numba_vs_cython.<locals>.func_numbar   r   r   ©r   r-   r-   r   ©ÚnogilÚparallelÚnopython)r2   r   ©r!   Úengine_kwargsc                 S   r3   r
   r4   r   r   r   r   Ú<lambda>N   ó    z&test_numba_vs_cython.<locals>.<lambda>Úcythonr    ©	r#   r$   r   r0   r   r&   r'   ÚtmÚassert_equal)r0   r1   r;   r<   r=   r2   r7   r   r   r?   ÚgroupedÚresultÚexpectedr   r   r   Útest_numba_vs_cython4   s   

ÿrI   c                 C   s  t  d¡ dd„ }dd„ }| rdd l}| |¡}| |¡}tg d¢g d¢d	œdd
gd�}|||dœ}	| d¡}
|dkr?|
d
 }
|
j|d|	d�}|
jdd„ dd�}t ||¡ |
j|d|	d�}|
jdd„ dd�}t ||¡ |
j|d|	d�}|
jdd„ dd�}t ||¡ d S )Nr   c                 S   ó   t  | ¡d S ©Ng333333@r4   r*   r   r   r   Úfunc_1[   r8   ztest_cache.<locals>.func_1c                 S   r3   r
   r4   r*   r   r   r   Úfunc_2^   r8   ztest_cache.<locals>.func_2r   r   r   r9   r-   r   r:   r   r>   c                 S   rJ   rK   r4   r   r   r   r   r@   p   rA   ztest_cache.<locals>.<lambda>rB   r    c                 S   r3   r
   r4   r   r   r   r   r@   u   rA   c                 S   rJ   rK   r4   r   r   r   r   r@   z   rA   rC   )r0   r1   r;   r<   r=   rL   rM   r   r   r?   rF   rG   rH   r   r   r   Ú
test_cacheS   s.   


ÿ
rN   c                  C   s�   t  d¡ dd„ } tg d¢g d¢dœddgd	�}| d¡}|j| dd
�}tddƒ� |j| d d
�}W d   ƒ n1 s;w   Y  t ||¡ d S )Nr   c                 S   rJ   rK   r4   r*   r   r   r   rL   �   r8   z&test_use_global_config.<locals>.func_1r   r   r9   r   r-   r   r    zcompute.use_numbaT)r#   r$   r   r&   r'   r   rD   Úassert_frame_equal)rL   r   rF   rH   rG   r   r   r   Útest_use_global_config~   s   
ÿ
ÿrP   Ú
agg_kwargsÚfuncÚminÚmaxr   )r-   é   Úbminr-   )ÚcolumnÚaggfuncc                 C   sx   t  d¡ tg d¢g d¢g d¢dœg d¢d�}| d¡}|jd
i | ¤ddi¤Ž}|jd
i | ¤dd	i¤Ž}t ||¡ d S )Nr   r   r   ©r-   rU   é   é   é   ©r   r-   rU   r   r   r!   rB   r   ©r#   r$   r   r&   r'   rD   rO   )rQ   r   rF   rG   rH   r   r   r   Ú$test_multifunc_numba_vs_cython_frameŽ   s   

ýú
r_   zagg_kwargs,expected_funcc                 C   ó   |   ¡ S ©Nr   r*   r   r   r   r@   ª   ó    r@   c                 C   r`   ra   r   r*   r   r   r   r@   ¯   rb   c                 C   r`   ra   ©rS   r*   r   r   r   r@   °   rb   z2This doesn't work yet! Fails in nopython pipeline!)Úreason)Úmarksc                 C   sr   t  d¡ tg d¢g d¢g d¢dœg d¢d�}| d¡}|jdi | ¤ddi¤Ž}|j|d	d
�}tj||dd� d S )Nr   r   r   rY   r]   r   r   r!   rB   r    F)Úcheck_dtyper   r^   )rQ   Úexpected_funcr   rF   rG   rH   r   r   r   Útest_multifunc_numba_udf_frame§   s   
ýú
rh   )Úmin_valÚmax_valc                 C   s‚   t  d¡ g d¢}tg d¢ƒ}| |¡}d| d< |jdi | ¤Ž}d| d< |jdi | ¤Ž}t|tƒr9t ||¡ d S t 	||¡ d S )Nr   r   r   r!   rB   r   )
r#   r$   r   r&   r'   Ú
isinstancer   rD   rO   Úassert_series_equal)rQ   Úlabelsr   rF   rG   rH   r   r   r   Ú%test_multifunc_numba_vs_cython_seriesÌ   s   


rn   zdata,agg_kwargsr   rY   rU   r   Úmin_colc                 C   s|   t  d¡ g d¢}|  |¡}|jdi |¤dddidœ¤Ž}|jdi |¤ddi¤Ž}t|tƒr6t ||¡ d S t ||¡ d S )Nr   r   r<   Tr>   r!   r   )	r#   r$   r&   r'   rk   r   rD   rO   rl   )r   rQ   rm   rF   rG   rH   r   r   r   Ú&test_multifunc_numba_kwarg_propagationß   s   
!

rp   c                  C   s²   t  d¡ dd„ } tg d¢g d¢dœƒ}| d¡d }|j| d	dd
�}tdgd dtdd	gdd�d�}t ||¡ |j| ddd
�}tdgd dtdd	gdd�d�}t ||¡ d S )Nr   c                 S   s   | | d …   ¡ S ra   r   )r+   r,   Únr   r   r   Úsum_last  s   z&test_args_not_cached.<locals>.sum_last)r   r   r-   r-   )r-   r-   r-   r-   )Úidr   rs   r   r-   r    r   rU   r   ©Úname)ru   r,   r   )	r#   r$   r   r&   r'   r   r   rD   rl   )rr   ÚdfÚ	grouped_xrG   rH   r   r   r   Útest_args_not_cached  s   
  rx   c                  C   st   t  d¡ dd„ } tg d¢g d¢dœg d¢d�}| d	¡j| dd
�}tddgdgtddgd	d�d�}t ||¡ d S )Nr   c                 S   s
   t  |¡S ra   r4   r*   r   r   r   Úf!  s   
z+test_index_data_correctly_passed.<locals>.f)ÚArz   ÚB)r[   r\   é   )ÚgroupÚv)éÿÿÿÿéþÿÿÿéýÿÿÿ)r,   r}   r    g      ø¿g      Àr~   rz   r{   rt   )r   r,   )r#   r$   r   r&   Ú	aggregater   rD   rO   )ry   rv   rG   rH   r   r   r   Ú test_index_data_correctly_passed  s   
ÿrƒ   c                     s¾   t  d¡ d‰ d‰d‰‡ ‡‡fdd„} ˆˆ ˆdœ}tdg d¢iƒ}|jd	d
�j| d|d�}tdg d¢iƒ}t ||¡ d‰ ˆˆ ˆdœ}|jd	d
�j| d|d�}tdg d¢iƒ}t ||¡ d S )Nr   TFc                    s   ˆ ˆ ˆ S ra   r   r*   ©r;   r=   r<   r   r   Úfunc_kwargs4  r   z2test_engine_kwargs_not_cached.<locals>.func_kwargs©r=   r;   r<   Úvalue)r   r   r   r   )Úlevelr>   )r   r   r   )r   r   r   )r#   r$   r   r&   r‚   rD   rO   )r…   r?   rv   rG   rH   r   r„   r   Útest_engine_kwargs_not_cached,  s&   
ÿÿr‰   c                 C   s|   t  d¡ dd„ }tddddœgƒ dd	g¡}|| |d
œ}| d¡j|d|d�}tdgtdgdd�dgd�}t ||¡ d S )Nr   c                 S   ó   dS ©Nr-   r   r*   r   r   r   Ú
numba_funcL  ó   z+test_multiindex_one_key.<locals>.numba_funcr-   rU   rZ   ©rz   r{   ÚCrz   r{   r†   r>   r   rt   r�   )r,   r   )	r#   r$   r   Ú	set_indexr&   r'   r   rD   rO   )r;   r<   r=   rŒ   rv   r?   rG   rH   r   r   r   Útest_multiindex_one_keyH  s   

ÿr‘   c                 C   sˆ   t  d¡ dd„ }tddddœgƒ dd	g¡}|| |d
œ}t jtdd�� | dd	g¡j|d|d� W d   ƒ d S 1 s=w   Y  d S )Nr   c                 S   rŠ   r‹   r   r*   r   r   r   rŒ   [  r�   z;test_multiindex_multi_key_not_supported.<locals>.numba_funcr-   rU   rZ   rŽ   rz   r{   r†   zmore than 1 grouping labelsr   r>   )r#   r$   r   r�   r%   ÚNotImplementedErrorr&   r'   )r;   r<   r=   rŒ   rv   r?   r   r   r   Ú'test_multiindex_multi_key_not_supportedX  s   
ÿ"ÿr“   c           	      C   sÎ   t  d¡ | \}}tg d¢g d¢tj d¡ d¡tj d¡ d¡dœƒ}| ddg¡}|j|fd	di|¤Ž}|j|fd	d
i|¤Ž}t	 
||¡ t||ƒdd	di|¤Ž}t||ƒdd	d
i|¤Ž}t	 
||¡ d S )Nr   ©ÚfooÚbarr•   r–   r•   r–   r•   r•   ©Úoner˜   ÚtwoÚthreer™   r™   r˜   rš   rU   é   ©rz   r{   r�   ÚDrz   r{   r!   rB   r   )r#   r$   r   r5   ÚrandomÚdefault_rngÚstandard_normalr&   r'   rD   rO   Úgetattr)	Únumba_supported_reductionsÚ	reductionÚkwargsrv   ÚgbÚres_aggÚexpected_aggÚ
direct_resÚdirect_expectedr   r   r   Útest_multilabel_numba_vs_cythonf  s    
üÿrª   c                  C   s‚   t  d¡ tg d¢g d¢tj d¡ d¡tj d¡ d¡dœƒ} |  ddg¡}|jd	d
„ dd�}|jdd
„ dd�}t	 
||¡ d S )Nr   r”   r—   rU   r›   rœ   rz   r{   c                 S   r`   ra   rc   r*   r   r   r   r@   †  rb   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>r    c                 S   r`   ra   rc   r   r   r   r   r@   ‡  rb   rB   )r#   r$   r   r5   rž   rŸ   r    r&   r'   rD   rO   )rv   r¥   rG   rH   r   r   r   Ú#test_multilabel_udf_numba_vs_cython{  s   
üÿr«   )%Únumpyr5   r#   Úpandas.errorsr   Úpandasr   r   r   r   r   Úpandas._testingÚ_testingrD   ÚmarkÚ
single_cpuÚ
pytestmarkr)   r.   ÚfilterwarningsÚparametrizerI   rN   rP   r_   ÚparamÚxfailrh   rn   rp   rx   rƒ   r‰   r‘   r“   rª   r«   r   r   r   r   Ú<module>   sª    

'
üþ
	þÿÿøýþ
þ
ÿ
üÿüÿüÿüëþ

