o
    ŀg2                     @   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/myenv/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    

'

	




