U
    ¾mœ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 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   úb/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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   )!Ú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   



%

üþ	



