
    xKg>n                     R   d dl Z d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZ d Zd Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zedk(  r e j<                          yy)    N)voidfloat32float64int32int64jitguvectorize)TypingError)GUVectorize)tagTestCasec           
          | j                   \  }}|j                   \  }}t        |      D ]E  }t        |      D ]5  }d|||f<   t        |      D ]  }|||fxx   | ||f   |||f   z  z  cc<     7 G y)zdocstring for matmulcorer   N)shaperange)	ABCmnpijks	            d/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/npyufunc/test_gufunc.py
matmulcorer      sz    77DAq77DAq1XqAAadG1X!Q$1QT7Qq!tW,,       c                     | |z  |z   |d<   y Nr    )axyouts       r   axpyr$      s    UaZCFr   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	
TestGUFunccpuc                 |   d}t        j                  |dz  dz  t         j                        j                  |dd      }t        j                  |dz  dz  t         j                        j                  |dd      } |||      }t        j                  ||      }t         j
                  j                  ||dd       y 	Ni        dtype   h㈵>:0yE>rtolatolnparanger   reshapematmultestingassert_allclose)selfgufunc	matrix_ctr   r   r   Golds          r   check_matmul_gufunczTestGUFunc.check_matmul_gufunc   s    	IIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRS1aLyyA


""1dD"Ar   c                     t        t        d| j                        }|j                  t        d d d d f   t        d d d d f   t        d d d d f   f       |j                         }| j                  |       y N(m,n),(n,p)->(m,p)target)r   r   rD   addr   build_ufuncr?   r;   r<   s     r   test_gufunczTestGUFunc.test_gufunc(   s_    Z)=$(KK1

GAqDM71a4='!Q$-@A##%  (r   c                      t        t        t        d d d d f   t        d d d d f   t        d d d d f         gd| j                        t              }| j                  |       y rA   )r	   r   r   rD   r   r?   rG   s     r   test_guvectorize_decorz!TestGUFunc.test_guvectorize_decor0   sX    1d71Q3<1wqs|LM1$(KK11;= 	  (r   c                 (   t        t        d| j                        }|j                  d       |j	                         }t        j                  dt
        j                        } ||||      }t
        j                  j                  |||z  |z          y )N(), (), () -> ()rC   z(intp, intp, intp, intp[:])
   r,   )
r   r$   rD   rE   rF   r5   r6   intpr9   assert_equal)r;   r<   r!   r#   s       r   test_ufunc_likezTestGUFunc.test_ufunc_like7   so     T#5dkkJ

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


QUQY/r   c                 V   t        dgd      d        }t        j                  d      } ||d      }t        j                  |d      }t        j                  j                  ||       t        j                  |      } |||d       t        j                  j                  ||       y )Nzf8[:],f8[:](n)->(n)c                 \    d}t        | j                  d         D ]  }|| |   z  }|||<    y r   r   r   r!   resaccr   s       r   	my_cumsumz'TestGUFunc.test_axis.<locals>.my_cumsumF   4    C1771:&qtA 'r         r   axisr#   r^   )r	   r5   onescumsumr9   rO   
zeros_like)r;   rX   r!   r"   expectedout_kws         r   	test_axiszTestGUFunc.test_axisD   s    	m_j	1	 
2	 GGHaa 99QQ'


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


1r   c                 4   t        t        d d  t        t        d d  fgd      d        }| j                  d|j                         | j                  d|j                         | j                  d|j
                         | j                  d|j                         y )N(n),()->(n)c                 T    t        | j                  d         D ]  }| |   |z   ||<    y)docstring for gufuncr   NrT   r!   r"   rV   r   s       r   r<   z)TestGUFunc.test_docstring.<locals>.gufuncX   ,     1771:&1A 'r   z numba.tests.npyufunc.test_gufuncr<   z)TestGUFunc.test_docstring.<locals>.gufuncri   )r	   r   assertEqual
__module____name____qualname____doc__rG   s     r   test_docstringzTestGUFunc.test_docstringW   s    	uQxa12M	B	" 
C	"
 	;V=N=NO6??3DfFYFYZ/@r   N)
rn   rm   ro   rD   r?   rH   rJ   rP   re   rq   r   r   r   r&   r&      s'    FB))02&
Ar   r&   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestMultipleOutputsr'   c                 v   t        d| j                        d        }t        j                  dt        j                        dz   }t        j
                  |      }t        j
                  |      } ||||       t        j                  j                  ||       t        j                  j                  ||       y )N(x)->(x),(x)rC   c                 X    t        |j                        D ]  }| |   ||<   | |   ||<    y Nr   sizer   r   r   r   s       r   copyzKTestMultipleOutputs.test_multiple_outputs_same_type_passed_in.<locals>.copyh   s0     166]t!t! #r   rM   r,      r	   rD   r5   r6   r   rb   r9   r:   )r;   r{   r   r   r   s        r   )test_multiple_outputs_same_type_passed_inz=TestMultipleOutputs.test_multiple_outputs_same_type_passed_ing   s    	^ KK
)	
)	
 IIb

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


""1a(


""1a(r   c                 |   t        d| j                        d        }t        j                  dt        j                        dz   }t        j
                  |      }t        j
                  |      } ||||       t        j                  j                  ||       t        j                  j                  |dz  |       y )Nru   rC   c                 ^    t        |j                        D ]  }| |   ||<   | |   dz  ||<    y Nr*   rx   rz   s       r   copy_and_doublezRTestMultipleOutputs.test_multiple_outputs_distinct_values.<locals>.copy_and_doublex   s4     166]t!tax! #r   rM   r,   r|   r*   r}   )r;   r   r   r   r   s        r   %test_multiple_outputs_distinct_valuesz9TestMultipleOutputs.test_multiple_outputs_distinct_valuesv   s    	^ KK
)	 
)	 
 IIb

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


""1a(


""1q5!,r   c                    t        d| j                        d        }t        j                  dt        j                        dz   }t        j
                  |      }t        j
                  |t        j                        } ||||       t        j                  j                  ||       t        j                  j                  |t        j                  d      z  |       y )Nru   rC   c                 ^    t        |j                        D ]  }| |   ||<   | |   dz  ||<    y )N      ?rx   rz   s       r   copy_and_multiplyzJTestMultipleOutputs.test_multiple_output_dtypes.<locals>.copy_and_multiply   s4     166]t!tcz! #r   rM   r,   r|   r   )	r	   rD   r5   r6   r   rb   r   r9   r:   )r;   r   r   r   r   s        r   test_multiple_output_dtypesz/TestMultipleOutputs.test_multiple_output_dtypes   s    	^ KK
)	"
)	"
 IIb)A-MM!MM!2::.!Q"


""1a(


""1rzz##6:r   c                    t        d| j                        d        }t        j                  dt        j                        }d}| j                  t              5 } ||       d d d        | j                  |t        j                               | j                  t              5 } ||||||       d d d        | j                  |t        |j                               y # 1 sw Y   ~xY w# 1 sw Y   ;xY w)Nz(m),(m)->(m),(m)rC   c                      y rw   r   )r!   r"   zws       r   fz@TestMultipleOutputs.test_incorrect_number_of_pos_args.<locals>.f   s    r   r.   r,   z"Too few arguments for function 'f')
r	   rD   r5   r6   r   assertRaises	TypeErrorassertInstr	exception)r;   r   arrmsgtes        r   !test_incorrect_number_of_pos_argsz5TestMultipleOutputs.test_incorrect_number_of_pos_args   s    	'	<	 
=	 ii* 3y)RcF *c3r||,- y)Rc3S#& *c3r||,- *)
 *)s   	C %C, C),C5N)rn   rm   ro   rD   r~   r   r   r   r   r   r   rs   rs   d   s    F)- ; .r   rs   c                       e Zd ZdZdZy)TestGUFuncParallelFparallelNrn   rm   ro   _numba_parallel_test_rD   r   r   r   r   r          !Fr   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestDynamicGUFuncr'   c                    d }t        t        d| j                  d      }d}t        j                  |dz  dz  t        j
                        j                  |dd      }t        j                  |dz  d	z  t        j
                        j                  |dd	      }t        j                  |dz  d	z  t        j
                        j                  |dd	      } |||||       t        j                  |dz  dz  t        j                        j                  |dd      }t        j                  |dz  d	z  t        j                        j                  |dd	      }t        j                  |dz  d	z  t        j                        j                  |dd	      }	 |||||	       | j                  t        |j                        d       y )
Nc                     t        j                  ||      } | |||       t         j                  j                  ||dd       y )Nr/   r0   r1   )r5   r8   r9   r:   )r<   r   r   r   r>   s        r   r?   zBTestDynamicGUFunc.test_dynamic_matmul.<locals>.check_matmul_gufunc   s7    99Q?D1aOJJ&&q$T&Er   rB   TrD   
is_dynamicrM   r*   r+   r,   r.   )r   r   rD   r5   r6   r   r7   r   rl   lentypes)
r;   r?   r<   r=   Ai64Bi64Ci64r   r   r   s
             r   test_dynamic_matmulz%TestDynamicGUFunc.test_dynamic_matmul   sk   	F
 Z)=$(KKDB	yyQ*"((;CCIqRSTyyQ*"((;CCIqRSTyyQ*"((;CCIqRSTFD$5IIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSFAq!,V\\*A.r   c                     d }t        t        d| j                  d      }t        j                  dt        j
                        } |||       y )Nc                 F   t        j                  d|j                        }t        j                  d|j                        } | ||||        | ||||       ||z  |z   }t         j                  j	                  ||       t         j                  j	                  ||       y )NrM   r,   r#   )r5   zerosr-   r9   rO   )r<   r!   r#   rd   goldens        r   check_ufunc_outputzETestDynamicGUFunc.test_dynamic_ufunc_like.<locals>.check_ufunc_output   s{    ((2QWW-CXXb0F1aC 1a'UQYFJJ##C0JJ##FF3r   rL   Tr   rM   r,   )r   r$   rD   r5   r6   rN   )r;   r   r<   r!   s       r   test_dynamic_ufunc_likez)TestDynamicGUFunc.test_dynamic_ufunc_like   s?    	4 T#5dkk(,.IIb(61%r   c                 ,   t        d| j                  d      d        }| j                  |j                         t	        j
                  dt        j                        j                  dd      }t	        j                  dt        j                        } |||       t        |j                  d	         D ](  }| j                  ||   ||   j                                * d
}| j                  t        |      5   ||       ddd       y# 1 sw Y   yxY w)w
        Note that scalar output is a 0-dimension array that acts as
        a pointer to the output location.
        (n)->()TrD   nopythonc                 \    d}t        | j                  d         D ]
  }|| |   z  } ||d<   y Ng        r   r   rT   inpr#   tmpr   s       r   sum_rowz=TestDynamicGUFunc.test_dynamic_scalar_output.<locals>.sum_row   s4    C399Q<(s1v )CGr   0u  r,   '     r   z)Too few arguments for function 'sum_row'.N)r	   rD   
assertTruer   r5   r6   r   r7   r   r   r   rl   sumassertRaisesRegexr   )r;   r   r   r#   r   r   s         r   test_dynamic_scalar_outputz,TestDynamicGUFunc.test_dynamic_scalar_output   s     
Yt{{T	B	 
C	 	**+iiRXX.66ua@hhuBHH-S syy|$ASVSVZZ\2 % :##Is3CL 433s   8	D

Dc                 ~   t        d      d        }t        j                  d      }t        j                  |d      }t        j                  |      } |||d       t        j
                  j                  ||       t        j                  |      } |||d       t        j
                  j                  ||       y )NrR   c                 \    d}t        | j                  d         D ]  }|| |   z  }|||<    y r   rT   rU   s       r   rX   z.TestDynamicGUFunc.test_axis.<locals>.my_cumsum   rY   r   rZ   r   r]   r_   )r	   r5   r`   ra   rb   r9   rO   )r;   rX   r!   rc   r"   rd   s         r   re   zTestDynamicGUFunc.test_axis   s    	Z	 	 
!	 GGH99QQ'MM(#!QQ


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


1r   c                 ~   t        d      d        }g d}|D ]$  }t        ||      }| j                  |d|d       & t        j                  g d      }t        j                  g d      } |||       | j                  |t        j                  g d             | j                  |j                  d       | j                  t              5 }|j                  |       d d d        | j                  t        j                        d	       | j                  t              5 }|j                  |       d d d        | j                  t        |j                        d	       | j                  t              5 }|j                  |d
dg       d d d        | j                  t        |j                        d	       | j                  t              5 }|j!                  ||       d d d        | j                  t        |j                        d       y # 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   TxY w)NrR   c                 \    d}t        | j                  d         D ]  }|| |   z  }|||<    y r   rT   rU   s       r   r<   z8TestDynamicGUFunc.test_gufunc_attributes.<locals>.gufunc  rY   r   )	signature
accumulateatouterreducereduceatzdynamic gufunc not exporting ""r|   r*   r   r+   r   r   r   r   r|   r      rM   z-Reduction not defined on ufunc with signaturer   r*   z?method outer is not allowed in ufunc with non-trivial signature)r	   hasattrr   r5   arrayassertPreciseEqualrl   r   r   RuntimeErrorr   r   r   r   r   r   r   )r;   r<   attrsattrcontainsr    rV   raisess           r   test_gufunc_attributesz(TestDynamicGUFunc.test_gufunc_attributes  s   	Z	 	 
!	 QDvt,HOOHT&ST  HH\"hh|$q#RXXm%<=
 	)):6|,a  -V--.0_`|,MM! -V--.0_`|,OOA1v& -V--.0_`y)VLLA *V--.0qr -, -, -, *)s0   H"H6H'H3HH$'H03H<c                    t        d      d        }| j                  |j                         t        j                  g d      }t        j                  g d      }t        j                  g d      } ||||       | j                  |t        j                  g d             | j                  |j                         | j                  |j                  |      d       | j                  |j                  |      t        j                  g d             | j                  |j                  d	d
gd
dg      t        j                  d
dgddgg             | j                  |j                  |d	dg      t        j                  ddg             t        j                  g d      }t        j                  d
dg      }|j                  |d	d
g|       | j                  |t        j                  g d             y )Nz	(),()->()c                     | |z   |d<   y r   r   r!   r"   rV   s      r   rE   z6TestDynamicGUFunc.test_gufunc_attributes2.<locals>.add7  s    UCFr   r   )r+   r   r*   r|   r   )r.   r.   r.   r.   rM   r   r   r|   r*   r      )r*   r+   r   r+   )r	   assertIsNoner   r5   r   r   rl   r   r   r   r   r   )r;   rE   r    brV   r!   r"   s          r   test_gufunc_attributes2z)TestDynamicGUFunc.test_gufunc_attributes26  s|   	[	!	 
"	 	#--(HH\"HH\"hh|$Aq#RXXl%;< 	#--(A+q 1288M3JK		1a&1a& 9288aVaQRVDT;UVQA 71a&9IJHH\"HHaVq1a&!288L#9:r   N)
rn   rm   ro   rD   r   r   r   re   r   r   r   r   r   r   r      s'    F/.&(<2(&sP;r   r   c                   2    e Zd ZdZdZd Zd Zd Zd Zd Z	y)	TestGUVectorizeScalarz<
    Nothing keeps user from out-of-bound memory access
    r'   c                 D   t        dgd| j                  d      d        }t        j                  dt        j                        j                  dd	      } ||      }t        |j                  d
         D ](  }| j                  ||   ||   j                                * y)r   zvoid(int32[:], int32[:])r   Tr   c                 \    d}t        | j                  d         D ]
  }|| |   z  } ||d<   y r   rT   r   s       r   r   z9TestGUVectorizeScalar.test_scalar_output.<locals>.sum_row]  s6     C399Q<(s1v )CGr   r   r,   r   r   r   N)
r	   rD   r5   r6   r   r7   r   r   rl   r   )r;   r   r   r#   r   s        r   test_scalar_outputz(TestGUVectorizeScalar.test_scalar_outputW  s     
019 KK$
8	
8	 iiRXX.66ua@cl syy|$ASVSVZZ\2 %r   c                     t        dgd| j                  d      d        }t        j                  dt        j                        j                  dd	      } ||d
      }| j                  |d
z  |       y )Nzint32[:], int32[:], int32[:]rg   Tr   c                 Z    t        | j                  d         D ]  }| |   |d   z  ||<    y r   rT   r   r   r#   r   s       r   fooz4TestGUVectorizeScalar.test_scalar_input.<locals>.foor  s0     399Q<(Q!A$A )r   r\   r,   rM   r   r*   )r	   rD   r5   r6   r   r7   r   )r;   r   r   r#   s       r   test_scalar_inputz'TestGUVectorizeScalar.test_scalar_inputp  sn    	45} KK$
8	'
8	' iibhh/77A>#qk 	a-r   c                    d } t        dgd| j                        |      }t        j                  d      j	                  t        j
                        } ||d      }t        j                  |      } ||d|       t        j                  j                  ||       t        j                  d      j	                  t        j
                        j                  dd      } ||d      }t        j                  |      }t        |j                  d         D ]  } |||   d||           t        j                  j                  ||       y )	Nc                 T    t        | j                        D ]  }|| |   dz   z  ||<    y )Nr|   rx   r   s       r   pyfunczATestGUVectorizeScalar.test_scalar_input_core_type.<locals>.pyfunc  s*    388_c!fqj)A %r   int32[:], int32, int32[:]rg   rC   rM   r*   r[   r   )r	   rD   r5   r6   astyper   rb   r9   rO   r7   r   r   )r;   r   	my_gufuncr   gotrc   axs          r   test_scalar_input_core_typez1TestGUVectorizeScalar.test_scalar_input_core_type  s   	*4K!< = -'+{{44:<	
 iim""288,Q==%sAx 


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

X.r   c                     | j                  t              5 }t        dgd| j                        d        }d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr   z(n),(n)->(n)rC   c                      y rw   r   )r    r   cs      r   r   zGTestGUVectorizeScalar.test_scalar_input_core_type_error.<locals>.pyfunc       r   z2scalar type int32 given for non scalar argument #2r   r   r	   rD   rl   r   r   r;   r   r   s      r   !test_scalar_input_core_type_errorz7TestGUVectorizeScalar.test_scalar_input_core_type_error  sg    y)V56 $-- *
 	MV--.	0 *)    A$$A-c                     | j                  t              5 }t        dgd| j                        d        }d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nzint32[:], int32[:]z
(m,n)->(n)rC   c                      y rw   r   )r    r   s     r   r   z8TestGUVectorizeScalar.test_ndim_mismatch.<locals>.pyfunc  r   r   z,type and shape signature mismatch for arg #1r   r   s      r   test_ndim_mismatchz(TestGUVectorizeScalar.test_ndim_mismatch  sg    y)V./ $-- *
 	GV--.	0 *)r   N)
rn   rm   ro   rp   rD   r   r   r   r   r   r   r   r   r   r   Q  s'     F32./800r   r   c                       e Zd ZdZdZy)TestGUVectorizeScalarParallelFr   Nr   r   r   r   r   r     r   r   r   c                       e Zd Zd Zd Zd Zy)TestGUVectorizePicklingc                    t        dgd      d        }t        j                  |      }t        j                  |      }| j	                  |j
                  |j
                         | j	                  |j                  |j                         | j	                  |j                  |j                         | j	                  |j                  j                  |j                  j                         | j                  |j
                         |j                          | j                  |j
                         | j                   |d       |d             t        j                  d      }| j                   ||       ||             y)zNon-dynamic gufunc.
        zf8,f8[:]()->()c                     | dz  |d d  y r   r   r!   r#   s     r   doublezFTestGUVectorizePickling.test_pickle_gufunc_non_dyanmic.<locals>.double      UCFr         ?rM   N)r	   pickledumpsloadsrl   _frozenidentityr   gufunc_builder_sigsr   disable_compiler   r5   r6   )r;   r  serclonedr   s        r   test_pickle_gufunc_non_dyanmicz6TestGUVectorizePickling.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                 v   t        dd      d        }t        j                  |      }t        j                  |      }| j	                  |j
                  |j
                         | j	                  |j                  |j                         | j	                  |j                  |j                         | j	                  |j                  j                  |j                  j                         | j                  |j
                         t        j                  d      }t        j                  d      } |d|        |d|       | j                  ||       t        j                  d      }t        j                  |      }t        j                  |      } |||        |||       | j                  ||       y)	z:Dynamic gufunc w/o prepopulating before pickling.
        r  r|   r  c                     | dz  |d d  y r   r   r  s     r   r  zLTestGUVectorizePickling.test_pickle_gufunc_dyanmic_null_init.<locals>.double  r  r   r	  r   rM   N)r	   r
  r  r  rl   r  r  r   r  r  assertFalser5   r   r   r6   rb   )r;   r  r  r  expectr   r   s          r   $test_pickle_gufunc_dyanmic_null_initz<TestGUVectorizePickling.test_pickle_gufunc_dyanmic_null_init  sU    
X	*	 
+	 ll6"c" 	8&//:**F,=,=>..44..44	6 	( !hhqkss,iims#mmC ss,r   c                    t        dd      d        }t        j                  d      }t        j                  d      } |d|       t        j                  d      }t        j                  |      }t        j                  |      } |||       t        j                  |      }t        j                  |      }| j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  j                  |j                  j                         | j                  |j                         |j                          | j!                  |j                         t        j                  d      }t        j                  d      } |d|        |d|       | j#                  ||       t        j                  |      }t        j                  |      } |||        |||       | j#                  ||       y)	zDynamic gufunc prepopulated before pickling.

        Once unpickled, we disable compilation to verify that the gufunc
        compilation state is carried over.
        r  r|   r  c                     | dz  |d d  y r   r   r  s     r   r  zNTestGUVectorizePickling.test_pickle_gufunc_dynamic_initialized.<locals>.double  r  r   r	  r   rM   N)r	   r5   r   r6   rb   r
  r  r  rl   r  r  r   r  r  r  r  r   r   )r;   r  r  r   r   r  r  s          r   &test_pickle_gufunc_dynamic_initializedz>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   N)rn   rm   ro   r  r  r  r   r   r   r  r    s    :: -D/-r   r  c                       e Zd ZdZd Zd Zd Zd Zej                  d        Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestGUVectorizeJitr'   c                    t        d      fd       }t        j                  dd      j                  ddd	      }t        j                  d
      }t        j
                  |      } ||||       | j                  |||z          y )NTr   c                      | ||       y rw   r   r!   r"   rV   r<   s      r   jit_addz4TestGUVectorizeJit.check_add_gufunc.<locals>.jit_add)      1ar   (   i8r,   r+   r*   r.   d   )r   r5   r6   r7   r   rb   r   )r;   r<   r$  r!   r"   rV   s    `    r   check_add_gufuncz#TestGUVectorizeJit.check_add_gufunc(  sv    	d		 
	 IIb%--aA6HHSMmmA1cQU+r   c                 b    t        dd| j                        d        }| j                  |       y )Nint64[:], int64, int64[:]rg   rC   c                 T    t        | j                  d         D ]  }| |   |z   ||<    y r   rT   rj   s       r   rE   z/TestGUVectorizeJit.test_add_static.<locals>.add4  rk   r   r	   rD   r)  r;   rE   s     r   test_add_staticz"TestGUVectorizeJit.test_add_static3  s5    	0- KK
)	"
)	" 	c"r   c                 b    t        dd| j                        d        }| j                  |       y )Nr+  rg   rC   c                 T    t        | j                  d         D ]  }| |   |z   ||<    y r   rT   rj   s       r   rE   z9TestGUVectorizeJit.test_add_static_cast_args.<locals>.add>  rk   r   r-  r.  s     r   test_add_static_cast_argsz,TestGUVectorizeJit.test_add_static_cast_args<  s5    	0- KK
)	"
)	" 	c"r   c                 `    t        d| j                        d        }| j                  |       y )Nrg   rC   c                 T    t        | j                  d         D ]  }| |   |z   ||<    y r   rT   rj   s       r   rE   z0TestGUVectorizeJit.test_add_dynamic.<locals>.addG  *    1771:&1A 'r   r-  r.  s     r   test_add_dynamicz#TestGUVectorizeJit.test_add_dynamicF  s/    	]4;;	7	" 
8	" 	c"r   c                 b    t        d| j                  d      d        }| j                  |       y )Nrg   T)rD   forceobjc                 T    t        | j                  d         D ]  }| |   |z   ||<    y r   rT   rj   s       r   rE   z0TestGUVectorizeJit.test_object_mode.<locals>.addP  r5  r   r-  r.  s     r   test_object_modez#TestGUVectorizeJit.test_object_modeN  s2    	]4;;	F	" 
G	" 	c"r   c                    d}t        j                  |dz  dz  t         j                        j                  |dd      }t        j                  |dz  dz  t         j                        j                  |dd      }t        j                  |dz  dz  t         j                        j                  |dd      } ||||       t        j                  ||      }t         j
                  j                  ||dd       y r)   r4   )r;   jit_funcr=   r   r   r   r>   s          r   check_matmulzTestGUVectorizeJit.check_matmulW  s    	IIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSIIi!ma'rzz:BB9aQRSAqyyA


""1dD"Ar   c                      t        d| j                        t              t        d      fd       }| j	                  |       y )NrB   rC   Tr!  c                      | ||      S rw   r   )r   r   r   r<   s      r   
matmul_jitz<TestGUVectorizeJit.test_njit_matmul_call.<locals>.matmul_jitg  s    !Q?"r   )r	   rD   r   r   r=  )r;   r@  r<   s     @r   test_njit_matmul_callz(TestGUVectorizeJit.test_njit_matmul_callb  sL    11$(KK11;= 
d		# 
	# 	*%r   c                 "   t        t        d| j                  d      t        d      fd       }t	        j
                  dt        j                        }t	        j                  |      } |||||       | j                  |||z  |z          y )Nz(),(),() -> ()Tr   r!  c                      | |||       y rw   r   )r    r!   r"   r#   r<   s       r   axpy_jitz.TestGUVectorizeJit.test_axpy.<locals>.axpy_jitq  s    1aC r   rM   r,   )	r   r$   rD   r   r5   r6   rN   rb   r   )r;   rD  r!   r#   r<   s       @r   	test_axpyzTestGUVectorizeJit.test_axpym  s~    T#3DKK(,. 
d		! 
	! IIb(mmAAq#QUQY/r   c                 p   t        d      d        t        d      fd       }t        j                  dd      j	                  d	d
      }t        j                  dd      }t        j
                  d	d      } ||||       t        j                  |      } |||       | j                  ||       y )Nz(n),(m) -> ()c                 L    | j                         |j                         z   |d<   y r   )r   r   s      r   r<   z5TestGUVectorizeJit.test_output_scalar.<locals>.gufunc|  s    UUWquuw&CFr   Tr!  c                      | ||       y rw   r   r#  s      r   r<  z7TestGUVectorizeJit.test_output_scalar.<locals>.jit_func  r%  r   r&  r'  r,   r+   rM   r[   )r	   r   r5   r6   r7   r   rb   r   )r;   r<  r!   r"   rV   rc   r<   s         @r   test_output_scalarz%TestGUVectorizeJit.test_output_scalarz  s    	_	%	' 
&	' 
d		 
	 IIb%--a4IIb%hhq%As==%q!XX.r   c                 <   t        d      d        t        d      fd       }t        j                  dd      j	                  d	d
d      }t        j
                  |      } |||       t        j
                  |      } ||       | j                  ||       y )Nz() -> ()c                     | dz   |d<   y )Nr(  r   r   )r!   rV   s     r   r<   z4TestGUVectorizeJit.test_input_scalar.<locals>.gufunc  s    WCFr   Tr!  c                      | |       y rw   r   )r!   rV   r<   s     r   r<  z6TestGUVectorizeJit.test_input_scalar.<locals>.jit_func  s    1cNr   r&  r'  r,   r.   r*   r+   )r	   r   r5   r6   r7   rb   r   )r;   r<  r!   rV   rc   r<   s        @r   test_input_scalarz$TestGUVectorizeJit.test_input_scalar  s    	Z	 	 
!	 
d		 
	 IIb%--aA6mmAC==%q(X.r   c                 R   d}t        |      d        t        d      fd       }d\  }}t        j                  |dz        j	                  ||      }t        j                  |dz        j	                  |||      }t        j                  |      }t        j                  |dz        j	                  ||      }| j                  t              5 }	t        j                  ||z        }
 ||
|||       d d d        d	| d
}| j                  |t        	j                               | j                  t              5 }	t        j                  ||z        j	                  ||      } |||||       d d d        d| d}| j                  |t        |	j                               | j                  t              5 }	t        j                  d      } |||||       d d d        d| d}| j                  |t        |	j                               | j                  t              5 }	t        j                  |      } |||||       d d d        d| d
}| j                  |t        |	j                               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   [xY w)Nz (n, m), (n, n, n) -> (m), (n, n)c                     d|d<   d|d<   y N{   r   i  r   r!   r"   rV   r#   s       r   barz9TestGUVectorizeJit.test_gufunc_ndim_mismatch.<locals>.bar      CFCFr   Tr!  c                      | |||       y rw   r   r!   r"   rV   r#   rS  s       r   r   z9TestGUVectorizeJit.test_gufunc_ndim_mismatch.<locals>.foo      1c3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   r5   r6   r7   r   r
   r   r   r   r   )r;   r   r   NMr!   r"   rV   r#   r   x_r   y_res_out_rS  s                  @r   test_gufunc_ndim_mismatchz,TestGUVectorizeJit.test_gufunc_ndim_mismatch  s]   6		Y		 
 	 
d		  
	  1IIadO##Aq)IIadO##Aq!,iilii1o%%a+ {+v1q5!BAsC  ,009{,Hc3v//01{+v1q5!))!Q/B2sC  ,009{,Hc3v//01{+v88A;D1dC  ,009{,Hc3v//01{+v99Q<D1c4  ,009{,Hc3v//015 ,+ ,+ ,+ ,+s0   $I7=4J9!J"!J7JJJJ&c                 J  
 t        d      d        
t        d      
fd       }d}d}t        j                  dd|f      }t        j                  |f      }t        j                  d	      }| j                  t              5 } 
|||       d d d        d
}| j                  |t        j                               | j                  t              5 }	 ||||       d d d        d}| j                  |t        	j                               y # 1 sw Y   xY w# 1 sw Y   =xY w)N(n),(n) -> ()c                     d|d<   y NrQ  r   r   r   s      r   rS  z>TestGUVectorizeJit.test_mismatch_inner_dimensions.<locals>.bar      CFr   Tr!  c                      | ||       y rw   r   r!   r"   rV   rS  s      r   r   z>TestGUVectorizeJit.test_mismatch_inner_dimensions.<locals>.foo      1cNr   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   r5   emptyr   r   
ValueErrorr   r   r   r;   r   rX  rY  r!   r"   rV   	np_raisesr   r   rS  s             @r   test_mismatch_inner_dimensionsz1TestGUVectorizeJit.test_mismatch_inner_dimensions  s   	_	%	 
&	 
d		 
	 HHaAYHHaTNhhv z*i1cN +Mc3y2234z*f1cN +Ec3v//01 +* +*   DDDD"c                 J  
 t        d      d        
t        d      
fd       }d}d}t        j                  dd|f      }t        j                  |f      }t        j                  d	      }| j                  t              5 } 
|||       d d d        d
}| j                  |t        j                               | j                  t              5 }	 ||||       d d d        d}| j                  |t        	j                               y # 1 sw Y   xY w# 1 sw Y   =xY w)Nz(n),(m) -> (n)c                     d|d<   y rb  r   r   s      r   rS  zKTestGUVectorizeJit.test_mismatch_inner_dimensions_input_output.<locals>.bar  rc  r   Tr!  c                      | ||       y rw   r   re  s      r   r   zKTestGUVectorizeJit.test_mismatch_inner_dimensions_input_output.<locals>.foo  rf  r   r*   r   r.   rg  zzOutput operand 0 has a mismatch in its core dimension 0, with gufunc signature (n),(m) -> (n) (size 3 is different from 2)rh  ri  rl  s             @r   +test_mismatch_inner_dimensions_input_outputz>TestGUVectorizeJit.test_mismatch_inner_dimensions_input_output  s   	%	&	 
'	 
d		 
	 HHaAYHHaTNhhv z*i1cN +Nc3y2234z*f1cN +Ec3v//01 +* +*ro  c                 x   t        d      d        t        d      fd       }d}d}t        j                  |f      }t        j                  |f      }t        j                  |f      }t        j                  |f      }| j                  t              5 } ||||       d d d        d}	| j                  |	t        j                               | j                  t              5 }
 |||||       d d d        d	}	| j                  |	t        
j                               y # 1 sw Y   xY w# 1 sw Y   =xY w)
Nz(n),(m) -> (m),(m)c                     d|d<   d|d<   y rP  r   rR  s       r   rS  zETestGUVectorizeJit.test_mismatch_inner_dimensions_output.<locals>.bar  rT  r   Tr!  c                      | |||       y rw   r   rV  s       r   r   zETestGUVectorizeJit.test_mismatch_inner_dimensions_output.<locals>.foo  rW  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)rh  ri  )r;   r   rX  rY  r!   r"   rV   r#   rm  r   r   rS  s              @r   %test_mismatch_inner_dimensions_outputz8TestGUVectorizeJit.test_mismatch_inner_dimensions_output  s   	)	*	 
+	 
d		  
	  HHaTNHHaTNhhtnhhtn z*i1c3 +Rc3y2234z*f1c3 +Ec3v//01 +* +*s   D$(D0$D-0D9c                    t        d      d        t        d      fd       }d}t        j                  ddd	|f      }t        j                  dd	|f      }t        j                  d
      }| j                  t              5 } ||||       d d d        d}| j                  |t        j                               y # 1 sw Y   1xY w)Nr`  c                     d|d<   y rb  r   r   s      r   rS  z8TestGUVectorizeJit.test_mismatch_loop_shape.<locals>.bar  rc  r   Tr!  c                      | ||       y rw   r   re  s      r   r   z8TestGUVectorizeJit.test_mismatch_loop_shape.<locals>.foo#  rf  r   r*   r|   r.   r   rg  &Loop and array shapes are incompatibleri  )	r;   r   rX  r!   r"   rV   r   r   rS  s	           @r   test_mismatch_loop_shapez+TestGUVectorizeJit.test_mismatch_loop_shape  s    	_	%	 
&	 
d		 
	 HHaAq]#HHaAZ hhvz*f1cN +7c3v//01 +*s   B??Cc                   
 t        d      d        
t        
fd       }d}t        j                  d|z        j	                  d|f      }t        j                  |      }t        j
                  d      }t        j                  d|f      }| j                  t              5 } 
||||       d d d        d}| j                  |t        j                               | j                  t              5 }	 |||||       d d d        d	}| j                  |t        	j                               y # 1 sw Y   xY w# 1 sw Y   =xY w)
Nz(n),(n) -> (), (n)c                     | j                         |d<   t        | j                  d         D ]#  }||xx   | |   |j                         z   z  cc<   % y r   )r   r   r   )r!   r"   rV   r#   r   s        r   r<   z=TestGUVectorizeJit.test_mismatch_loop_shape_2.<locals>.gufunc2  sD    UUWCF1771:&A!A$.( 'r   c                      | |||       y rw   r   )r!   r"   rV   r#   r<   s       r   r<  z?TestGUVectorizeJit.test_mismatch_loop_shape_2.<locals>.jit_func8  s    1ac"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   r5   r6   r7   rj  r   r   rk  r   r   r   )r;   r<  rX  r!   r"   rV   r#   rm  r   r   r<   s             @r   test_mismatch_loop_shape_2z-TestGUVectorizeJit.test_mismatch_loop_shape_21  s   	)	*	) 
+	)
 
	# 
	# IIacN""Aq6*IIaLhhtnhh1v z*i1ac" +I 	c3y2234z*fQ3$ +7c3v//01 +* +*s   "D.2D:.D7:EN)rn   rm   ro   rD   r)  r/  r2  r6  unittestexpectedFailurer:  r=  rA  rE  rI  rM  r^  rn  rs  rw  r|  r  r   r   r   r  r  %  sn    F	,### # #	B	&0/$/",2\26262:2&2r   r  __main__)r  r
  numpyr5   numbar   r   r   r   r   r   r	   numba.core.errorsr
   numba.np.ufuncr   numba.tests.supportr   r   r   r$   r&   rs   r   r   r   r   r  r  rn   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HMMO r   