
    i,                     >   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
 d dlmZ d dlmZ ej                   j"                  gZ ej&                  d      Zej+                  ej                   j-                   eej.                         ed      k(  xr  e       dej.                   	             d
 Zd Zej                   j5                  d      ej                   j7                  dddg      d               Zej                   j5                  d      ej                   j7                  dddg      d               Zd Zej                   j7                  dddgdddgddg      d        Zd Z d Z!d Z"d Z#ej                   j5                  d      d        Z$d Z%d Z&d  Z'y)!    N)is_platform_arm)NumbaUtilError)	DataFrameSeriesoption_context)Versionnumbaz0.61z&Segfaults on ARM platforms with numba )reasonc                     t        j                  d       d } t        g dg ddddg      }t        j                  t        d	
      5  |j                  d      j                  | d       d d d        t        j                  t        d	
      5  |j                  d      d   j                  | d       d d d        y # 1 sw Y   SxY w# 1 sw Y   y xY w)Nr	   c                     | dz   S N    xs    f/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/tests/groupby/transform/test_numba.pyincorrect_functionz;test_correct_function_signature.<locals>.incorrect_function   s    1u    ar   br   r         ?       @      @g      @g      @keydatar   r   columnszThe first 2matchengine)pytestimportorskipr   raisesr   groupby	transform)r   r   s     r   test_correct_function_signaturer*      s    
  )3LMD 
~]	; JU%%&8%IJ 
~]	; RUF#--.@-QR RJ JR Rs   
#B?&C?CCc                  j   t        j                  d       d } d }t        g dg ddddg	      }t        j                  t        d
      5  |j                  d      j                  | dd       d d d        t        j                  t        d      5  |j                  d      j                  |dd       d d d        t        j                  t        d
      5  |j                  d      d   j                  | dd       d d d        t        j                  t        d      5  |j                  d      d   j                  |dd       d d d        t        j                  t        d      5  |j                  d      j                  | dd       d d d        |j                  d      j                  |dd      }t        j                  |dg   dz   |       t        j                  t        d      5  |j                  d      d   j                  | dd       d d d        |j                  d      d   j                  |dd      }t        j                  |d   dz   |       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr	   c                    | |z   S Nr   valuesindexr   s      r   r   z6test_check_nopython_kwargs.<locals>.incorrect_function.       zr   c                     | |z   S r-   r   r.   s      r   correct_functionz4test_check_nopython_kwargs.<locals>.correct_function1   r1   r   r   r   r   r   r   r   z8missing a required (keyword-only argument|argument): 'a'r!   r   )r$   r   z missing a required argument: 'a'znumba does not support)r$   r   )r%   r&   r   r'   	TypeErrorr(   r)   r   tmassert_frame_equalassert_series_equal)r   r3   r   actuals       r   test_check_nopython_kwargsr9   +   s   
  )3LMD
 
S
 O 	U%%&8A%NO 
y(J	K MU%%&6w!%LM 
S
 W 	UF#--.@TU-VW 
y(J	K UUF#--.>wRS-TU 
~-E	F OU%%&8A%NO\\% **+;Gq*QF$x.1,f5	~-E	F WUF#--.@TU-VW\\% (22A 3 F 4<!+V43O OM MW WU UO O
W WsH   $I($I5'J%'J/$J6'J)(I25I?JJJ&)J2ignorejitTFc                 V   t        j                  d       d }| rdd l}|j                  |      }t	        g dg ddddg      }|||d	}	|j                  d|
      }
|t        u r|
d   }
|
j                  |d|	      }|
j                  d d      }t        j                  ||       y )Nr	   c                     | dz   S r   r   r/   r0   s     r   funcz"test_numba_vs_cython.<locals>.func[   r1   r   r   r   r   r   r   r   r   nogilparallelnopython)as_indexr$   engine_kwargsc                     | dz   S r   r   r   s    r   <lambda>z&test_numba_vs_cython.<locals>.<lambda>m   
    1q5 r   cythonr#   
r%   r&   r	   r;   r   r(   r   r)   r5   assert_equal)r;   frame_or_seriesrB   rC   rD   rE   r?   r	   r   rG   groupedresultexpecteds                r   test_numba_vs_cythonrR   U   s       yy%*CDqRSfD $xPMll1xl0G& !*tG=QF   BHOOFH%r   c                 r   t        j                  d       d }d }| r&dd l}|j                  |      }|j                  |      }t	        g dg ddddg	      }|||d
}	|j                  d      }
|t        u r|
d   }
|
j                  |d|	      }|
j                  d d      }t        j                  ||       |
j                  |d|	      }|
j                  d d      }t        j                  ||       |
j                  |d|	      }|
j                  d d      }t        j                  ||       y )Nr	   c                     | dz   S r   r   r>   s     r   func_1ztest_cache.<locals>.func_1y   r1   r   c                     | dz  S N   r   r>   s     r   func_2ztest_cache.<locals>.func_2|   r1   r   r   r   r   r@   r   r   rA   rF   c                     | dz   S r   r   r   s    r   rI   ztest_cache.<locals>.<lambda>   rJ   r   rK   r#   c                     | dz  S rW   r   r   s    r   rI   ztest_cache.<locals>.<lambda>   rJ   r   c                     | dz   S r   r   r   s    r   rI   ztest_cache.<locals>.<lambda>   rJ   r   rL   )r;   rN   rB   rC   rD   rU   rY   r	   r   rG   rO   rP   rQ   s                r   
test_cacher]   r   s6   
   6"6"%*CDqRSfD $xPMll1oG& !*vg]SF   BHOOFH%vg]SF   BHOOFH% vg]SF   BHOOFH%r   c                  <   t        j                  d       d } t        g dg ddddg      }|j                  d      }|j	                  | d	      }t        d
d      5  |j	                  | d 	      }d d d        t        j                  |       y # 1 sw Y    xY w)Nr	   c                     | dz   S r   r   r>   s     r   rU   z&test_use_global_config.<locals>.func_1   r1   r   r   r   r@   r   r   r   r#   zcompute.use_numbaT)r%   r&   r   r(   r)   r   r5   r6   )rU   r   rO   rQ   rP   s        r   test_use_global_configr`      s    
  %*CDqRSfD ll1oG   8H	+T	2 8""6$"78(F+8 8s   BBagg_funcminmaxsum)BCc                    t        j                  d       |\  } }t        g dg ddddg      }|j                  d      } |j                  | fddi|} |j                  | fdd	i|}t        j                  ||        |d   j                  | fddi|} |d   j                  | fdd	i|}t        j                  ||       y )
Nr	   r   r   r@   r   r   r   r$   rK   )r%   r&   r   r(   r)   r5   r6   r7   )ra   numba_supported_reductionskwargsr   rO   rP   rQ   s          r   test_string_cython_vs_numbarj      s      1Hf%*CDqRSfD ll1oGWxBB6BF w  E(EfEH&(+!WQZ!!(E7EfEF#wqz##HHXHHH68,r   c                  l   t        j                  d       d } t        g dg dd      }|j                  d      d   }|j	                  | dd	      }t        d
gdz  d      }t        j                  ||       |j	                  | dd	      }t        dgdz  d      }t        j                  ||       y )Nr	   c                 *    | | d  j                         S r-   )rd   )r/   r0   ns      r   sum_lastz&test_args_not_cached.<locals>.sum_last   s    qbc{  r   )r   r   r   r   )r   r   r   r   )idr   ro   r   r   r#   r      )name   r   )r%   r&   r   r(   r)   r   r5   r7   )rn   df	grouped_xrP   rQ   s        r   test_args_not_cachedru      s    
 ! 
,\:	;B

4 %I  1W =Fseaic*H68,  1W =Fseaic*H68,r   c                      t        j                  d       d } t        g dg ddg d      }|j                  d      j	                  | d	      }t        g d
dgg d      }t        j                  ||       y )Nr	   c                     |dz
  S r   r   r>   s     r   fz+test_index_data_correctly_passed.<locals>.f   s    qyr   )Ary   re   )rp   rX      )groupv)r0   r{   r#   )g       g      g      r|   )r    r0   r%   r&   r   r(   r)   r5   r6   rx   rs   rP   rQ   s       r    test_index_data_correctly_passedr      sg    
  
_9=\	RBZZ **1W*=F+cU,OH&(+r   c                     t        j                  d       d } t        g dg ddt        ddd            }|j	                  d	      d
   j                  | d      }t        g dt        ddd      d
      }t        j                  ||       y )Nr	   c                     | S r-   r   r>   s     r   rx   z1test_index_order_consistency_preserved.<locals>.f   s    r   )g        r   r   r   )r   r   r   r   )valsr{      r}   r   r{   r   r#   )r0   rq   )	r%   r&   r   ranger(   r)   r   r5   r7   r   s       r   &test_index_order_consistency_preservedr      s    
  
%=U1bRTEU
B ZZ (221W2EF*%2r2BPH68,r   c                     t        j                  d       dddfd} d}t        dg di      }|j                  d	      j	                  | d|
      }t        dg di      }t        j                  ||       dd}|j                  d	      j	                  | d|
      }t        dg di      }t        j                  ||       y )Nr	   TFc                     z   z   S r-   r   )r/   r0   rB   rD   rC   s     r   func_kwargsz2test_engine_kwargs_not_cached.<locals>.func_kwargs   s    x(**r   rD   rB   rC   value)r   r   r   r   )levelrF   )r   r   r   )r   r   r   r   )r   rG   rs   rP   rQ   rB   rD   rC   s        @@@r   test_engine_kwargs_not_cachedr      s      EHH+ "*ExPM	GY'	(BZZaZ **G= + F '?34H&(+E!)ExPMZZaZ **G= + F '?34H&(+r   c                 6   t        j                  d       d }t        ddddg      j                  ddg      }|| |d	}|j	                  d      j                  |d|
      }t        ddddg      j                  ddg      }t        j                  ||       y )Nr	   c                      yr   r   r>   s     r   
numba_funcz+test_multiindex_one_key.<locals>.numba_func      r   r   rr   r   ry   re   rf   ry   re   r   rF   r   )r%   r&   r   	set_indexr(   r)   r5   r6   )rB   rC   rD   r   rs   rG   rP   rQ   s           r   test_multiindex_one_keyr   
  s    
  
!!!,-	.	8	8#s	DB!)ExPMZZ_&&7- ' F 456@@#sLH&(+r   c                 ,   t        j                  d       d }t        ddddg      j                  ddg      }|| |d	}t        j                  t
        d
      5  |j                  ddg      j                  |d|       d d d        y # 1 sw Y   y xY w)Nr	   c                      yr   r   r>   s     r   r   z;test_multiindex_multi_key_not_supported.<locals>.numba_func  r   r   r   rr   r   r   ry   re   r   zmore than 1 grouping labelsr!   rF   )r%   r&   r   r   r'   NotImplementedErrorr(   r)   )rB   rC   rD   r   rs   rG   s         r   'test_multiindex_multi_key_not_supportedr     s    
  
!!!,-	.	8	8#s	DB!)ExPM	*2O	P 



C:((wm 	) 	

 
 
s   &B

Bc                    t        j                  d       | \  }}t        g dg dt        j                  j                  d      j                  d      t        j                  j                  d      j                  d      d      }|j                  ddg      } |j                  |fd	di|} |j                  |fd	d
i|}t        j                  ||       y )Nr	   foobarr   r   r   r   r   r   oner   twothreer   r   r   r   rr      ry   re   rf   Dry   re   r$   rK   r%   r&   r   nprandomdefault_rngstandard_normalr(   r)   r5   r6   )rh   	reductionri   rs   gbres_aggexpected_aggs          r   test_multilabel_numba_vs_cythonr   (  s    
 2Iv	IM&&q)99!<&&q)99!<		

B 
S#J	Bbll9?W??G2<<	E(EfEL'<0r   c                     t        j                  d       t        g dg dt        j                  j                  d      j                  d      t        j                  j                  d      j                  d      d      } | j                  ddg      }|j                  d	 d
      }|j                  d d
      }t        j                  ||       y )Nr	   r   r   rr   r   r   ry   re   c                 l    | | j                         z
  | j                         | j                         z
  z  S r-   rb   rc   r>   s     r   rI   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>E  s'    v

4

9TU r   r#   c                 l    | | j                         z
  | j                         | j                         z
  z  S r-   r   r   s    r   rI   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>I  s&    1quuw;1557QUUW#45 r   rK   r   )rs   r   rP   rQ   s       r   #test_multilabel_udf_numba_vs_cythonr   9  s    
 	IM&&q)99!<&&q)99!<		

B 
S#J	B\\U  F ||5h  H &(+r   )(numpyr   r%   pandas.compatr   pandas.errorsr   pandasr   r   r   pandas._testing_testingr5   pandas.util.versionr   mark
single_cpu
pytestmarkr&   r	   appendskipif__version__r*   r9   filterwarningsparametrizerR   r]   r`   rj   ru   r   r   r   r   r   r   r   r   r   r   <module>r      s     ) ( 
  'kk$$%
G$ 
  
KK!!"gfo5K/:K78I8I7JK  R"'5T H%u.& / &&4 H%u.#& / &#&L," %uen5(IJ--"-$
,-,8 H%, &,
1",r   