
    sh>n                     T   S SK r S SKrS SKrS SKJrJrJr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 rS r " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\S:X  a  \ R<                  " 5         gg)    N)voidfloat32float64int32int64jitguvectorize)TypingError)GUVectorize)tagTestCasec           
          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)zdocstring for matmulcorer   N)shaperange)	ABCmnpijks	            t/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/npyufunc/test_gufunc.py
matmulcorer      sn    77DA77DA1XqAAdG1XQ$1T7Q!tW,,       c                     X-  U-   US'   g Nr    )axyouts       r   axpyr$      s    UaZCFr   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)
TestGUFunc   cpuc                 j   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[         R
                  R                  XVSSS9  g 	Ni        dtype   h㈵>:0yE>rtolatolnparanger   reshapematmultestingassert_allclose)selfgufunc	matrix_ctr   r   r   Golds          r   check_matmul_gufuncTestGUFunc.check_matmul_gufunc   s    	IIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRS1Lyy


""1D"Ar   c                     [        [        SU R                  S9nUR                  [        S S 2S S 24   [        S S 2S S 24   [        S S 2S S 24   45        UR                  5       nU R                  U5        g N(m,n),(n,p)->(m,p)target)r   r   rF   addr   build_ufuncr@   r<   r=   s     r   test_gufuncTestGUFunc.test_gufunc(   s_    Z)=$(KK1

GAqDM71a4='!Q$-@A##%  (r   c           
          [        [        [        S S 2S S 24   [        S S 2S S 24   [        S S 2S S 24   5      /SU R                  S9" [        5      nU R                  U5        g rC   )r	   r   r   rF   r   r@   rI   s     r   test_guvectorize_decor!TestGUFunc.test_guvectorize_decor0   sT    d71Q3<1wqs|LM1$(KK11;= 	  (r   c                    [        [        SU R                  S9nUR                  S5        UR	                  5       n[
        R                  " S[
        R                  S9nU" X"U5      n[
        R                  R                  X2U-  U-   5        g )N(), (), () -> ()rE   z(intp, intp, intp, intp[:])
   r-   )
r   r$   rF   rG   rH   r6   r7   intpr:   assert_equal)r<   r=   r!   r#   s       r   test_ufunc_likeTestGUFunc.test_ufunc_like7   sk     T#5dkkJ

01##%IIb(Q1o


UQY/r   c                 D   [        S/S5      S 5       n[        R                  " S5      nU" USS9n[        R                  " USS9n[        R                  R                  X45        [        R                  " U5      nU" X%SS9  [        R                  R                  XT5        g )Nzf8[:],f8[:](n)->(n)c                 \    Sn[        U R                  S   5       H  nX U   -  nX!U'   M     g r   r   r   r!   resaccr   s       r   	my_cumsum'TestGUFunc.test_axis.<locals>.my_cumsumF   0    C1771:&tA 'r         r   axisr#   rd   )r	   r6   onescumsumr:   rS   
zeros_like)r<   r]   r!   r"   expectedout_kws         r   	test_axisTestGUFunc.test_axisD   s    	m_j	1	 
2	 GGHaa 99QQ'


,q!!a(


1r   c                 4   [        [        S S  [        [        S S  4/S5      S 5       nU R                  SUR                  5        U R                  SUR                  5        U R                  SUR
                  5        U R                  SUR                  5        g )N(n),()->(n)c                 T    [        U R                  S   5       H  nX   U-   X#'   M     g)docstring for gufuncr   NrY   r!   r"   r[   r   s       r   r=   )TestGUFunc.test_docstring.<locals>.gufuncX   (     1771:& 'r   z numba.tests.npyufunc.test_gufuncr=   z)TestGUFunc.test_docstring.<locals>.gufuncrp   )r	   r   assertEqual
__module____name____qualname____doc__rI   s     r   test_docstringTestGUFunc.test_docstringW   s    	uQxa12M	B	" 
C	"
 	;V=N=NO6??3DfFYFYZ/@r   r   N)rv   ru   rw   __firstlineno__rF   r@   rJ   rM   rT   rk   ry   __static_attributes__r   r   r   r&   r&      s'    FB))02&
Ar   r&   c                   0    \ rS rSrSrS rS rS rS rSr	g)	TestMultipleOutputsd   r(   c                 j   [        SU R                  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)rE   c                 T    [        UR                  5       H  nX   X'   X   X#'   M     g Nr   sizer   r   r   r   s       r   copyKTestMultipleOutputs.test_multiple_outputs_same_type_passed_in.<locals>.copyh   s(     166]tt #r   rQ   r-      r	   rF   r6   r7   r   rh   r:   r;   )r<   r   r   r   r   s        r   )test_multiple_outputs_same_type_passed_in=TestMultipleOutputs.test_multiple_outputs_same_type_passed_ing   s    	^ KK
)	
)	
 IIb

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


""1(


""1(r   c                 r   [        SU R                  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   rE   c                 Z    [        UR                  5       H  nX   X'   X   S-  X#'   M     g Nr+   r   r   s       r   copy_and_doubleRTestMultipleOutputs.test_multiple_outputs_distinct_values.<locals>.copy_and_doublex   s,     166]ttax #r   rQ   r-   r   r+   r   )r<   r   r   r   r   s        r   %test_multiple_outputs_distinct_values9TestMultipleOutputs.test_multiple_outputs_distinct_valuesv   s    	^ KK
)	 
)	 
 IIb

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


""1(


""1q5!,r   c                    [        SU R                  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   rE   c                 Z    [        UR                  5       H  nX   X'   X   S-  X#'   M     g )N      ?r   r   s       r   copy_and_multiplyJTestMultipleOutputs.test_multiple_output_dtypes.<locals>.copy_and_multiply   s,     166]ttcz #r   rQ   r-   r   r   )	r	   rF   r6   r7   r   rh   r   r:   r;   )r<   r   r   r   r   s        r   test_multiple_output_dtypes/TestMultipleOutputs.test_multiple_output_dtypes   s    	^ KK
)	"
)	"
 IIb)A-MM!MM!2::.!"


""1(


""1rzz##6:r   c                    [        SU R                  S9S 5       n[        R                  " S[        R                  S9nSnU R                  [        5       nU" U5        S S S 5        U R                  U[        WR                  5      5        U R                  [        5       nU" X"X"U5        S S S 5        U R                  U[        UR                  5      5        g ! , (       d  f       N= f! , (       d  f       NE= f)Nz(m),(m)->(m),(m)rE   c                     g r   r   )r!   r"   zws       r   f@TestMultipleOutputs.test_incorrect_number_of_pos_args.<locals>.f   s    r   r/   r-   z"Too few arguments for function 'f')
r	   rF   r6   r7   r   assertRaises	TypeErrorassertInstr	exception)r<   r   arrmsgtes        r   !test_incorrect_number_of_pos_args5TestMultipleOutputs.test_incorrect_number_of_pos_args   s    	'	<	 
=	 ii* 3y)RcF *c3r||,- y)Rc#& *c3r||,- *)
 *)s   	C C*
C'*
C8r   N)
rv   ru   rw   r{   rF   r   r   r   r   r|   r   r   r   r~   r~   d   s    F)- ; .r   r~   c                       \ rS rSrSrSrSrg)TestGUFuncParallel   Fparallelr   Nrv   ru   rw   r{   _numba_parallel_test_rF   r|   r   r   r   r   r          !Fr   r   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestDynamicGUFunc   r(   c                 h   S n[        [        SU R                  SS9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S-  S	-  [        R
                  S9R                  USS	5      nU" X$XV5        [        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S-  S	-  [        R                  S9R                  USS	5      n	U" X'X5        U R                  [        UR                  5      S5        g )
Nc                     [         R                  " X5      nU " XU5        [         R                  R                  X4SSS9  g )Nr0   r1   r2   )r6   r9   r:   r;   )r=   r   r   r   r?   s        r   r@   BTestDynamicGUFunc.test_dynamic_matmul.<locals>.check_matmul_gufunc   s1    99Q?D1OJJ&&qT&Er   rD   TrF   
is_dynamicrQ   r+   r,   r-   r/   )r   r   rF   r6   r7   r   r8   r   rt   lentypes)
r<   r@   r=   r>   Ai64Bi64Ci64r   r   r   s
             r   test_dynamic_matmul%TestDynamicGUFunc.test_dynamic_matmul   sc   	F
 Z)=$(KKDB	yyQ*"((;CCIqRSTyyQ*"((;CCIqRSTyyQ*"((;CCIqRSTF$5IIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSFq,V\\*A.r   c                     S n[        [        SU R                  SS9n[        R                  " S[        R
                  S9nU" X#5        g )Nc                 *   [         R                  " SUR                  S9n[         R                  " SUR                  S9nU " XX5        U " XXS9  X-  U-   n[         R                  R	                  X$5        [         R                  R	                  X45        g )NrQ   r-   r#   )r6   zerosr.   r:   rS   )r=   r!   r#   rj   goldens        r   check_ufunc_outputETestDynamicGUFunc.test_dynamic_ufunc_like.<locals>.check_ufunc_output   sm    ((2QWW-CXXb0F1 1'UQYFJJ##C0JJ##F3r   rP   Tr   rQ   r-   )r   r$   rF   r6   r7   rR   )r<   r   r=   r!   s       r   test_dynamic_ufunc_like)TestDynamicGUFunc.test_dynamic_ufunc_like   s=    	4 T#5dkk(,.IIb(6%r   c                 &   [        SU R                  SS9S 5       nU R                  UR                  5        [        R
                  " S[        R                  S9R                  SS5      n[        R                  " S[        R                  S9nU" X#5        [        UR                  S	   5       H'  nU R                  X4   X$   R                  5       5        M)     S
nU R                  [        U5         U" U5        SSS5        g! , (       d  f       g= f)_
Note that scalar output is a 0-dimension array that acts as
a pointer to the output location.
(n)->()TrF   nopythonc                 \    Sn[        U R                  S   5       H
  nX U   -  nM     X!S'   g Ng        r   r   rY   inpr#   tmpr   s       r   sum_row=TestDynamicGUFunc.test_dynamic_scalar_output.<locals>.sum_row   s0    C399Q<(1v )Gr   0u  r-   '     r   z)Too few arguments for function 'sum_row'.N)r	   rF   
assertTruer   r6   r7   r   r8   r   r   r   rt   sumassertRaisesRegexr   )r<   r   r   r#   r   r   s         r   test_dynamic_scalar_output,TestDynamicGUFunc.test_dynamic_scalar_output   s     
Yt{{T	B	 
C	 	**+iiRXX.66ua@hhuBHH- syy|$ASVSVZZ\2 % :##Is3CL 433s   0	D
Dc                 l   [        S5      S 5       n[        R                  " S5      n[        R                  " USS9n[        R                  " U5      nU" X$SS9  [        R
                  R                  XC5        [        R                  " U5      nU" X%SS9  [        R
                  R                  XS5        g )NrW   c                 \    Sn[        U R                  S   5       H  nX U   -  nX!U'   M     g r   rY   rZ   s       r   r]   .TestDynamicGUFunc.test_axis.<locals>.my_cumsum   r_   r   r`   r   rc   re   )r	   r6   rf   rg   rh   r:   rS   )r<   r]   r!   ri   r"   rj   s         r   rk   TestDynamicGUFunc.test_axis   s    	Z	 	 
!	 GGH99QQ'MM(#!Q


,q!!a(


1r   c                    [        S5      S 5       n/ SQnU H%  n[        X5      nU R                  USU< S35        M'     [        R                  " / SQ5      n[        R                  " / SQ5      nU" XV5        U R                  U[        R                  " / SQ5      5        U R                  UR                  S5        U R                  [        5       nUR                  U5        S S S 5        U R                  [        WR                  5      S	5        U R                  [        5       nUR                  U5        S S S 5        U R                  [        UR                  5      S	5        U R                  [        5       nUR                  US
S/5        S S S 5        U R                  [        UR                  5      S	5        U R                  [        5       nUR!                  XU5        S S S 5        U R                  [        UR                  5      S5        g ! , (       d  f       GN4= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nh= f)NrW   c                 \    Sn[        U R                  S   5       H  nX U   -  nX!U'   M     g r   rY   rZ   s       r   r=   8TestDynamicGUFunc.test_gufunc_attributes.<locals>.gufunc  r_   r   )	signature
accumulateatouterreducereduceatzdynamic gufunc not exporting ""r   r+   r   r,   r   r   r   r   r   r      rQ   z-Reduction not defined on ufunc with signaturer   r+   z?method outer is not allowed in ufunc with non-trivial signature)r	   hasattrr   r6   arrayassertPreciseEqualrt   r   r   RuntimeErrorr   r   r   r   r   r   r   )r<   r=   attrsattrcontainsr    r[   raisess           r   test_gufunc_attributes(TestDynamicGUFunc.test_gufunc_attributes  s   	Z	 	 
!	 QDv,HOOHT&ST  HH\"hh|$qRXXm%<=
 	)):6|,a  -V--.0_`|,MM! -V--.0_`|,OOA1v& -V--.0_`y)VLL *V--.0qr -, -, -, *)s0   H&H#:H4I
H #
H14
I
Ic                    [        S5      S 5       nU R                  UR                  5        [        R                  " / SQ5      n[        R                  " / SQ5      n[        R                  " / SQ5      nU" X#U5        U R                  U[        R                  " / SQ5      5        U R                  UR                  5        U R                  UR                  U5      S5        U R                  UR                  U5      [        R                  " / SQ5      5        U R                  UR                  S	S
/S
S/5      [        R                  " S
S/SS//5      5        U R                  UR                  US	S/5      [        R                  " SS/5      5        [        R                  " / SQ5      n[        R                  " S
S/5      nUR                  US	S
/U5        U R                  U[        R                  " / SQ5      5        g )Nz	(),()->()c                     X-   US'   g r   r   r!   r"   r[   s      r   rG   6TestDynamicGUFunc.test_gufunc_attributes2.<locals>.add7  s    UCFr   r   )r,   r   r+   r   r   )r/   r/   r/   r/   rQ   r   r   r   r+   r      )r+   r,   r   r,   )r	   assertIsNoner   r6   r   r   rt   r   r   r   r   r   )r<   rG   r    br[   r!   r"   s          r   test_gufunc_attributes2)TestDynamicGUFunc.test_gufunc_attributes26  sz   	[	!	 
"	 	#--(HH\"HH\"hh|$A#RXXl%;< 	#--(A+q 1288M3JK		1a&1a& 9288aVaQRVDT;UVQA 71a&9IJHH\"HHaVq1a&!288L#9:r   r   N)rv   ru   rw   r{   rF   r   r   r   rk   r   r  r|   r   r   r   r   r      s'    F/.&(<2(&sP;r   r   c                   :    \ rS rSrSrSrS rS rS rS r	S r
S	rg
)TestGUVectorizeScalariQ  z4
Nothing keeps user from out-of-bound memory access
r(   c                 :   [        S/SU R                  SS9S 5       n[        R                  " S[        R                  S9R                  SS	5      nU" U5      n[        UR                  S
   5       H'  nU R                  X4   X$   R                  5       5        M)     g)r   zvoid(int32[:], int32[:])r   Tr   c                 \    Sn[        U R                  S   5       H
  nX U   -  nM     X!S'   g r   rY   r   s       r   r   9TestGUVectorizeScalar.test_scalar_output.<locals>.sum_row]  s2     C399Q<(1v )Gr   r   r-   r   r   r   N)
r	   rF   r6   r7   r   r8   r   r   rt   r   )r<   r   r   r#   r   s        r   test_scalar_output(TestGUVectorizeScalar.test_scalar_outputW  s     
019 KK$
8	
8	 iiRXX.66ua@cl syy|$ASVSVZZ\2 %r   c                     [        S/SU R                  SS9S 5       n[        R                  " S[        R                  S9R                  SS	5      nU" US
5      nU R                  US
-  U5        g )Nzint32[:], int32[:], int32[:]rn   Tr   c                 Z    [        U R                  S   5       H  nX   US   -  X#'   M     g r   rY   r   r   r#   r   s       r   foo4TestGUVectorizeScalar.test_scalar_input.<locals>.foor  s,     399Q<(!A$ )r   rb   r-   rQ   r   r+   )r	   rF   r6   r7   r   r8   r   )r<   r  r   r#   s       r   test_scalar_input'TestGUVectorizeScalar.test_scalar_inputp  sn    	45} KK$
8	'
8	' iibhh/77A>#qk 	a-r   c                    S n[        S/SU R                  S9" U5      n[        R                  " S5      R	                  [        R
                  5      nU" US5      n[        R                  " U5      nU" USU5        [        R                  R                  XE5        [        R                  " S5      R	                  [        R
                  5      R                  SS5      nU" US5      n[        R                  " U5      n[        UR                  S   5       H  nU" X6   SXV   5        M     [        R                  R                  XE5        g )	Nc                 T    [        U R                  5       H  nXU   S-   -  X#'   M     g )Nr   r   r  s       r   pyfuncATestGUVectorizeScalar.test_scalar_input_core_type.<locals>.pyfunc  s&    388_!fqj) %r   int32[:], int32, int32[:]rn   rE   rQ   r+   ra   r   )r	   rF   r6   r7   astyper   rh   r:   rS   r8   r   r   )r<   r  	my_gufuncr   gotri   axs          r   test_scalar_input_core_type1TestGUVectorizeScalar.test_scalar_input_core_type  s   	*  !< = -'+{{44:<	
 iim""288,Q==%sAx 


. iim""288,44R;Q==%q)*B37Ax|, + 	

.r   c                     U R                  [        5       n[        S/SU R                  S9S 5       nS S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr  z(n),(n)->(n)rE   c                     g r   r   )r    r   cs      r   r  GTestGUVectorizeScalar.test_scalar_input_core_type_error.<locals>.pyfunc       r   z2scalar type int32 given for non scalar argument #2r   r   r	   rF   rt   r   r   r<   r   r  s      r   !test_scalar_input_core_type_error7TestGUVectorizeScalar.test_scalar_input_core_type_error  sg    y)V56 $-- *
 	MV--.	0 *)   A!!
A/c                     U R                  [        5       n[        S/SU R                  S9S 5       nS S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nzint32[:], int32[:]z
(m,n)->(n)rE   c                     g r   r   )r    r   s     r   r  8TestGUVectorizeScalar.test_ndim_mismatch.<locals>.pyfunc  r   r   z,type and shape signature mismatch for arg #1r!  r"  s      r   test_ndim_mismatch(TestGUVectorizeScalar.test_ndim_mismatch  sg    y)V./ $-- *
 	GV--.	0 *)r%  r   N)rv   ru   rw   r{   rx   rF   r  r  r  r#  r)  r|   r   r   r   r  r  Q  s'     F32./800r   r  c                       \ rS rSrSrSrSrg)TestGUVectorizeScalarParalleli  Fr   r   Nr   r   r   r   r,  r,    r   r   r,  c                   &    \ rS rSrS rS rS rSrg)TestGUVectorizePicklingi  c                 
   [        S/S5      S 5       n[        R                  " U5      n[        R                  " U5      nU R	                  UR
                  UR
                  5        U R	                  UR                  UR                  5        U R	                  UR                  UR                  5        U R	                  UR                  R                  UR                  R                  5        U R                  UR
                  5        UR                  5         U R                  UR
                  5        U R                  U" S5      U" S5      5        [        R                  " S5      nU R                  U" U5      U" U5      5        g)zNon-dynamic gufunc.
        zf8,f8[:]()->()c                     U S-  US S & g r   r   r!   r#   s     r   doubleFTestGUVectorizePickling.test_pickle_gufunc_non_dyanmic.<locals>.double      UCFr         ?rQ   N)r	   pickledumpsloadsrt   _frozenidentityr   gufunc_builder_sigsr   disable_compiler   r6   r7   )r<   r3  serclonedr   s        r   test_pickle_gufunc_non_dyanmic6TestGUVectorizePickling.test_pickle_gufunc_non_dyanmic  s#    
j\8	,	 
-	 ll6"c" 	8&//:**F,=,=>..44..44	6 	' ' 	sVC[9iimsVC[9r   c                 ^   [        SSS9S 5       n[        R                  " U5      n[        R                  " U5      nU R	                  UR
                  UR
                  5        U R	                  UR                  UR                  5        U R	                  UR                  UR                  5        U R	                  UR                  R                  UR                  R                  5        U R                  UR
                  5        [        R                  " S5      n[        R                  " S5      nU" SUS9  U" SUS9  U R                  XE5        [        R                  " S5      n[        R                  " U5      n[        R                  " U5      nU" XdS9  U" XeS9  U R                  XE5        g)	z:Dynamic gufunc w/o prepopulating before pickling.
        r0  r   r;  c                     U S-  US S & g r   r   r2  s     r   r3  LTestGUVectorizePickling.test_pickle_gufunc_dyanmic_null_init.<locals>.double  r5  r   r6  r   rQ   N)r	   r7  r8  r9  rt   r:  r;  r   r<  r=  assertFalser6   r   r   r7   rh   )r<   r3  r?  r@  expectr  r   s          r   $test_pickle_gufunc_dyanmic_null_init<TestGUVectorizePickling.test_pickle_gufunc_dyanmic_null_init  sM    
X	*	 
+	 ll6"c" 	8&//:**F,=,=>..44..44	6 	( !hhqkss,iims#mmC ss,r   c                 ~   [        SSS9S 5       n[        R                  " S5      n[        R                  " S5      nU" SUS9  [        R                  " S5      n[        R                  " U5      n[        R                  " U5      nU" XBS9  [
        R                  " U5      n[
        R                  " U5      nU R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  R                  UR                  R                  5        U R                  UR                  5        UR                  5         U R!                  UR                  5        [        R                  " S5      n[        R                  " S5      nU" SUS9  U" SUS9  U R#                  X#5        [        R                  " U5      n[        R                  " U5      nU" XBS9  U" XCS9  U R#                  X#5        g)	zDynamic gufunc prepopulated before pickling.

Once unpickled, we disable compilation to verify that the gufunc
compilation state is carried over.
r0  r   rD  c                     U S-  US S & g r   r   r2  s     r   r3  NTestGUVectorizePickling.test_pickle_gufunc_dynamic_initialized.<locals>.double  r5  r   r6  r   rQ   N)r	   r6   r   r7   rh   r7  r8  r9  rt   r:  r;  r   r<  r=  rG  r>  r   r   )r<   r3  rH  r  r   r?  r@  s          r   &test_pickle_gufunc_dynamic_initialized>TestGUVectorizePickling.test_pickle_gufunc_dynamic_initialized  s    
X	*	 
+	 !hhqksiims#mmC s ll6"c" 	8&//:**F,=,=>..44..44	6 	( 	 '!hhqkss,s#mmC ss,r   r   N)rv   ru   rw   r{   rA  rI  rN  r|   r   r   r   r.  r.    s    :: -D/-r   r.  c                       \ rS rSrSrS rS rS rS r\	R                  S 5       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)TestGUVectorizeJiti%  r(   c                   ^ [        SS9U4S j5       n[        R                  " SSS9R                  SSS	5      n[        R                  " S
5      n[        R
                  " U5      nU" X4U5        U R                  XSU-   5        g )NTr   c                    > T" XU5        g r   r   r!   r"   r[   r=   s      r   jit_add4TestGUVectorizeJit.check_add_gufunc.<locals>.jit_add)      1r   (   i8r-   r,   r+   r/   r   )r   r6   r7   r8   r   rh   r   )r<   r=   rV  r!   r"   r[   s    `    r   check_add_gufunc#TestGUVectorizeJit.check_add_gufunc(  sr    	d		 
	 IIb%--aA6HHSMmmAcU+r   c                 \    [        SSU R                  S9S 5       nU R                  U5        g )Nint64[:], int64, int64[:]rn   rE   c                 T    [        U R                  S   5       H  nX   U-   X#'   M     g r   rY   rq   s       r   rG   /TestGUVectorizeJit.test_add_static.<locals>.add4  rs   r   r	   rF   r[  r<   rG   s     r   test_add_static"TestGUVectorizeJit.test_add_static3  s5    	0- KK
)	"
)	" 	c"r   c                 \    [        SSU R                  S9S 5       nU R                  U5        g )Nr^  rn   rE   c                 T    [        U R                  S   5       H  nX   U-   X#'   M     g r   rY   rq   s       r   rG   9TestGUVectorizeJit.test_add_static_cast_args.<locals>.add>  rs   r   ra  rb  s     r   test_add_static_cast_args,TestGUVectorizeJit.test_add_static_cast_args<  s5    	0- KK
)	"
)	" 	c"r   c                 Z    [        SU R                  S9S 5       nU R                  U5        g )Nrn   rE   c                 T    [        U R                  S   5       H  nX   U-   X#'   M     g r   rY   rq   s       r   rG   0TestGUVectorizeJit.test_add_dynamic.<locals>.addG  &    1771:& 'r   ra  rb  s     r   test_add_dynamic#TestGUVectorizeJit.test_add_dynamicF  s/    	]4;;	7	" 
8	" 	c"r   c                 \    [        SU R                  SS9S 5       nU R                  U5        g )Nrn   T)rF   forceobjc                 T    [        U R                  S   5       H  nX   U-   X#'   M     g r   rY   rq   s       r   rG   0TestGUVectorizeJit.test_object_mode.<locals>.addP  rm  r   ra  rb  s     r   test_object_mode#TestGUVectorizeJit.test_object_modeN  s2    	]4;;	F	" 
G	" 	c"r   c                    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S-  S-  [         R                  S9R                  USS5      nU" X4U5        [         R                  " X45      n[         R
                  R                  XVSSS9  g r*   r5   )r<   jit_funcr>   r   r   r   r?   s          r   check_matmulTestGUVectorizeJit.check_matmulW  s    	IIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSqyy


""1D"Ar   c                    ^ [        SU R                  S9" [        5      m[        SS9U4S j5       nU R	                  U5        g )NrD   rE   TrS  c                    > T" XU5      $ r   r   )r   r   r   r=   s      r   
matmul_jit<TestGUVectorizeJit.test_njit_matmul_call.<locals>.matmul_jitg  s    !?"r   )r	   rF   r   r   rx  )r<   r|  r=   s     @r   test_njit_matmul_call(TestGUVectorizeJit.test_njit_matmul_callb  sH    1$(KK11;= 
d		# 
	# 	*%r   c                   ^ [        [        SU R                  SS9m[        SS9U4S j5       n[        R
                  " S[        R                  S9n[        R                  " U5      nU" X"X#5        U R                  X2U-  U-   5        g )Nz(),(),() -> ()Tr   rS  c                    > T" XX#5        g r   r   )r    r!   r"   r#   r=   s       r   axpy_jit.TestGUVectorizeJit.test_axpy.<locals>.axpy_jitq  s    1 r   rQ   r-   )	r   r$   rF   r   r6   r7   rR   rh   r   )r<   r  r!   r#   r=   s       @r   	test_axpyTestGUVectorizeJit.test_axpym  sx    T#3DKK(,. 
d		! 
	! IIb(mmAqUQY/r   c                 \  ^ [        S5      S 5       m[        SS9U4S j5       n[        R                  " SSS9R	                  S	S
5      n[        R                  " SSS9n[        R
                  " S	SS9nU" X#U5        [        R                  " U5      nT" X#U5        U R                  XE5        g )Nz(n),(m) -> ()c                 L    U R                  5       UR                  5       -   US'   g r   )r   r   s      r   r=   5TestGUVectorizeJit.test_output_scalar.<locals>.gufunc|  s    UUWquuw&CFr   TrS  c                    > T" XU5        g r   r   rU  s      r   rw  7TestGUVectorizeJit.test_output_scalar.<locals>.jit_func  rX  r   rY  rZ  r-   r,   rQ   ra   )r	   r   r6   r7   r8   r   rh   r   )r<   rw  r!   r"   r[   ri   r=   s         @r   test_output_scalar%TestGUVectorizeJit.test_output_scalarz  s    	_	%	' 
&	' 
d		 
	 IIb%--a4IIb%hhq%s==%qX.r   c                 2  ^ [        S5      S 5       m[        SS9U4S j5       n[        R                  " SSS9R	                  S	S
S5      n[        R
                  " U5      nU" X#5        [        R
                  " U5      nT" X$5        U R                  X45        g )Nz() -> ()c                     U S-   US'   g )Nr   r   r   )r!   r[   s     r   r=   4TestGUVectorizeJit.test_input_scalar.<locals>.gufunc  s    WCFr   TrS  c                    > T" X5        g r   r   )r!   r[   r=   s     r   rw  6TestGUVectorizeJit.test_input_scalar.<locals>.jit_func  s
    1Nr   rY  rZ  r-   r/   r+   r,   )r	   r   r6   r7   r8   rh   r   )r<   rw  r!   r[   ri   r=   s        @r   test_input_scalar$TestGUVectorizeJit.test_input_scalar  s    	Z	 	 
!	 
d		 
	 IIb%--aA6mmA==%q.r   c                 h  ^ Sn[        U5      S 5       m[        SS9U4S j5       nSu  p4[        R                  " US-  5      R	                  X35      n[        R                  " US-  5      R	                  X3U5      n[        R                  " U5      n[        R                  " US-  5      R	                  X35      nU R                  [        5       n	[        R                  " X3-  5      n
U" XXx5        S S S 5        S	U S
3nU R                  U[        W	R                  5      5        U R                  [        5       n	[        R                  " X3-  5      R	                  X35      nU" X\Xx5        S S S 5        SU S3nU R                  U[        U	R                  5      5        U R                  [        5       n	[        R                  " S5      nU" XVX5        S S S 5        SU S3nU R                  U[        U	R                  5      5        U R                  [        5       n	[        R                  " U5      nU" XVX~5        S S S 5        SU S
3nU R                  U[        U	R                  5      5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       No= f)Nz (n, m), (n, n, n) -> (m), (n, n)c                     SUS'   SUS'   g N{   r   i  r   r!   r"   r[   r#   s       r   bar9TestGUVectorizeJit.test_gufunc_ndim_mismatch.<locals>.bar      CFCFr   TrS  c                    > T" XX#5        g r   r   r!   r"   r[   r#   r  s       r   r  9TestGUVectorizeJit.test_gufunc_ndim_mismatch.<locals>.foo      cr   )r+   r   r+   r   zXbar: Input operand 0 does not have enough dimensions (has 1, gufunc core with signature z requires 2)zXbar: Input operand 1 does not have enough dimensions (has 2, gufunc core with signature z requires 3)zYbar: Output operand 0 does not have enough dimensions (has 0, gufunc core with signature z requires 1)zYbar: Output operand 1 does not have enough dimensions (has 1, gufunc core with signature )r	   r   r6   r7   r8   r   r
   r   r   r   r   )r<   r   r  NMr!   r"   r[   r#   r   x_r   y_res_out_r  s                  @r   test_gufunc_ndim_mismatch,TestGUVectorizeJit.test_gufunc_ndim_mismatch  s?   6		Y		 
 	 
d		  
	  IIadO##A)IIadO##A!,iilii1o%%a+ {+v15!Bs  ,009{,Hc3v//01{+v15!))!/Bs  ,009{,Hc3v//01{+v88A;Dd  ,009{,Hc3v//01{+v99Q<Dc  ,009{,Hc3v//015 ,+ ,+ ,+ ,+s0   "I.91J 2 J J#.
I= 
J
J #
J1c                 \  ^
 [        S5      S 5       m
[        SS9U
4S j5       nSnSn[        R                  " SSU45      n[        R                  " U45      n[        R                  " S	5      nU R                  [        5       nT
" XEU5        S S S 5        S
nU R                  U[        WR                  5      5        U R                  [        5       n	U" XEU5        S S S 5        SnU R                  U[        W	R                  5      5        g ! , (       d  f       N= f! , (       d  f       NG= f)N(n),(n) -> ()c                     SUS'   g Nr  r   r   r   s      r   r  >TestGUVectorizeJit.test_mismatch_inner_dimensions.<locals>.bar      CFr   TrS  c                    > T" XU5        g r   r   r!   r"   r[   r  s      r   r  >TestGUVectorizeJit.test_mismatch_inner_dimensions.<locals>.foo      cNr   r+   r   r/   r/   r   zxInput operand 1 has a mismatch in its core dimension 0, with gufunc signature (n),(n) -> () (size 3 is different from 2)4Operand has a mismatch in one of its core dimensions
r	   r   r6   emptyr   r   
ValueErrorr   r   r   r<   r  r  r  r!   r"   r[   	np_raisesr   r   r  s             @r   test_mismatch_inner_dimensions1TestGUVectorizeJit.test_mismatch_inner_dimensions  s    	_	%	 
&	 
d		 
	 HHaAYHHaTNhhv z*icN +Mc3y2234z*fcN +Ec3v//01 +* +*   
D
D
D
D+c                 \  ^
 [        S5      S 5       m
[        SS9U
4S j5       nSnSn[        R                  " SSU45      n[        R                  " U45      n[        R                  " S	5      nU R                  [        5       nT
" XEU5        S S S 5        S
nU R                  U[        WR                  5      5        U R                  [        5       n	U" XEU5        S S S 5        SnU R                  U[        W	R                  5      5        g ! , (       d  f       N= f! , (       d  f       NG= f)Nz(n),(m) -> (n)c                     SUS'   g r  r   r   s      r   r  KTestGUVectorizeJit.test_mismatch_inner_dimensions_input_output.<locals>.bar  r  r   TrS  c                    > T" XU5        g r   r   r  s      r   r  KTestGUVectorizeJit.test_mismatch_inner_dimensions_input_output.<locals>.foo  r  r   r+   r   r/   r  zzOutput operand 0 has a mismatch in its core dimension 0, with gufunc signature (n),(m) -> (n) (size 3 is different from 2)r  r  r  s             @r   +test_mismatch_inner_dimensions_input_output>TestGUVectorizeJit.test_mismatch_inner_dimensions_input_output  s    	%	&	 
'	 
d		 
	 HHaAYHHaTNhhv z*icN +Nc3y2234z*fcN +Ec3v//01 +* +*r  c                   ^ [        S5      S 5       m[        SS9U4S j5       nSnSn[        R                  " U45      n[        R                  " U45      n[        R                  " U45      n[        R                  " U45      nU R                  [        5       nT" XEXg5        S S S 5        Sn	U R                  U	[        WR                  5      5        U R                  [        5       n
U" XEXg5        S S S 5        S	n	U R                  U	[        W
R                  5      5        g ! , (       d  f       N= f! , (       d  f       NG= f)
Nz(n),(m) -> (m),(m)c                     SUS'   SUS'   g r  r   r  s       r   r  ETestGUVectorizeJit.test_mismatch_inner_dimensions_output.<locals>.bar  r  r   TrS  c                    > T" XX#5        g r   r   r  s       r   r  ETestGUVectorizeJit.test_mismatch_inner_dimensions_output.<locals>.foo  r  r   r+   r   z~Output operand 0 has a mismatch in its core dimension 0, with gufunc signature (n),(m) -> (m),(m) (size 2 is different from 3)r  r  )r<   r  r  r  r!   r"   r[   r#   r  r   r   r  s              @r   %test_mismatch_inner_dimensions_output8TestGUVectorizeJit.test_mismatch_inner_dimensions_output  s   	)	*	 
+	 
d		  
	  HHaTNHHaTNhhtnhhtn z*ic +Rc3y2234z*fc +Ec3v//01 +* +*s   
D"(
D3"
D03
Ec                   ^ [        S5      S 5       m[        SS9U4S j5       nSn[        R                  " SSS	U45      n[        R                  " SS	U45      n[        R                  " S
5      nU R                  [        5       nU" X4U5        S S S 5        SnU R                  U[        WR                  5      5        g ! , (       d  f       N6= f)Nr  c                     SUS'   g r  r   r   s      r   r  8TestGUVectorizeJit.test_mismatch_loop_shape.<locals>.bar  r  r   TrS  c                    > T" XU5        g r   r   r  s      r   r  8TestGUVectorizeJit.test_mismatch_loop_shape.<locals>.foo#  r  r   r+   r   r/   r   r  &Loop and array shapes are incompatibler  )	r<   r  r  r!   r"   r[   r   r   r  s	           @r   test_mismatch_loop_shape+TestGUVectorizeJit.test_mismatch_loop_shape  s    	_	%	 
&	 
d		 
	 HHaAq]#HHaAZ hhvz*fcN +7c3v//01 +*s   
B??
Cc                   ^
 [        S5      S 5       m
[        U
4S j5       nSn[        R                  " SU-  5      R	                  SU45      n[        R                  " U5      n[        R
                  " S5      n[        R                  " SU45      nU R                  [        5       nT
" X4XV5        S S S 5        SnU R                  U[        WR                  5      5        U R                  [        5       n	U" X4XV5        S S S 5        S	nU R                  U[        W	R                  5      5        g ! , (       d  f       N= f! , (       d  f       NG= f)
Nz(n),(n) -> (), (n)c                     U R                  5       US'   [        U R                  S   5       H"  nX4==   X   UR                  5       -   -  ss'   M$     g r   )r   r   r   )r!   r"   r[   r#   r   s        r   r=   =TestGUVectorizeJit.test_mismatch_loop_shape_2.<locals>.gufunc2  s@    UUWCF1771:&!$.( 'r   c                    > T" XX#5        g r   r   )r!   r"   r[   r#   r=   s       r   rw  ?TestGUVectorizeJit.test_mismatch_loop_shape_2.<locals>.jit_func8  s    1"r   r+   r,   )r   r   zoperands could not be broadcast together with remapped shapes [original->remapped]: (4,2)->(4,newaxis) (2,)->() (3,)->(3,newaxis) (3,2)->(3,2)  and requested shape (2)r  )r	   r   r6   r7   r8   r  r   r   r  r   r   r   )r<   rw  r  r!   r"   r[   r#   r  r   r   r=   s             @r   test_mismatch_loop_shape_2-TestGUVectorizeJit.test_mismatch_loop_shape_21  s   	)	*	) 
+	)
 
	# 
	# IIacN""Aq6*IIaLhhtnhh1v z*i1" +I 	c3y2234z*fQ3$ +7c3v//01 +* +*s   '
D/5
E /
D= 
Er   N)rv   ru   rw   r{   rF   r[  rc  rh  rn  unittestexpectedFailurert  rx  r~  r  r  r  r  r  r  r  r  r  r|   r   r   r   rQ  rQ  %  sn    F	,### # #	B	&0/$/",2\26262:2&2r   rQ  __main__)r  r7  numpyr6   numbar   r   r   r   r   r   r	   numba.core.errorsr
   numba.np.ufuncr   numba.tests.supportr   r   r   r$   r&   r~   r   r   r  r,  r.  rQ  rv   mainr   r   r   <module>r     s       H H H ) & --FA FARB.( B.J 
`; `;FZ0H Z0z$9 
o-h o-di2 i2V	 zMMO r   