a
    Pf2                     @   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 sh0    Y  t jtd
d( |dd j| dd W d    n1 s0    Y  d S )Nnumbac                 S   s   t | d S Ng@sumx r   b/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/groupby/aggregate/test_numba.pyincorrect_function   s    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    
2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 sj0    Y  t jtd
d* |dd j| ddd W d    n1 s0    Y  d S )Nr   c                 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   znumba does not supportr      )r   r   r    r&   r   r   r   test_check_nopython_kwargs#   s    
4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rp|
d }
|
j|d|	d}|
jdd dd}t|| d S )Nr   c                 S   s   t | d S r	   npmeanr(   r   r   r   
func_numba<   s    z(test_numba_vs_cython.<locals>.func_numbar   r   r   r   r+   r+   r   nogilparallelnopython)r0   r   r   engine_kwargsc                 S   s   t | d S r	   r1   r   r   r   r   <lambda>N       z&test_numba_vs_cython.<locals>.<lambda>cythonr   	r!   r"   r   r.   r   r$   r%   tmZassert_equal)r.   r/   r7   r8   r9   r0   r4   r   r   r;   groupedresultexpectedr   r   r   test_numba_vs_cython4   s    

rD   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   s   t | d S Ng333333@r1   r(   r   r   r   func_1[   s    ztest_cache.<locals>.func_1c                 S   s   t | d S r	   r1   r(   r   r   r   func_2^   s    ztest_cache.<locals>.func_2r   r   r   r5   r+   r   r6   r   r:   c                 S   s   t | d S rE   r1   r   r   r   r   r<   p   r=   ztest_cache.<locals>.<lambda>r>   r   c                 S   s   t | d S r	   r1   r   r   r   r   r<   u   r=   c                 S   s   t | d S rE   r1   r   r   r   r   r<   z   r=   r?   )r.   r/   r7   r8   r9   rF   rG   r   r   r;   rA   rB   rC   r   r   r   
test_cacheS   s.    



rH   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 sv0    Y  t|| d S )Nr   c                 S   s   t | d S rE   r1   r(   r   r   r   rF      s    z&test_use_global_config.<locals>.func_1r   r   r5   r   r+   r   r   zcompute.use_numbaT)r!   r"   r   r$   r%   r   r@   assert_frame_equal)rF   r   rA   rC   rB   r   r   r   test_use_global_config~   s    

,rJ   
agg_kwargsfuncminmaxr   )r+      Zbminr+   )columnZaggfuncc                 C   sx   t d tg dg dg ddg dd}|d}|jf i | ddi}|jf i | dd	i}t|| d S )
Nr   r   r   r+   rO            r   r+   rO   r   r   r   r>   r!   r"   r   r$   r%   r@   rI   )rK   r   rA   rB   rC   r   r   r   $test_multifunc_numba_vs_cython_frame   s    


rW   zagg_kwargs,expected_funcc                 C   s   |   S Nr
   r(   r   r   r   r<      r=   r<   c                 C   s   |   S rX   r
   r(   r   r   r   r<      r=   c                 C   s   |   S rX   rM   r(   r   r   r   r<      r=   z2This doesn't work yet! Fails in nopython pipeline!)reason)Zmarksc                 C   sr   t d tg dg dg ddg dd}|d}|jf i | ddi}|j|d	d
}tj||dd d S )Nr   r   r   rQ   rU   r   r   r   r>   r   F)Zcheck_dtyperV   )rK   Zexpected_funcr   rA   rB   rC   r   r   r   test_multifunc_numba_udf_frame   s    

r[   )Zmin_valZmax_valc                 C   s   t d g d}tg d}||}d| d< |jf i | }d| d< |jf i | }t|trpt|| nt	|| d S )Nr   r   r   r   r>   )
r!   r"   r   r$   r%   
isinstancer   r@   rI   assert_series_equal)rK   labelsr   rA   rB   rC   r   r   r   %test_multifunc_numba_vs_cython_series   s    


r_   zdata,agg_kwargsr   rQ   rO   r   Zmin_colc                 C   sz   t d g d}| |}|jf i |dddid}|jf i |ddi}t|trjt|| nt|| d S )Nr   r   r8   Tr:   r   )	r!   r"   r$   r%   r\   r   r@   rI   r]   )r   rK   r^   rA   rB   rC   r   r   r   &test_multifunc_numba_kwarg_propagation   s    !


r`   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 rX   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   rc   r   r+   r   r   rO   r   name)re   r*   r   )	r!   r"   r   r$   r%   r   r   r@   r]   )rb   dfZ	grouped_xrB   rC   r   r   r   test_args_not_cached  s    
  rg   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 rX   r1   r(   r   r   r   f!  s    z+test_index_data_correctly_passed.<locals>.f)Ari   B)rS   rT      )groupv))r*   rl   r   g      g      rm   ri   rj   rd   )r   r*   )r!   r"   r   r$   	aggregater   r@   rI   )rh   rf   rB   rC   r   r   r    test_index_data_correctly_passed  s    
rr   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 rX   r   r(   r7   r9   r8   r   r   func_kwargs4  s    z2test_engine_kwargs_not_cached.<locals>.func_kwargsr9   r7   r8   value)r   r   r   r   )levelr:   )r   r   r   )r   r   r   )r!   r"   r   r$   rq   r@   rI   )rt   r;   rf   rB   rC   r   rs   r   test_engine_kwargs_not_cached,  s&    
rx   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   s   dS Nr+   r   r(   r   r   r   
numba_funcL  s    z+test_multiindex_one_key.<locals>.numba_funcr+   rO   rR   ri   rj   Cri   rj   ru   r:   r   rd   r|   )r*   r   )	r!   r"   r   	set_indexr$   r%   r   r@   rI   )r7   r8   r9   rz   rf   r;   rB   rC   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    n1 sx0    Y  d S )Nr   c                 S   s   dS ry   r   r(   r   r   r   rz   [  s    z;test_multiindex_multi_key_not_supported.<locals>.numba_funcr+   rO   rR   r{   ri   rj   ru   zmore than 1 grouping labelsr   r:   )r!   r"   r   r}   r#   NotImplementedErrorr$   r%   )r7   r8   r9   rz   rf   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||f d	di|}t||f d	d
i|}t	
|| d S )Nr   foobarr   r   r   r   r   r   oner   twothreer   r   r   r   rO      ri   rj   r|   Dri   rj   r   r>   )r!   r"   r   r2   randomdefault_rngstandard_normalr$   r%   r@   rI   getattr)	Znumba_supported_reductionsZ	reductionkwargsrf   gbZres_aggZexpected_aggZ
direct_resZ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   rO   r   r   ri   rj   c                 S   s   |   S rX   rY   r(   r   r   r   r<     r=   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>r   c                 S   s   |   S rX   rY   r   r   r   r   r<     r=   r>   )r!   r"   r   r2   r   r   r   r$   r%   r@   rI   )rf   r   rB   rC   r   r   r   #test_multilabel_udf_numba_vs_cython{  s    
r   )%numpyr2   r!   Zpandas.errorsr   Zpandasr   r   r   r   r   Zpandas._testingZ_testingr@   markZ
single_cpuZ
pytestmarkr'   r,   filterwarningsZparametrizerD   rH   rJ   rW   paramZxfailr[   r_   r`   rg   rr   rx   r~   r   r   r   r   r   r   r   <module>   s   

'
	





