o
    $j64                     @   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   j/var/www/html/Deteccion_Ine/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*   tmZassert_equal)r3   r4   r>   r?   r@   r5   r:   r
   r   rB   groupedresultexpectedr   r   r   test_numba_vs_cython>   s   

rK   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   rL   rM   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   rL   rM   r7   r   r   r   r   rC      rD   rF   )r3   r4   r>   r?   r@   rN   rO   r
   r   rB   rH   rI   rJ   r   r   r   
test_cache]   s.   



rP   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   rL   rM   r7   r-   r   r   r   rN      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)rN   r   rH   rJ   rI   r   r   r   test_use_global_config   s   

rR   
agg_kwargsfuncminmaxr   )r0      Zbminr0   )columnZ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   rW            r   r0   rW   r   r   r$   rE   r   r&   r'   r   r)   r*   rG   rQ   )rS   r   rH   rI   rJ   r   r   r   $test_multifunc_numba_vs_cython_frame   s   


r_   zagg_kwargs,expected_funcc                 C      |   S Nr   r-   r   r   r   rC          rC   c                 C   r`   ra   r   r-   r   r   r   rC      rb   c                 C   r`   ra   rU   r-   r   r   r   rC      rb   z2This doesn't work yet! Fails in nopython pipeline!)Z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   rY   r]   r   r   r$   rE   r#   F)Zcheck_dtyper   r^   )rS   Zexpected_funcr   rH   rI   rJ   r   r   r   test_multifunc_numba_udf_frame   s   

rd   )Zmin_valZ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   rQ   assert_series_equal)rS   labelsr   rH   rI   rJ   r   r   r   %test_multifunc_numba_vs_cython_series   s   


rh   zdata,agg_kwargsr   rY   rW   r   Z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*   re   r   rG   rQ   rf   )r   rS   rg   rH   rI   rJ   r   r   r   &test_multifunc_numba_kwarg_propagation   s   
!

ri   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 ra   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   rl   r   r0   r#   r   rW   r   name)rn   r/   r   )	r&   r'   r   r)   r*   r   r   rG   rf   )rk   dfZ	grouped_xrI   rJ   r   r   r   test_args_not_cached  s   
  rp   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 ra   r7   r-   r   r   r   f+  s   
z+test_index_data_correctly_passed.<locals>.f)Arr   B)r[   r\      )groupv))r/   ru   r#   g      g      rv   rr   rs   rm   )r    r/   )r&   r'   r   r)   	aggregater   rG   rQ   )rq   ro   rI   rJ   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 ra   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)   rz   rG   rQ   )r}   rB   ro   rI   rJ   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   rW   rZ   rr   rs   Crr   rs   r~   rA   r   rm   r   )r/   r    )	r&   r'   r   	set_indexr)   r*   r   rG   rQ   )r>   r?   r@   r   ro   rB   rI   rJ   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   rW   rZ   r   rr   rs   r~   zmore than 1 grouping labelsr!   rA   )r&   r'   r   r   r(   NotImplementedErrorr)   r*   )r>   r?   r@   r   ro   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   rW      rr   rs   r   Drr   rs   r$   rE   r   )r&   r'   r   r8   randomdefault_rngstandard_normalr)   r*   rG   rQ   getattr)	Znumba_supported_reductionsZ	reductionkwargsro   gbZres_aggZexpected_aggZ
direct_resZ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   rW   r   r   rr   rs   c                 S   r`   ra   rc   r-   r   r   r   rC     rb   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>r#   c                 S   r`   ra   rc   r   r   r   r   rC     rb   rE   )r&   r'   r   r8   r   r   r   r)   r*   rG   rQ   )ro   r   rI   rJ   r   r   r   #test_multilabel_udf_numba_vs_cython  s   
r   ).numpyr8   r&   Zpandas.compatr   Zpandas.errorsr   Zpandasr   r   r   r   r   Zpandas._testingZ_testingrG   Zpandas.util.versionr	   markZ
single_cpuZ
pytestmarkr'   r
   appendZskipif__version__r,   r1   filterwarningsZparametrizerK   rP   rR   r_   paramZxfailrd   rh   ri   rp   r{   r   r   r   r   r   r   r   r   r   <module>   s    




'

	




