
    .iR:                     >   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j*                  d      Zej/                  ej$                  j1                   eej2                         ed      k(  xr  e       dej2                   	             d
 Zd Zej$                  j9                  d      ej$                  j;                  dddg      d               Zej$                  j9                  d      ej$                  j;                  dddg      d               Zd Z ej$                  j;                  ddddgiddidddgddid e
dd      ig      d        Z!ej$                  j;                  dg d      d        Z"ej$                  j;                  ddd  idf ejF                  dd! d" giddgej$                  jI                  d#	      $      g      d%        Z%ej$                  j;                  ddddgiddiddd&g      d'        Z&ej$                  j&                  ej$                  j;                  d( eg d)      dddgif eg d)      ddif eg d)g d*ddd+g,      dddgif eg d)g d*ddd+g,      ddif eg d)g d*ddd+g,      dddgddif eg d)g d*ddd+g,      d- e
dd      ifg      d.               Z'd/ Z(d0 Z)d1 Z*ej$                  j9                  d      d2        Z+d3 Z,d4 Z-d5 Z.y)6    N)is_platform_arm)NumbaUtilError)	DataFrameIndexNamedAgg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                     t        |       dz  S N皙@sumxs    g/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/groupby/aggregate/test_numba.pyincorrect_functionz;test_correct_function_signature.<locals>.incorrect_function   s    1v|    ar   br   r         ?       @      @      @      @keydatar"   r#   columnszThe first 2matchengine)pytestimportorskipr   raisesr   groupbyagg)r   r#   s     r   test_correct_function_signaturer/      s    
  )3LMD 
~]	; DU 27CD 
~]	; LUF#''(:7'KL LD DL Ls   
#B?&C?CCc                     t        j                  d       d } d }t        g dg ddddg	      }|j                  d      j	                         d
z  }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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   AxY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   c                $    t        |       dz  |z   S r   r   valuesindexr   s      r   r   z6test_check_nopython_kwargs.<locals>.incorrect_function0       6{S 1$$r   c                 $    t        |       dz  |z   S r   r   r2   s      r   correct_functionz4test_check_nopython_kwargs.<locals>.correct_function3   r5   r   r   r   r!   r"   r#   r$   r   z8missing a required (keyword-only argument|argument): 'a'r&      )r)   r   z missing a required argument: 'a'znumba does not support)r)   r   )r*   r+   r   r-   r   r,   	TypeErrorr.   r   tmassert_frame_equalassert_series_equal)r   r7   r#   expectedactuals        r   test_check_nopython_kwargsr?   -   s   
 %% )3LMD ||E"&&(3.H 
S
 I 	U 27aHI 
y(J	K GU 0AFG 
S
 Q 	UF#''(:7a'PQ 
y(J	K OUF#''(8A'NO 
~-E	F IU 27aHI\\% $$%5g$KF(Q,/	~-E	F QUF#''(:7a'PQ\\% (,,-=gQR,SF8F+a/8/I IG GQ QO OI I
Q QsH   /$J6$J='J 'J-$J:'KJJ J*-J7:KK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                 2    t        j                  |       dz  S r   npmeanr3   r4   s     r   
func_numbaz(test_numba_vs_cython.<locals>.func_numba]       wwv$$r   r   r   r   r   r8   r8   r$   nogilparallelnopython)as_indexr)   engine_kwargsc                 2    t        j                  |       dz  S r   rD   r   s    r   <lambda>z&test_numba_vs_cython.<locals>.<lambda>o       RWWQZ#%5 r   cythonr(   
r*   r+   r   rA   r   r-   r   r.   r:   assert_equal)rA   frame_or_seriesrL   rM   rN   rO   rH   r   r#   rQ   groupedresultr=   s                r   test_numba_vs_cythonr[   W   s      % YYz*
%*CDqRSfD $xPMll1xl0G& !*[[G=[QF{{5h{GH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                 2    t        j                  |       dz
  S Ng333333@rD   rG   s     r   func_1ztest_cache.<locals>.func_1{   rI   r   c                 2    t        j                  |       dz  S r   rD   rG   s     r   func_2ztest_cache.<locals>.func_2~   rI   r   r   r   r   rJ   r8   r$   rK   rP   c                 2    t        j                  |       dz
  S r^   rD   r   s    r   rS   ztest_cache.<locals>.<lambda>   rT   r   rU   r(   c                 2    t        j                  |       dz  S r   rD   r   s    r   rS   ztest_cache.<locals>.<lambda>   rT   r   c                 2    t        j                  |       dz
  S r^   rD   r   s    r   rS   ztest_cache.<locals>.<lambda>   rT   r   rV   )rA   rX   rL   rM   rN   r_   ra   r   r#   rQ   rY   rZ   r=   s                r   
test_cachere   t   s)   
  %% 6"6"%*CDqRSfD $xPMll1oG& !*[[}[MF{{5h{GHOOFH% [[}[MF{{5h{GHOOFH% [[}[MF{{5h{GH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                 2    t        j                  |       dz
  S r^   rD   rG   s     r   r_   z&test_use_global_config.<locals>.func_1   rI   r   r   r   rJ   r   r8   r$   r(   zcompute.use_numbaT)r*   r+   r   r-   r.   r	   r:   r;   )r_   r#   rY   r=   rZ   s        r   test_use_global_configrh      s    
 % %*CDqRSfD ll1oG{{6'{2H	+T	2 2VD12(F+2 2s   BB
agg_kwargsfuncminmaxr   )r8      bminr8   )columnaggfuncc                    t        j                  d       t        g dg dg ddg d      }|j                  d      } |j                  d
i | ddi} |j                  d
i | dd	i}t        j                  ||       y )Nr   r   r   r8   rm            r   r8   rm   r$   r   r)   rU    r*   r+   r   r-   r.   r:   r;   )ri   r#   rY   rZ   r=   s        r   $test_multifunc_numba_vs_cython_framery      s~      ((	

 D ll1oGW[[6:6g6Fw{{9Z99H&(+r   )r   rF   varstdrk   rl   c                     t        j                  d       t        g ddt        j                  dddgg ddg d	      }|j                  d
      }|j                  | dd      }|j                  | dd      }t        j                  ||       y )Nr   r   r   r   r   r    rr   rv   r$   r   F)skipnar)   rU   )	r*   r+   r   rE   nanr-   r.   r:   r;   )rj   r#   rY   rZ   r=   s        r   -test_multifunc_numba_vs_cython_frame_noskipnar      s    
 (RVVS#s+	

 D ll1oG[[eG[<F{{4h{?H&(+r   zagg_kwargs,expected_funcc                 "    | j                         S Nr   rG   s     r   rS   rS      s    

 r   c                 "    | j                         S r   r   rG   s     r   rS   rS          &**, r   c                 "    | j                         S r   rk   rG   s     r   rS   rS      r   r   z2This doesn't work yet! Fails in nopython pipeline!)marksc                    t        j                  d       t        g dg dg ddg d      }|j                  d      } |j                  di | ddi}|j	                  |d	
      }t        j                  ||d       y )Nr   r   r   rr   rv   r$   r   r)   rU   r(   F)check_dtyperw   rx   )ri   expected_funcr#   rY   rZ   r=   s         r   test_multifunc_numba_udf_framer      s|    (  ((	

 D ll1oGW[[6:6g6F{{={:H &(>r   )min_valmax_valc                 H   t        j                  d       g d}t        g d      }|j                  |      }d| d<    |j                  di | }d| d<    |j                  di | }t        |t              rt        j                  ||       y t        j                  ||       y )Nr   r   r   r)   rU   rw   )
r*   r+   r   r-   r.   
isinstancer   r:   r;   r<   )ri   labelsr#   rY   rZ   r=   s         r   %test_multifunc_numba_vs_cython_seriesr      s    
  &F+,Dll6"G"JxW[[&:&F#Jxw{{(Z(H(I&
fh/
vx0r   zdata,agg_kwargsr   rr   rm   r$   min_colc                 0   t        j                  d       g d}| j                  |      } |j                  di |dddid} |j                  di |ddi}t	        |t
              rt        j                  ||       y t        j                  ||       y )Nr   r   rM   TrP   r)   rw   )	r*   r+   r-   r.   r   r   r:   r;   r<   )r#   ri   r   rY   rZ   r=   s         r   &test_multifunc_numba_kwarg_propagationr     s    B  &Fll6"GW[[X:XgjRVEWXFw{{8Z88H(I&
fh/
vx0r   c                     t        j                  d       d } t        g dg dd      }|j                  d      d   }|j	                  | dd	      }t        d
gdz  dt        ddgd            }t        j                  ||       |j	                  | dd	      }t        dgdz  dt        ddgd            }t        j                  ||       y )Nr   c                 *    | | d  j                         S r   r   )r3   r4   ns      r   sum_lastz&test_args_not_cached.<locals>.sum_last@  s    qbc{  r   )r   r   r8   r8   )r8   r8   r8   r8   )idr   r   r   r8   r(   r   rm   r   name)r   r4   r   )	r*   r+   r   r-   r.   r   r   r:   r<   )r   df	grouped_xrZ   r=   s        r   test_args_not_cachedr   <  s    
 ! 
,\:	;B

4 %I]]8Qw]7Fseaic1vD1IJH68,]]8Qw]7Fseaic1vD1IJH68,r   c                     t        j                  d       d } t        g dg ddg d      }|j                  d      j	                  | d	      }t        d
dgdgt        ddgd            }t        j                  ||       y )Nr   c                 ,    t        j                  |      S r   rD   rG   s     r   fz+test_index_data_correctly_passed.<locals>.fR  s    wwu~r   )Ar   B)rt   ru      )groupv))r4   r   r(   g      g      r   r   r   r   )r%   r4   )r*   r+   r   r-   	aggregater   r:   r;   )r   r   rZ   r=   s       r    test_index_data_correctly_passedr   N  sz    
  
_9=\	RBZZ **1W*=F	tse5#s'+JH &(+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   rw   )r3   r4   rL   rN   rM   s     r   func_kwargsz2test_engine_kwargs_not_cached.<locals>.func_kwargse  s    x(**r   rN   rL   rM   value)r   r   r   r   )levelrP   )r   r   r   )r   r   r   )r*   r+   r   r-   r   r:   r;   )r   rQ   r   rZ   r=   rL   rN   rM   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                 ,   t        j                  d       d }t        ddddg      j                  ddg      }|| |d	}|j	                  d      j                  |d|
      }t        dgt        dgd      dg      }t        j                  ||       y )Nr   c                      yNr8   rw   rG   s     r   
numba_funcz+test_multiindex_one_key.<locals>.numba_func}      r   r8   rm   rs   r   r   Cr   r   r   rP   r   r   r   )r4   r%   )	r*   r+   r   	set_indexr-   r.   r   r:   r;   )rL   rM   rN   r   r   rQ   rZ   r=   s           r   test_multiindex_one_keyr   y  s    
  
!!!,-	.	8	8#s	DB!)ExPMZZ_  7- ! F #eQCc&:SEJH&(+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   rw   rG   s     r   r   z;test_multiindex_multi_key_not_supported.<locals>.numba_func  r   r   r8   rm   rs   r   r   r   r   zmore than 1 grouping labelsr&   rP   )r*   r+   r   r   r,   NotImplementedErrorr-   r.   )rL   rM   rN   r   r   rQ   s         r   'test_multiindex_multi_key_not_supportedr     s    
  
!!!,-	.	8	8#s	DB!)ExPM	*2O	P 



C:""wm 	# 	

 
 
s   &B

Bc                 2   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                  ||        t        ||      dd	di|} t        ||      dd	d
i|}t        j                  ||       y )Nr   foobarr   r   r   r   r   r   oner   twothreer   r   r   r   rm      r   r   r   Dr   r   r)   rU   rw   )r*   r+   r   rE   randomdefault_rngstandard_normalr-   r.   r:   r;   getattr)	numba_supported_reductions	reductionkwargsr   gbres_aggexpected_agg
direct_resdirect_expecteds	            r   test_multilabel_numba_vs_cythonr     s   
 2Iv	IM&&q)99!<&&q)99!<		

B 
S#J	BbffY9w9&9G266)?H??L'<0'Y'AwA&AJ,gb),GHGGO*o6r   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   rm   r   r   r   r   c                 "    | j                         S r   r   rG   s     r   rS   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>  r   r   r(   c                 "    | j                         S r   r   r   s    r   rS   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>  s     r   rU   )r*   r+   r   rE   r   r   r   r-   r.   r:   r;   )r   r   rZ   r=   s       r   #test_multilabel_udf_numba_vs_cythonr     s    
 	IM&&q)99!<&&q)99!<		

B 
S#J	BVV6wVGFvv'v9H&(+r   )/numpyrE   r*   pandas.compatr   pandas.errorsr   pandasr   r   r   r   r	   pandas._testing_testingr:   pandas.util.versionr
   mark
single_cpu
pytestmarkr+   r   appendskipif__version__r/   r?   filterwarningsparametrizer[   re   rh   ry   r   paramxfailr   r   r   r   r   r   r   r   r   r   rw   r   r   <module>r      s     ) (   'kk$$%
G$ 
  
KK!!"gfo5K/:K78I8I7JK  L"'9T H%u.& / &&4 H%u.$& / &$&N,  	% 		eU^./	E23	,,  !LM, N,  
4	5u=66 EN++##K $ 	
&?'&?$ uenEe0TU1	1 	)	*VeU^,DE	)	*VUO<-/BQPQF eU^$		
 -/BQPQF UO		
 -/BQPQF %E23		
 -/BQPQF 59:		
+>	1? @	1-$,,8 H%, &,
7*,r   