o
    vh64                     @   s2  d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZ ejjgZedZeejjeejedkoHe dej d	 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d0gd1d2 Z%ejjejd3eg d4dddgifeg d4ddifeg d4g d5d!d#d6gd7dddgifeg d4g d5d!d#d6gd7ddifeg d4g d5d!d#d6gd7dddgd d!ifeg d4g d5d!d#d6gd7d8e
d#dd$ifgd9d: Z&d;d< Z'd=d> Z(d?d@ Z)ejddAdB Z*dCdD Z+dEdF Z,dGdH Z-dS )I    N)is_platform_arm)NumbaUtilError)	DataFrameIndexNamedAggSeriesoption_context)Versionnumbaz0.61z&Segfaults on ARM platforms with numba )reasonc                  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 )Nr
   c                 S      t | d S Ng@sumx r   g/var/www/html/hyperkenya/venv/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   0   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   
"r1   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_numbaF      z(test_numba_vs_cython.<locals>.func_numbar   r   r   r   r0   r0   r   nogilparallelnopython)r5   r   r$   engine_kwargsc                 S   r6   r   r7   r   r   r   r   <lambda>X       z&test_numba_vs_cython.<locals>.<lambda>cythonr#   	r&   r'   r
   r3   r   r)   r*   tmassert_equal)r3   r4   r>   r?   r@   r5   r:   r
   r   rB   groupedresultexpectedr   r   r   test_numba_vs_cython>   s   

rL   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@r7   r-   r   r   r   func_1e   r;   ztest_cache.<locals>.func_1c                 S   r6   r   r7   r-   r   r   r   func_2h   r;   ztest_cache.<locals>.func_2r   r   r   r<   r0   r   r=   r   rA   c                 S   rM   rN   r7   r   r   r   r   rC   z   rD   ztest_cache.<locals>.<lambda>rE   r#   c                 S   r6   r   r7   r   r   r   r   rC      rD   c                 S   rM   rN   r7   r   r   r   r   rC      rD   rF   )r3   r4   r>   r?   r@   rO   rP   r
   r   rB   rI   rJ   rK   r   r   r   
test_cache]   s.   



rQ   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   rM   rN   r7   r-   r   r   r   rO      r;   z&test_use_global_config.<locals>.func_1r   r   r<   r   r0   r   r#   zcompute.use_numbaT)r&   r'   r   r)   r*   r   rG   assert_frame_equal)rO   r   rI   rK   rJ   r   r   r   test_use_global_config   s   

rS   
agg_kwargsfuncminmaxr   )r0      bminr0   )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   r0   rX            r   r0   rX   r   r   r$   rE   r   r&   r'   r   r)   r*   rG   rR   )rT   r   rI   rJ   rK   r   r   r   $test_multifunc_numba_vs_cython_frame   s   


rb   zagg_kwargs,expected_funcc                 C      |   S Nr   r-   r   r   r   rC          rC   c                 C   rc   rd   r   r-   r   r   r   rC      re   c                 C   rc   rd   rV   r-   r   r   r   rC      re   z2This doesn't work yet! Fails in nopython pipeline!)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   r\   r`   r   r   r$   rE   r#   F)check_dtyper   ra   )rT   expected_funcr   rI   rJ   rK   r   r   r   test_multifunc_numba_udf_frame   s   

rj   )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$   rE   r   )
r&   r'   r   r)   r*   
isinstancer   rG   rR   assert_series_equal)rT   labelsr   rI   rJ   rK   r   r   r   %test_multifunc_numba_vs_cython_series   s   


rp   zdata,agg_kwargsr   r\   rX   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?   TrA   r$   r   )	r&   r'   r)   r*   rm   r   rG   rR   rn   )r   rT   ro   rI   rJ   rK   r   r   r   &test_multifunc_numba_kwarg_propagation   s   
!

rr   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 rd   r   )r.   r/   nr   r   r   sum_last  s   z&test_args_not_cached.<locals>.sum_last)r   r   r0   r0   )r0   r0   r0   r0   )idr   ru   r   r0   r#   r   rX   r   name)rw   r/   r   )	r&   r'   r   r)   r*   r   r   rG   rn   )rt   df	grouped_xrJ   rK   r   r   r   test_args_not_cached  s   
  rz   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 rd   r7   r-   r   r   r   f+  s   
z+test_index_data_correctly_passed.<locals>.f)Ar|   B)r^   r_      )groupv))r/   r   r#   g      g      r   r|   r}   rv   )r    r/   )r&   r'   r   r)   	aggregater   rG   rR   )r{   rx   rJ   rK   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 rd   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   )levelrA   )r   r   r   )r   r   r   )r&   r'   r   r)   r   rG   rR   )r   rB   rx   rJ   rK   r   r   r   test_engine_kwargs_not_cached6  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 Nr0   r   r-   r   r   r   
numba_funcV     z+test_multiindex_one_key.<locals>.numba_funcr0   rX   r]   r|   r}   Cr|   r}   r   rA   r   rv   r   )r/   r    )	r&   r'   r   	set_indexr)   r*   r   rG   rR   )r>   r?   r@   r   rx   rB   rJ   rK   r   r   r   test_multiindex_one_keyR  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   e  r   z;test_multiindex_multi_key_not_supported.<locals>.numba_funcr0   rX   r]   r   r|   r}   r   zmore than 1 grouping labelsr!   rA   )r&   r'   r   r   r(   NotImplementedErrorr)   r*   )r>   r?   r@   r   rx   rB   r   r   r   'test_multiindex_multi_key_not_supportedb  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   rX      r|   r}   r   Dr|   r}   r$   rE   r   )r&   r'   r   r8   randomdefault_rngstandard_normalr)   r*   rG   rR   getattr)	numba_supported_reductions	reductionkwargsrx   gbres_aggexpected_agg
direct_resdirect_expectedr   r   r   test_multilabel_numba_vs_cythonp  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   rX   r   r   r|   r}   c                 S   rc   rd   rf   r-   r   r   r   rC     re   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>r#   c                 S   rc   rd   rf   r   r   r   r   rC     re   rE   )r&   r'   r   r8   r   r   r   r)   r*   rG   rR   )rx   r   rJ   rK   r   r   r   #test_multilabel_udf_numba_vs_cython  s   
r   ).numpyr8   r&   pandas.compatr   pandas.errorsr   pandasr   r   r   r   r   pandas._testing_testingrG   pandas.util.versionr	   mark
single_cpu
pytestmarkr'   r
   appendskipif__version__r,   r1   filterwarningsparametrizerL   rQ   rS   rb   paramxfailrj   rp   rr   rz   r   r   r   r   r   r   r   r   r   r   <module>   s    




'

	




