
    Owg2                        d dl Zd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ ej                  j                  Zd Zd Zej                  j'                  d      ej                  j)                  ddd	g      ej                  j)                  d
ddg      ej                  j)                  ddd	g      d                             Zej                  j'                  d      ej                  j)                  ddd	g      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dd idf ej2                  dd d giddgej                  j5                  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d- Zd. Z ej                  j'                  d      d/        Z!d0 Z"d1 Z#d2 Z$y)3    N)NumbaUtilError)	DataFrameIndexNamedAggSeriesoption_contextc                     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)Nnumbac                     t        |       dz  S Ng@sumxs    `/var/www/horilla/myenv/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         ?       @g      @g      @g      @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 } 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      d   j                  | dd       d d d        y # 1 sw Y   TxY w# 1 sw Y   y xY w)Nr
   c                     t        |       dz  S r   r   valuesindexs     r   r   z6test_check_nopython_kwargs.<locals>.incorrect_function&   s    6{S  r   r   r   r   r   r   r   znumba does not supportr      )r"   r   r#   r)   s     r   test_check_nopython_kwargsr1   #   s    
 ! )3LMD 
~-E	F IU 27aHI 
~-E	F QUF#''(:7a'PQ QI IQ Qs   
$C'CC
CignorejitTF
pandas_objr   r   as_indexc                 P   t        j                  d       d }| rdd l}|j                  |      }t	        g dg ddddg      }|||d	}	|j                  d|
      }
|dk(  r|
d   }
|
j                  |d|	      }|
j                  d d      }t        j                  ||       y )Nr
   c                 2    t        j                  |       dz  S r   npmeanr-   s     r   
func_numbaz(test_numba_vs_cython.<locals>.func_numba<       wwv$$r   r   r   r   r   r0   r0   r   nogilparallelnopython)r5   r   r"   engine_kwargsc                 2    t        j                  |       dz  S r   r8   r   s    r   <lambda>z&test_numba_vs_cython.<locals>.<lambda>N       RWWQZ#%5 r   cythonr!   	r$   r%   r
   r3   r   r'   r(   tmassert_equal)r3   r4   r?   r@   rA   r5   r;   r
   r   rC   groupedresultexpecteds                r   test_numba_vs_cythonrN   4   s      % YYz*
%*CDqRSfD $xPMll1xl0GX!*[[G=[QF{{5h{GHOOFH%r   c                 l   t        j                  d       d }d }| r&dd l}|j                  |      }|j                  |      }t	        g dg ddddg	      }|||d
}	|j                  d      }
|dk(  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@r8   r-   s     r   func_1ztest_cache.<locals>.func_1[   r<   r   c                 2    t        j                  |       dz  S r   r8   r-   s     r   func_2ztest_cache.<locals>.func_2^   r<   r   r   r   r   r=   r0   r   r>   r   rB   c                 2    t        j                  |       dz
  S rQ   r8   r   s    r   rE   ztest_cache.<locals>.<lambda>p   rF   r   rG   r!   c                 2    t        j                  |       dz  S r   r8   r   s    r   rE   ztest_cache.<locals>.<lambda>u   rF   r   c                 2    t        j                  |       dz
  S rQ   r8   r   s    r   rE   ztest_cache.<locals>.<lambda>z   rF   r   rH   )r3   r4   r?   r@   rA   rR   rT   r
   r   rC   rK   rL   rM   s                r   
test_cacherX   S   s)     %% 6"6"%*CDqRSfD $xPMll1oGX!*[[}[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 rQ   r8   r-   s     r   rR   z&test_use_global_config.<locals>.func_1   r<   r   r   r   r=   r   r0   r   r!   zcompute.use_numbaT)r$   r%   r   r'   r(   r   rI   assert_frame_equal)rR   r   rK   rM   rL   s        r   test_use_global_configr\   ~   s    
 % %*CDqRSfD ll1oG{{6'{2H	+T	2 2VD12(F+2 2s   BB
agg_kwargsfuncminmaxr   )r0      bminr0   )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   r0   ra            r   r0   ra   r   r   r"   rG    r$   r%   r   r'   r(   rI   r[   )r]   r   rK   rL   rM   s        r   $test_multifunc_numba_vs_cython_framerm      s~      ((	

 D ll1oGW[[6:6g6Fw{{9Z99H&(+r   zagg_kwargs,expected_funcc                 "    | j                         S Nr   r-   s     r   rE   rE      s    

 r   c                 "    | j                         S ro   r   r-   s     r   rE   rE          &**, r   c                 "    | j                         S ro   r_   r-   s     r   rE   rE      rq   r   z2This doesn't work yet! Fails in nopython pipeline!)reason)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   rf   rj   r   r   r"   rG   r!   F)check_dtyperk   rl   )r]   expected_funcr   rK   rL   rM   s         r   test_multifunc_numba_udf_framery      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"   rG   rk   )
r$   r%   r   r'   r(   
isinstancer   rI   r[   assert_series_equal)r]   labelsr   rK   rL   rM   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   rf   ra   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   r@   TrB   r"   rk   )	r$   r%   r'   r(   r}   r   rI   r[   r~   )r   r]   r   rK   rL   rM   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 ro   r   )r.   r/   ns      r   sum_lastz&test_args_not_cached.<locals>.sum_last  s    qbc{  r   )r   r   r0   r0   )r0   r0   r0   r0   )idr   r   r   r0   r!   r   ra   r   name)r   r/   r   )	r$   r%   r   r'   r(   r   r   rI   r~   )r   df	grouped_xrL   rM   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 ro   r8   r-   s     r   fz+test_index_data_correctly_passed.<locals>.f!  s    wwu~r   )Ar   B)rh   ri      )groupv))r/   r   r!   g      g      r   r   r   r   )r   r/   )r$   r%   r   r'   	aggregater   rI   r[   )r   r   rL   rM   s       r    test_index_data_correctly_passedr     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 ro   rk   )r.   r/   r?   rA   r@   s     r   func_kwargsz2test_engine_kwargs_not_cached.<locals>.func_kwargs4  s    x(**r   rA   r?   r@   value)r   r   r   r   )levelrB   )r   r   r   )r   r   r   )r$   r%   r   r'   r   rI   r[   )r   rC   r   rL   rM   r?   rA   r@   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Nr0   rk   r-   s     r   
numba_funcz+test_multiindex_one_key.<locals>.numba_funcL      r   r0   ra   rg   r   r   Cr   r   r   rB   r   r   r   )r/   r   )	r$   r%   r   	set_indexr'   r(   r   rI   r[   )r?   r@   rA   r   r   rC   rL   rM   s           r   test_multiindex_one_keyr   H  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   rk   r-   s     r   r   z;test_multiindex_multi_key_not_supported.<locals>.numba_func[  r   r   r0   ra   rg   r   r   r   r   zmore than 1 grouping labelsr   rB   )r$   r%   r   r   r&   NotImplementedErrorr'   r(   )r?   r@   rA   r   r   rC   s         r   'test_multiindex_multi_key_not_supportedr   X  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   ra      r   r   r   Dr   r   r"   rG   rk   )r$   r%   r   r9   randomdefault_rngstandard_normalr'   r(   rI   r[   getattr)	numba_supported_reductions	reductionkwargsr   gbres_aggexpected_agg
direct_resdirect_expecteds	            r   test_multilabel_numba_vs_cythonr   f  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   ra   r   r   r   r   c                 "    | j                         S ro   rs   r-   s     r   rE   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>  rq   r   r!   c                 "    | j                         S ro   rs   r   s    r   rE   z5test_multilabel_udf_numba_vs_cython.<locals>.<lambda>  s     r   rG   )r$   r%   r   r9   r   r   r   r'   r(   rI   r[   )r   r   rL   rM   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   )%numpyr9   r$   pandas.errorsr   pandasr   r   r   r   r   pandas._testing_testingrI   mark
single_cpu
pytestmarkr*   r1   filterwarningsparametrizerN   rX   r\   rm   paramxfailry   r   r   r   r   r   r   r   r   r   rk   r   r   <module>r      s     (  [[##
L"Q" H%u.+'>?dE]3& 4 @ / &
&4 H%u.+'>?$& @ / &$&N,  	% 		eU^./	E23	,,  
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   