
    sh<                        S SK rS SKJr  S SKJrJrJrJr  S SKJ	r	  S SKJ
r
  S SKJrJr  S SKrS SKrS SKJrJr  S SKJr  \4S	 jr\" S
5       " S S\5      5       r\" S
5       " S S\5      5       r\S:X  a  \R2                  " 5         gg)    N)
namedtuple)voidint32float32float64)guvectorize)cuda)skip_on_cudasimCUDATestCase)NumbaPerformanceWarningTypingError)override_configc           
      v    [        [        U S S 2S S 24   U S S 2S S 24   U S S 2S S 24   5      /SSS9S 5       nU$ )Nz(m,n),(n,p)->(m,p)r	   targetc           
          U R                   u  p4UR                   u  pE[        U5       HF  n[        U5       H4  nSX&U4'   [        U5       H  nX&U4==   XU4   XU4   -  -  ss'   M     M6     MH     g Nr   shaperange)	ABCmnpijks	            w/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/cuda/tests/cudapy/test_gufunc.py
matmulcore*_get_matmulcore_gufunc.<locals>.matmulcore   sp     wwwwqA1XQ$qAdGqAwa400G "      )r   r   )dtyper!   s     r    _get_matmulcore_gufuncr%      sM    $uQT{E!Q$Kq!t=>% 1 1 r#   z&ufunc API unsupported in the simulatorc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestCUDAGufunc   c                    [        5       nSn[        R                  " US-  S-  [        R                  S9R	                  USS5      n[        R                  " US-  S-  [        R                  S9R	                  USS5      nU" X45      n[        R
                  " X45      nU R                  [        R                  " XV5      5        g N      r$      r%   nparanger   reshapematmul
assertTrueallcloseselfgufunc	matrix_ctr   r   r   Golds          r    test_gufunc_small TestCUDAGufunc.test_gufunc_small!   s    ')	IIi!ma'rzz:BB9aCDFIIi!ma'rzz:BB9aCDF 1LyyA,-r#   c                    [        5       nSn[        R                  " US-  S-  [        R                  S9R	                  USS5      n[        R                  " US-  S-  [        R                  S9R	                  USS5      n[
        R                  " U5      nU" X55      R                  5       n[        R                  " X45      nU R                  [        R                  " Xg5      5        g r*   )r%   r0   r1   r   r2   r	   	to_devicecopy_to_hostr3   r4   r5   )r7   r8   r9   r   r   dBr   r:   s           r    test_gufunc_auto_transfer(TestCUDAGufunc.test_gufunc_auto_transfer/   s    ')	IIi!ma'rzz:BB9aCDFIIi!ma'rzz:BB9aCDF ^^A1M&&(yyA,-r#   c                    [        5       nSn[        R                  " US-  S-  [        R                  S9R	                  USS5      n[        R                  " US-  S-  [        R                  S9R	                  USS5      nU" X45      n[        R
                  " X45      nU R                  [        R                  " XV5      5        g )N  r+   r,   r-   r.   r/   r6   s          r    test_gufuncTestCUDAGufunc.test_gufunc?   s    ')	IIi!ma'rzz:BB9aCDFIIi!ma'rzz:BB9aCDF 1LyyA,-r#   c                    [        5       nSn[        R                  " US-  S-  [        R                  S9R	                  SSSS5      n[        R                  " US-  S-  [        R                  S9R	                  SSSS5      nU" X45      n[        R
                  " X45      nU R                  [        R                  " XV5      5        g )Nd   r+   r,   r-      r.   r/   r6   s          r    test_gufunc_hidim TestCUDAGufunc.test_gufunc_hidimM   s    ')	IIi!ma'rzz:BB1b!QOIIi!ma'rzz:BB1b!QO1LyyA,-r#   c                    [        [        S9n[        R                  R	                  SSS5      n[        R                  R	                  SS5      n[        R
                  " X#5      nU" X#5      n[        R                  R                  XE5        U" U[        R                  " US5      5      n[        R                  R                  XF5        g )Nr-   
      )rM      rO   )	r%   r   r0   randomrandnr3   testingassert_allclosetile)r7   r8   XYgoldres1res2s          r    test_gufunc_new_axis#TestCUDAGufunc.test_gufunc_new_axisY   s    'g6IIOOB1%IIOOAq!yya|


""4.aJ/0


""4.r#   c                    [        5       nSn[        R                  " US-  S-  [        R                  S9R	                  USS5      n[        R                  " US-  S-  [        R                  S9R	                  USS5      n[
        R                  " 5       n[
        R                  " X55      n[
        R                  " XE5      n[
        R                  " SUR                  US9nU" XgXS9nUR                  US	9n	UR                  5         [        R                  " X45      n
U R                  [        R                  " X5      5        g )
NrD   r+   r,   r-   r.   )rD   r+   r.   )r   r$   stream)outr]   )r]   )r%   r0   r1   r   r2   r	   r]   r>   device_arrayr$   r?   synchronizer3   r4   r5   )r7   r8   r9   r   r   r]   dAr@   dCr   r:   s              r    test_gufunc_stream!TestCUDAGufunc.test_gufunc_streamh   s    ') 	IIi!ma'rzz:BB9aCDFIIi!ma'rzz:BB9aCDF ^^A&^^A&\PB2OO6O*yyA,-r#   c                    [        [        [        S S  [        S S  5      /SSS9S 5       n[        R                  " S[        R                  S9S-   n[        R
                  " U5      nU" X#S9  [        R                  R                  X#5        g )	N(x)->(x)r	   r   c                 H    [        UR                  5       H	  nX   X'   M     g Nr   sizer   r   r   s      r    copy&TestCUDAGufunc.test_copy.<locals>.copy        166]t #r#   rM   r-   rO   r^   r   r   r   r0   r1   
zeros_likerR   rS   r7   rl   r   r   s       r    	test_copyTestCUDAGufunc.test_copy   su    	d71:wqz23"
$	
$	 IIb

+a/MM!Q


""1(r#   c                    [        [        S S  [        S S  4/SSS9S 5       n[        R                  " S[        R                  S9S-   n[        R                  " U5      nU" X#S9  U R                  [        R                  " X#5      5        g )	Nrf   r	   r   c                 H    [        UR                  5       H	  nX   X'   M     g rh   ri   rk   s      r    rl   9TestCUDAGufunc.test_copy_unspecified_return.<locals>.copy   rn   r#   rM   r-   rO   ro   )r   r   r0   r1   rq   r4   r5   rr   s       r    test_copy_unspecified_return+TestCUDAGufunc.test_copy_unspecified_return   sx     
wqz71:./"
$	
$	 IIb

+a/MM!QA)*r#   c                 &   [        [        [        S S  [        S S  5      /SSS9S 5       n[        R                  " S[        R                  S9S-   n[        R
                  " U5      nU" X#S9  U R                  [        R                  " X#5      5        g )	Nrf   r	   r   c                 H    [        UR                  5       H	  nX   X'   M     g rh   ri   rk   s      r    rl   *TestCUDAGufunc.test_copy_odd.<locals>.copy   rn   r#      r-   rO   ro   )r   r   r   r0   r1   rq   r4   r5   rr   s       r    test_copy_oddTestCUDAGufunc.test_copy_odd   sx    	d71:wqz23"
$	
$	 IIb

+a/MM!QA)*r#   c           	      ^   [        [        [        S S 2S S 24   [        S S 2S S 24   5      /SSS9S 5       n[        R                  " S[        R                  S9R                  SS5      S	-   n[        R                  " U5      nU" X#S
9  U R                  [        R                  " X#5      5        g )Nz(x, y)->(x, y)r	   r   c                     [        UR                  S   5       H,  n[        UR                  S   5       H  nXU4   XU4'   M     M.     g )Nr   rO   r   r   )r   r   xys       r    copy2d*TestCUDAGufunc.test_copy2d.<locals>.copy2d   sC     1771:&qwwqz*A1gAdG + 'r#   r(   r-   r.      rO   ro   )	r   r   r   r0   r1   r2   rq   r4   r5   )r7   r   r   r   s       r    test_copy2dTestCUDAGufunc.test_copy2d   s    	d71a4='!Q$-89%"
$	&
$	&
 IIb

+33Aq9A=MM!qA)*r#   c                 |  ^ [        [        [        S S  [        S S  5      /SSS9S 5       m[        R                  U4S j5       n[
        R                  " S5      R                  S5      n[
        R                  " U5      nSnU R                  [        U5         US	   " X#5        S S S 5        g ! , (       d  f       g = f)
Nz(n)->(n)r	   r   c                 N    [        U R                  S   5       H	  nX   X'   M     g r   r   )r   br   s      r    gufunc_copyDTestCUDAGufunc.test_not_supported_call_from_jit.<locals>.gufunc_copy   s$     1771:&t 'r#   c                    > T" X5      $ rh    )r   r   r   s     r    cuda_jitATestCUDAGufunc.test_not_supported_call_from_jit.<locals>.cuda_jit   s    q$$r#      r   z#Untyped global name 'gufunc_copy'.*)rO   rO   )r   r   r   r	   jitr0   r1   astyperq   assertRaisesRegexr   )r7   r   r   r   msgr   s        @r     test_not_supported_call_from_jit/TestCUDAGufunc.test_not_supported_call_from_jit   s    	d58U1X./
0	
0	 
	% 
	% IIi ''0MM!3##K5TN1  655s   B--
B;c           	         [        S/SSS9S 5       n[        R                  R                  S5      R	                  S5      n[        R                  R                  S5      R	                  S5      n[        R
                  " UR                  S   5      R	                  S5      n[        S	S
5         [        R                  " SS9 nU" X#U5        U R                  US   R                  [        5        U R                  S[        US   R                  5      5        U R                  S[        US   R                  5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N(void(float32[:], float32[:], float32[:])(n),(n)->(n)r	   r   c                 \    U R                   S   n[        U5       H  nX   X   -  X$'   M     g r   r   ar   distlenr   s        r    numba_dist_cudaMTestCUDAGufunc.test_inefficient_launch_configuration.<locals>.numba_dist_cuda   .     ''!*C3Z$+  r#   r   r   r   CUDA_LOW_OCCUPANCY_WARNINGSrO   Trecordz	Grid sizezlow occupancy)r   r0   rP   randr   zerosr   r   warningscatch_warningsassertEqualcategoryr   assertInstrmessage)r7   r   r   r   r   ws         r    %test_inefficient_launch_configuration4TestCUDAGufunc.test_inefficient_launch_configuration   s   	@A#F
4	&
4	&
 IINN9%,,Y7IINN9%,,Y7xx
#**95:A>((5d+  10GHk3qt||+<=os1Q4<</@A	 6 ?>55 ?>s%   -E!A=E?E!
E	E!!
E/c                 :   [        S/SSSS9S 5       n[        R                  R                  S5      R	                  S5      R                  S	5      n[        R                  R                  S5      R	                  S5      R                  S	5      n[        R                  " U5      n[        S
S5         [        R                  " SS9 nU" X#U5        U R                  [        U5      S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   Tr	   )nopythonr   c                 \    U R                   S   n[        U5       H  nX   X   -  X$'   M     g r   r   r   s        r    numba_dist_cuda2LTestCUDAGufunc.test_efficient_launch_configuration.<locals>.numba_dist_cuda2   r   r#   i   r   )i   r+   r   rO   r   r   )r   r0   rP   r   r   r2   rq   r   r   r   r   r   )r7   r   r   r   r   r   s         r    #test_efficient_launch_configuration2TestCUDAGufunc.test_efficient_launch_configuration   s    	@A#d6
C	&
C	&
 IINN:&--i8GK  	
IINN:&--i8GK  	
}}Q:A>((5 t,  Q+ 6 ?>55 ?>s$   0D%C;*D;
D		D
Dc           	      ^   S n[        [        [        S S  [        S S  5      /SSSS9" U5        U R                  [        5       n[        [        [        S S  [        S S  5      /SSSS9" U5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nc                     g rh   r   r   r   s     r    foo.TestCUDAGufunc.test_nopython_flag.<locals>.foo       r#   rf   r	   T)r   r   Fznopython flag must be True)r   r   r   assertRaises	TypeErrorr   r   	exception)r7   r   raisess      r    test_nopython_flag!TestCUDAGufunc.test_nopython_flag   s    	 	T'!*gaj12Jv!	##&	( y)Vgaj'!*56
%77:< * 	5s6;K;K7LM *)s   ,B
B,c           	         S nU R                  [        5       n[        [        [        S S  [        S S  5      /SSSSS9" U5        S S S 5        Sn[        WR                  5      nU R                  US [        U5       U5        U[        U5      S  R                  5       R                  S5      nU Vs/ s H  ofR                  S	5      PM     nnU R                  [        S
S/5      [        U5      5        g ! , (       d  f       N= fs  snf )Nc                     g rh   r   r   s     r    r   .TestCUDAGufunc.test_invalid_flags.<locals>.foo  r   r#   rf   r	   TF)r   what1ever2z/The following target options are not supported:,z'" r   r   )r   r   r   r   r   r   r   r   r   stripsplitset)r7   r   r   headr   itemsr   s          r    test_invalid_flags!TestCUDAGufunc.test_invalid_flags  s    	 y)Vgaj'!*56
%T@@CE * A&""#Zc$i$/CIJ%%'--c2*/0%Q%0gw/0#e*= *) 1s   -C52D5
Dc                 Z   [        [        [        S S  [        S S  5      /SSS9S 5       n[        R                  " S[        R                  S9=p#U R                  [        5       nU" X#US9  S S S 5        SnU R                  [        WR                  5      U5        g ! , (       d  f       N6= f)	Nrf   r	   r   c                     g rh   r   )inpr^   s     r    r   2TestCUDAGufunc.test_duplicated_output.<locals>.foo  s    r#   rM   r-   ro   z<cannot specify argument 'out' as both positional and keyword)
r   r   r   r0   r   r   
ValueErrorr   r   r   )r7   r   r   r^   r   r   s         r    test_duplicated_output%TestCUDAGufunc.test_duplicated_output  s    	d71:wqz23Z	O	 
P	 HHRrzz22z*fc" + MV--.4	 +*s   $B
B*c                 &   [        [        S S  [        S S  [        S S  4/SSS9S 5       nU" X5      n[        R                  " [        R                  " U5      [        R                  " U5      -  SS9n[        R
                  R                  XT5        g )Nz(n),(n)->()r	   r   c                 ^    Sn[        [        U 5      5       H  nX0U   X   -  -  nM     X2S'   g r   )r   r   )r   r   rsr   s        r    	gu_reduce1TestCUDAGufunc.check_tuple_arg.<locals>.gu_reduce  s4     A3q6]qTAD[  #aDr#   rO   )axis)r   r   r0   sumasarrayrR   assert_equal)r7   r   r   r   r   expecteds         r    check_tuple_argTestCUDAGufunc.check_tuple_arg  sx    	wqz71:wqz:;]"
$	
$	 aO66"**Q-"**Q-7a@


,r#   c                 .    SnSnU R                  X5        g )N)      ?       @      @      @      @      @)      ?      @      @      @      @      @)r   r7   r   r   s      r    test_tuple_of_tuple_arg&TestCUDAGufunc.test_tuple_of_tuple_arg+  s    Q"r#   c                 ~    [        SS5      nU" SSSS9U" SSSS94nU" S	S
SS9U" SSSS94nU R                  X#5        g )NPointr   r   zr   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r7   r   r   r   s       r    test_tuple_of_namedtuple_arg+TestCUDAGufunc.test_tuple_of_namedtuple_arg2  sZ    7O4SC3'SC3')SC3'SC3')Q"r#   c                     [         R                  " S5      [         R                  " S5      4n[         R                  " S5      [         R                  " S5      4nU R                  X5        g )Nr   r   r   r   )r0   r   r   r   s      r    test_tuple_of_array_arg&TestCUDAGufunc.test_tuple_of_array_arg:  sN    ZZ(ZZ(*ZZ(ZZ(*Q"r#   c                 P    [        5       nU R                  UR                  S5        g )Nr!   )r%   r   __name__)r7   r8   s     r    test_gufunc_nameTestCUDAGufunc.test_gufunc_nameA  s    '),7r#   c           	      (   U R                  [        5       n[        [        [        S S  [        S S  5      /SSS9S 5       nS S S 5        [	        WR
                  5      nU R                  SU5        U R                  SU5        g ! , (       d  f       NH= f)Nz(m)->(m)r	   r   c                     g rh   r   )r   r   s     r    f.TestCUDAGufunc.test_bad_return_type.<locals>.fG  s    r#   z+guvectorized functions cannot return valueszspecifies int32 return type)r   r   r   r   r   r   r   )r7   ter  r   s       r    test_bad_return_type#TestCUDAGufunc.test_bad_return_typeE  s|    y)R%a%(34jP Q *
 ",,CSI3S9 *)s   +B
Bc                    [        [        S S  [        S S  [        S S  4/SSS9S 5       n[        R                  " S5      nU R	                  [
        5       nU" U5        S S S 5        [        WR                  5      nU R                  SU5        U R                  SU5        U R                  SU5        U R	                  [
        5       nU" X"X"5        S S S 5        [        UR                  5      nU R                  SU5        U R                  SU5        U R                  S	U5        g ! , (       d  f       N= f! , (       d  f       Nk= f)
Nz(m),(m)->(m)r	   r   c                     g rh   r   r   s      r    r  ;TestCUDAGufunc.test_incorrect_number_of_pos_args.<locals>.fP       r#   r.   %gufunc accepts 2 positional argumentszor 3 positional argumentsGot 1 positional argument.zGot 4 positional arguments.	r   r   r0   r1   r   r   r   r   r   r7   r  arrr  r   s        r    !test_incorrect_number_of_pos_args0TestCUDAGufunc.test_incorrect_number_of_pos_argsO  s   	uQxq5845#F
4	
4	 iil y)RcF * ",,=sC1372C8 y)Rc! * ",,=sC1373S9 *) *)s   	D%
D6%
D36
Er   N)r  
__module____qualname____firstlineno__r;   rA   rE   rJ   rZ   rc   rs   rx   r~   r   r   r   r   r   r   r   r   r   r   r  r  r  r  __static_attributes__r   r#   r    r'   r'      sw    .. .
./.0)+++!(B&,&N>
5-###8::r#   r'   c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestMultipleOutputsij  c           	         [        [        [        S S  [        S S  [        S S  5      /SSS9S 5       n[        R                  " S[        R                  S9S-   n[        R
                  " U5      n[        R
                  " U5      nU" X#U5        [        R                  R                  X#5        [        R                  R                  X$5        g )N(x)->(x),(x)r	   r   c                 T    [        UR                  5       H  nX   X'   X   X#'   M     g rh   ri   r   r   r   r   s       r    rl   KTestMultipleOutputs.test_multiple_outputs_same_type_passed_in.<locals>.copym  s(     166]tt #r#   rM   r-   rO   rp   )r7   rl   r   r   r   s        r    )test_multiple_outputs_same_type_passed_in=TestMultipleOutputs.test_multiple_outputs_same_type_passed_inl  s    	d71:wqz71:>?#"
$	
$	
 IIb

+a/MM!MM!Q1


""1(


""1(r#   c           	         [        [        [        S S  [        S S  [        S S  5      /SSS9S 5       n[        R                  " S[        R                  S9S-   n[        R
                  " U5      n[        R
                  " U5      nU" X#U5        [        R                  R                  X#5        [        R                  R                  US-  U5        g )	Nr"  r	   r   c                 Z    [        UR                  5       H  nX   X'   X   S-  X#'   M     g Nr+   ri   r$  s       r    copy_and_doubleRTestMultipleOutputs.test_multiple_outputs_distinct_values.<locals>.copy_and_double~  ,     166]ttax #r#   rM   r-   rO   r+   rp   r7   r+  r   r   r   s        r    %test_multiple_outputs_distinct_values9TestMultipleOutputs.test_multiple_outputs_distinct_values|  s    	d71:wqz71:>?#"
$	 
$	 
 IIb

+a/MM!MM!a 


""1(


""1q5!,r#   c           	      L   [        [        [        S S  [        S S  [        S S  5      /SSS9S 5       n[        R                  " S[        R                  S9S-   nU" U5      u  p4[        R
                  R                  X#5        [        R
                  R                  US-  U5        g )	Nr"  r	   r   c                 Z    [        UR                  5       H  nX   X'   X   S-  X#'   M     g r*  ri   r$  s       r    r+  LTestMultipleOutputs.test_multiple_output_allocation.<locals>.copy_and_double  r-  r#   rM   r-   rO   r+   )r   r   r   r0   r1   rR   rS   r.  s        r    test_multiple_output_allocation3TestMultipleOutputs.test_multiple_output_allocation  s    	d71:wqz71:>?#"
$	 
$	 
 IIb

+a/q!


""1(


""1q5!,r#   c           	         [        [        [        S S  [        S S  [        S S  5      /SSS9S 5       n[        R
                  " S[        R                  S9S-   n[        R                  " U5      n[        R                  " U[        R                  S9nU" X#U5        [        R                  R                  X#5        [        R                  R                  U[        R                  " S5      -  U5        g )	Nr"  r	   r   c                 Z    [        UR                  5       H  nX   X'   X   S-  X#'   M     g )Nr   ri   r$  s       r    copy_and_multiplyJTestMultipleOutputs.test_multiple_output_dtypes.<locals>.copy_and_multiply  s,     166]ttcz #r#   rM   r-   rO   r   )	r   r   r   r   r0   r1   rq   rR   rS   )r7   r8  r   r   r   s        r    test_multiple_output_dtypes/TestMultipleOutputs.test_multiple_output_dtypes  s    	d58U1Xwqz:;#"
$	"
$	"
 IIb)A-MM!MM!2::.!"


""1(


""1rzz##6:r#   c                    [        [        S S  [        S S  [        S S  [        S S  4/SSS9S 5       n[        R                  " S5      nU R	                  [
        5       nU" U5        S S S 5        [        WR                  5      nU R                  SU5        U R                  SU5        U R                  SU5        U R	                  [
        5       nU" X"X"U5        S S S 5        [        UR                  5      nU R                  SU5        U R                  SU5        U R                  S	U5        g ! , (       d  f       N= f! , (       d  f       Nk= f)
Nz(m),(m)->(m),(m)r	   r   c                     g rh   r   )r   r   r   r   s       r    r  @TestMultipleOutputs.test_incorrect_number_of_pos_args.<locals>.f  r  r#   r.   r  zor 4 positional argumentsr  zGot 5 positional arguments.r  r  s        r    r  5TestMultipleOutputs.test_incorrect_number_of_pos_args  s   	uQxq58U1X>?'
8	
8	 iil y)RcF * ",,=sC1372C8 y)Rc#& * ",,=sC1373S9 *) *)s   	D.D?.
D<?
Er   N)
r  r  r  r  r&  r/  r4  r:  r  r  r   r#   r    r   r   j  s    ) -"-;":r#   r   __main__)numpyr0   collectionsr   numbar   r   r   r   r   r	   numba.cuda.testingr
   r   unittestr   numba.core.errorsr   r   numba.tests.supportr   r%   r'   r   r  mainr   r#   r    <module>rI     s     " / /   <   B / ")   9:H:\ H: ;H:V
 9:Y:, Y: ;Y:x zMMO r#   