o
    d                     @   s  d dl Zd dlZd dlmZ d dlm  mZ d dl	m
Z
mZmZmZmZ d dlmZ eddd Zeddd Zed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dejd	ejd
ddgejdddgdd Zeddd Zedejdddgdddgddedddgdd Zedd d! Zedd"d# Zedd$d% Zedejd	d&d' Zedd(d) Z dS )*    N)NumbaUtilError)	DataFrameIndexNamedAggSeriesoption_contextnumbac                  C   s   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 s/w   Y  tjtd	d
 |dd j| dd W d    d S 1 sSw   Y  d S )Nc                 S      t | d S Ng@sumx r   ]/app/.heroku/python/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matchr   enginer   pytestraisesr   groupbyaggr   r   r   r   r   test_correct_function_signature   s   "r(   c                  C   s   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 s0w   Y  tjtd	d
 |dd j| ddd W d    d S 1 sUw   Y  d S )Nc                 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   r   test_check_nopython_kwargs!   s   "r-   ignorejitTF
pandas_objr   r   as_indexc                 C   s   dd }| rdd l }||}tg dg ddddgd}|||d	}	|jd|d
}
|dkr3|
d }
|
j|d|	d}|
jdd dd}t|| d S )Nc                 S      t | d S r
   npmeanr)   r   r   r   
func_numba8      z(test_numba_vs_cython.<locals>.func_numbar   r   r   r   r,   r,   r   nogilparallelnopython)r1   r   r   r!   engine_kwargsc                 S   r2   r
   r3   r   r   r   r   <lambda>J       z&test_numba_vs_cython.<locals>.<lambda>cythonr    r   r/   r   r%   r&   tmZassert_equal)r/   r0   r:   r;   r<   r1   r6   r   r   r>   groupedresultexpectedr   r   r   test_numba_vs_cython1   s   
rG   c                 C   s  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 )Nc                 S      t | d S Ng333333@r3   r)   r   r   r   func_1V   r7   ztest_cache.<locals>.func_1c                 S   r2   r
   r3   r)   r   r   r   func_2Y   r7   ztest_cache.<locals>.func_2r   r   r   r8   r,   r   r9   r   r   r=   c                 S   rH   rI   r3   r   r   r   r   r?   k   r@   ztest_cache.<locals>.<lambda>rA   r    c                 S   r2   r
   r3   r   r   r   r   r?   p   r@   c                 S   rH   rI   r3   r   r   r   r   r?   u   r@   rB   )r/   r0   r:   r;   r<   rJ   rK   r   r   r>   rD   rE   rF   r   r   r   
test_cacheO   s,   


rL   c                  C   s   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 s6w   Y  t|| d S )Nc                 S   rH   rI   r3   r)   r   r   r   rJ   {   r7   z&test_use_global_config.<locals>.func_1r   r   r8   r   r,   r   r   r    zcompute.use_numbaT)r   r%   r&   r   rC   assert_frame_equal)rJ   r   rD   rF   rE   r   r   r   test_use_global_configy   s   
rN   agg_funcminmaxr   )BCrR   )columnZaggfuncc                 C   s   t g dg ddddgd}|d}tjtdd |j| d	d
 W d    n1 s-w   Y  tjtdd |d j| d	d
 W d    d S 1 sNw   Y  d S )Nr   r   r8   r   r,   r   zNumba engine canr   r   r    )r   r%   r#   r$   NotImplementedErrorr&   )rO   r   rD   r   r   r   test_multifunc_notimplimented   s   
"rV   c                  C   s   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 )Nc                 S   s   | | d    S Nr   )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   rZ   r   r,   r   r    r      r   name)r]   r+   r   )r   r%   r&   r   r   rC   Zassert_series_equal)rY   dfZ	grouped_xrE   rF   r   r   r   test_args_not_cached   s     r_   c                  C   sj   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 )Nc                 S   s
   t |S rW   r3   r)   r   r   r   f   s   
z+test_index_data_correctly_passed.<locals>.f)Ara   rR   )         )groupv))r+   re   r   r    g      g      rf   ra   rR   r\   )r   r+   )r   r%   	aggregater   rC   rM   )r`   r^   rE   rF   r   r   r    test_index_data_correctly_passed   s   rk   c                     s   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 )NTFc                    s      S rW   r   r)   r:   r<   r;   r   r   func_kwargs   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%   rj   rC   rM   )rm   r>   r^   rE   rF   r   rl   r   test_engine_kwargs_not_cached   s$   rq   c                 C   sr   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 )Nc                 S      dS Nr,   r   r)   r   r   r   
numba_func      z+test_multiindex_one_key.<locals>.numba_funcr,   r[      ra   rR   rS   ra   rR   rn   r   r=   r   r\   rS   )r+   r   )r   	set_indexr%   r&   r   rC   rM   )r:   r;   r<   rt   r^   r>   rE   rF   r   r   r   test_multiindex_one_key   s   
ry   c                 C   s~   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 s8w   Y  d S )Nc                 S   rr   rs   r   r)   r   r   r   rt      ru   z;test_multiindex_multi_key_not_supported.<locals>.numba_funcr,   r[   rv   rw   ra   rR   rn   zMore than 1 grouping labelsr   r   r=   )r   rx   r#   r$   rU   r%   r&   )r:   r;   r<   rt   r^   r>   r   r   r   'test_multiindex_multi_key_not_supported   s   "rz   )!numpyr4   r#   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r   r   Zpandas._testingZ_testingrC   Z
skip_if_nor(   r-   markfilterwarningsZparametrizerG   rL   rN   rV   r_   rk   rq   ry   rz   r   r   r   r   <module>   sX    



%

	



