U
    >vf                     @   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 dddddgddddd	gd
ddgd}tjtdd |dj| dd W 5 Q R X tjtdd |dd j| dd W 5 Q R X d S )Nc                 S   s   t | d S Ng@sumx r   M/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/groupby/aggregate/test_numba.pyincorrect_function   s    z;test_correct_function_signature.<locals>.incorrect_functionab      ?       @      @      @      @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 dddddgddddd	gd
ddgd}tjtdd |dj| ddd W 5 Q R X tjtdd  |dd j| ddd W 5 Q R X d S )Nc                 S   s   t | d S r	   r
   valuesindexr   r   r   r   #   s    z6test_check_nopython_kwargs.<locals>.incorrect_functionr   r   r   r   r   r   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dddddgdddd	d
gdddgd}|||d}	|jd|d}
|dkrr|
d }
|
j|d|	d}|
jdd dd}t|| d S )Nc                 S   s   t | d S r	   npZmeanr(   r   r   r   
func_numba8   s    z(test_numba_vs_cython.<locals>.func_numbar   r   r   r   r   r   r   r   r   r+   r+   r   nogilparallelnopython)r0   r   r   r    engine_kwargsc                 S   s   t | d S r	   r1   r   r   r   r   <lambda>J       z&test_numba_vs_cython.<locals>.<lambda>cythonr   r   r.   r   r$   r%   tmZassert_equal)r.   r/   r6   r7   r8   r0   r3   r   r   r:   groupedresultexpectedr   r   r   test_numba_vs_cython1   s    
 rC   c                 C   s  dd }dd }| r0dd l }||}||}tdddddgdd	d
ddg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   s   t | d S Ng333333@r1   r(   r   r   r   func_1V   s    ztest_cache.<locals>.func_1c                 S   s   t | d S r	   r1   r(   r   r   r   func_2Y   s    ztest_cache.<locals>.func_2r   r   r   r   r   r   r   r   r4   r+   r   r5   r   r   r9   c                 S   s   t | d S rD   r1   r   r   r   r   r;   k   r<   ztest_cache.<locals>.<lambda>r=   r   c                 S   s   t | d S r	   r1   r   r   r   r   r;   p   r<   c                 S   s   t | d S rD   r1   r   r   r   r   r;   u   r<   r>   )r.   r/   r6   r7   r8   rE   rF   r   r   r:   r@   rA   rB   r   r   r   
test_cacheO   s.    

 
rG   c               	   C   s~   dd } t dddddgddddd	gd
ddgd}|d}|j| dd}tdd |j| d d}W 5 Q R X t|| d S )Nc                 S   s   t | d S rD   r1   r(   r   r   r   rE   {   s    z&test_use_global_config.<locals>.func_1r   r   r   r   r   r   r   r4   r   r+   r   r   r   zcompute.use_numbaT)r   r$   r%   r   r?   assert_frame_equal)rE   r   r@   rB   rA   r   r   r   test_use_global_configy   s     
rI   agg_funcminmaxr   )BCrM   )columnZaggfuncc              	   C   s   t dddddgdddddgdd	d
gd}|d	}tjtdd |j| dd W 5 Q R X tjtdd |d
 j| dd W 5 Q R X d S )Nr   r   r   r   r   r   r   r4   r   r+   r   zNumba engine canr   r   r   )r   r$   r"   r#   NotImplementedErrorr%   )rJ   r   r@   r   r   r   test_multifunc_notimplimented   s     
rQ   c                  C   s   dd } t ddddgddddg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_lastr   r+   )idr   rU   r   r   r   r      name)rX   r*   r   )r   r$   r%   r   r   r?   Zassert_series_equal)rT   dfZ	grouped_xrA   rB   r   r   r   test_args_not_cached   s      rZ   c                  C   sp   dd } t dddgdddgdd	d
dg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 rR   r1   r(   r   r   r   f   s    z+test_index_data_correctly_passed.<locals>.fArM            )groupv)r*   r`   r   r   g      g      ra   rW   )r   r*   )r   r$   	aggregater   r?   rH   )r[   rY   rA   rB   r   r   r    test_index_data_correctly_passed   s    $  rf   c                     s   d dd fdd}  d}t ddddgi}|jddj| d	|d
}t ddddgi}t|| d  d}|jddj| d	|d
}t ddddgi}t|| d S )NTFc                    s      S rR   r   r(   r6   r8   r7   r   r   func_kwargs   s    z2test_engine_kwargs_not_cached.<locals>.func_kwargsr8   r6   r7   valuer   )levelr   r9   r   r   )r   r$   re   r?   rH   )rh   r:   rY   rA   rB   r   rg   r   test_engine_kwargs_not_cached   s,        rl   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   s   dS Nr+   r   r(   r   r   r   
numba_func   s    z+test_multiindex_one_key.<locals>.numba_funcr+   rV      r\   rM   rN   r\   rM   ri   r   r9   r   rW   rN   )r*   r   )r   	set_indexr$   r%   r   r?   rH   )r6   r7   r8   rn   rY   r:   rA   rB   r   r   r   test_multiindex_one_key   s    
  rr   c              	   C   sh   dd }t ddddgddg}|| |d	}tjtd
d  |ddgj|d|d W 5 Q R X d S )Nc                 S   s   dS rm   r   r(   r   r   r   rn      s    z;test_multiindex_multi_key_not_supported.<locals>.numba_funcr+   rV   ro   rp   r\   rM   ri   zMore than 1 grouping labelsr   r   r9   )r   rq   r"   r#   rP   r$   r%   )r6   r7   r8   rn   rY   r:   r   r   r   'test_multiindex_multi_key_not_supported   s      rs   )!Znumpyr2   r"   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r   r   Zpandas._testingZ_testingr?   Z
skip_if_nor'   r,   markfilterwarningsZparametrizerC   rG   rI   rQ   rZ   rf   rl   rr   rs   r   r   r   r   <module>   sV   



%

	



