
    shn=                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
  S SKJr  S SKJrJrJr  S SKr\R$                  " \R&                  S5      rSSSS	.rS
S
SS	.rSSS.r0 S\R0                  \ R0                  /_S\R2                  \ R2                  /_S/ _S\R4                  \ R4                  /_S\R6                  \ R6                  /_S\ R8                  /_S\ R:                  /_S\ R<                  /_S\ R>                  /_S/ _S\ R@                  /_S\ RB                  /_S/ _S/ _S/ _S/ _S/ _0 S\RD                  \ RD                  /_S\ RF                  /_S \ RH                  /_S!/ _S"/ _S#/ _S$/ _S%\RJ                  \ RJ                  /_S&/ _S'/ _S(/ _S)/ _S*\RL                  \ RL                  /_S+\RN                  \ RN                  /_S,/ _S-/ _S./ _E/ / / \RP                  \ RP                  /\RR                  \ RR                  /\RT                  \ RT                  // S/.Er+/ S0Qr,\+R[                  5        V Vs0 s H  u  p\." U5      S :  d  M  X_M     snn r+\+R[                  5        VVVs/ s H8  u  p!S1U Vs/ s H  n\/" U5      Ra                  S25      S    PM     sn;   d  M6  UPM:     snnnr1\+R[                  5        VVVs/ s H8  u  p!S3U Vs/ s H  n\/" U5      Ra                  S25      S    PM     sn;   d  M6  UPM:     snnnr2S>S4 jr3S5 r4S6 r5\ " S7 S8\5      5       r6\6Ro                  5         S9 r8S: r9\ " S; S<\5      5       r:\;S=:X  a  \Rx                  " 5         ggs  snn f s  snf s  snnnf s  snf s  snnnf )?    N)njitprange)config)TestCasetagoverride_env_configz"SVML tests need SVML to be presentnehalemhaswellzskylake-avx512)          z-prefer-256-bit)NUMBA_CPU_NAMENUMBA_CPU_FEATURESsincospowexplogacosacoshasinasinhatan2atanatanhcbrtcdfnorm
cdfnorminvceilcosdcosherferfcerfcinverfinvexp10exp2expm1floorfmodhypotinvsqrtlog10log1plog2logb	nearbyint)rintroundsindsinhtantanhtrunc)r7   r.   r)   r/   r8   r   z<ufunc z	<built-inc                    US:X  a6  SR                  U Vs/ s H  oS-   PM	     sn5      n	U< U< SU < SU	< S3n
OUS:X  a@  U< U< SU < SSR                  U5      < S	3n
XR                  S
5      (       a  SU-  OS-  n
OLUS:X  d  US:X  d   eSR                  U Vs/ s H  oS-   PM	     sn5      n	SR                  " S0 [        5       D6n
US:H  =(       d    US:H  nU(       a  U S-   OU nU(       a  US-  OUnU(       a  SOSn[        R
                  (       a  SU-   OSU-   nSXU4-  nUS:X  a  U/nSU/nO'U/n/ nUS:w  a  U(       d  US:X  a  USSXS-  U4-  /-  nU
UU4$ s  snf s  snf )zw
For a given function and its usage modes,
returns python code and assembly patterns it should and should not generate
scalar,z[0]z[0] += math.(z)
numpyz += np.)intz.astype(np.%s)

ranger   z[i]zP{pad}for i in {mode}({res}.size):
{pad}{pad}{res}[i] += math.{func}({arg_list})
float32	complex64fr   r   _haz$_$z__svml_%s%d%s,__svml_r   int32z%zmm )join
startswithformatlocalsr   IS_OSX)funcargsresdtypemodevlenfastmathpadaarg_listbodyis_f32rF   v	prec_suffscalar_func	svml_funccontainsavoidss                      i/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_svml.pyfunc_patternsrd   ]   s    x88d3duWd34-0#tXF	&)3chhtnE.>.>u.E.E"U*4Ow$("22288d3duWd34Av "" i75K#7FSAQdAEI"MM$q&s1uK A)#44Ix=Y';19&EW$4v/1c92EEFFF6!!A 4 4s   E' E,c                     U  SU U SU 3$ )z+Returns pretty name for given set of modes _rK   )rT   rU   rV   names       rc   usecase_namerh      s     WAdVD64&))    c           
         [        XX$5      nSR                  " S0 [        5       D6n[        US:X  a  [        O[
        5      nU R                  S5      (       a  UR                  [        5      n[        5       n[        5       nU H<  n	[        U	S/SXX#5      u  pnUR                  U5        XZ-  nUR                  U5        M>     US-  n0 n[        U[        5       U5        X]U   l        X   Xx4$ )z>Combine multiple function calls under single umbrella usecase z\def {name}(n):
        x   = np.empty(n*8, dtype=np.{dtype})
        ret = np.empty_like(x)
r?   complexxretz        return retrK   )rh   rN   rO   setnumpy_funcsother_funcsrM   
differencecomplex_funcs_excluderd   updateexecglobals__doc__)rT   rU   rV   rW   rg   r[   funcsra   rb   rF   bcrY   ldicts                 rc   combo_svml_usecaser{      s     T0D$$*F+ 7-3X7D twK@E	""  !67uHUFC5%dMaa		 
 	  DEwy% $K;((ri   c                       \ rS rSrSrSr\R                  " SR                  S/\	" \
5      -   5      5      r\S 5       r\S 5       r\S 5       rS	rg
)TestSVMLGeneration   z:Tests all SVML-generating functions produce desired calls F|z\$[a-z_]\w+,c                     [        X5      n U" 5       u  pEUR	                  XES.5        g ! [         a    [        R                  " 5       nSn N7f = f)NF)statusmsg)getattr	Exception	traceback
format_excput)clstestnameoutqueuemethodokr   s         rc   	mp_runnerTestSVMLGeneration.mp_runner   sO    '	hGB 	/0  	&&(CB	s   	* !AAc                   ^ ^^^^^	^
 TR                  S5      (       a  TS:w  a  g TR                  S5      =(       a    TS:H  n[        R                  4m	[        U UUUU	U4S j5       n[	        TTTTS   5      nSU 3m
[        T T
U5        [        R                  " U(       + S5      U
4S	 j5       n[        T S
U 3U5        g )Nrk   r?   rA   r   c                    > [        TTTTS   TS   5      u  pn[        S[        T   5         [        S[        T   5          [	        TTS   TS   S9" U 5      n S S S 5        S S S 5        WR                  T5      nU Vs/ s H  oUU;  d  M
  UPM     nnU Vs/ s H  oUU;   d  M
  UPM     nnU(       + =(       a    U(       + nSR                  UR                  S5       V	s/ s H/  n	TR                  R                  U	5      (       d  M%  S	U	;  d  M-  U	PM1     sn	5      n
S
U SU SU
 SU R                   3nX4$ !   [        SU R                  -   5      e= f! , (       d  f       GN= f! , (       d  f       GN= fs  snf s  snf s  sn	f )NrW   rg   r   r   error_modelrW   r   zraised while compiling rB   "zWhile expecting z	 and not z,
it contains:
z
when compiling )r{   r   vlen2cpuvlen2cpu_featuresr   r   rv   inspect_asmrL   split
asm_filtersearch)fnra   rb   	jitted_fnasmpatternmissedfoundr   linedetailr   r   rT   flagsrU   sigrV   s               rc   run_template5TestSVMLGeneration._inject_test.<locals>.run_template   s   #5eT46;J6G6;Fm$E B& %%5x~F$%9;LT;RSJ $S53D16}1E!HHJ!LI T G '',C-5LX'^gXFL,2EFnWFEE)E	BYY"%))D/ E/$NN))$/ 8;t / EFF #6()E7 ;!!' )""$**/ 
 7NJ#$=bjj$HII TS GF MEEs_   E(ED9E( 	E:E:	E?&E?!$F	FF9EE
E%	 E((
E7rg   run_zNot implementedc                   > [         R                  " S5      nUR                  5       nUR                  [	        U 5      R
                  T	U/S9nUR                  5         UR                  SS9nUR                  nUc1  Uc  U R                  S5        OUS:  a  U R                  SU*  S35        U R                  USS	S
9  UR                  5       nUS   nUS   nU R                  XxS
9  g )Nspawn)targetrR      )timeoutzProcess timed out.r   zProcess terminated with signal .zprocess ended unexpectedly)r   r   r   )mpget_contextQueueProcesstyper   startrL   exitcodefailassertEqualget
assertTrue)
selfctxqpterm_or_timeoutr   outr   r   r   s
            rc   test_runner4TestSVMLGeneration._inject_test.<locals>.test_runner   s    ..)C		A4:#7#7xmLAGGI  ffRf0OzzH&#II23\II ?	{!LMXq.JK%%'C]Fe*COOFO,ri   test_)rM   numbaint64staticmethodrh   setattrunittest
skipUnless)r   rT   rU   rV   r   skippedr   postfixr   r   r   s   `````    @@rc   _inject_testTestSVMLGeneration._inject_test   s     I&&47?""5)7dai{{n		 	 
	6 udD%-@'#X|,			[*;	<	- 
=	-* 	uWI&4ri   c                     SSSS.SSSS./nS H>  n[          H1  nU H(  nS H  nU R                  X%U[        U5      5        M!     M*     M3     M@     S	 H'  n[        X[	        S
5      " [        X5      5      5        M)     g )NFr?   usecase)rW   r   rg   Tfastmath_usecase)rE   float64rD   rJ   )r<   rC   r   r?   )test_int32_range4_usecase	important)r   r   dictr   r   r   )r   	flag_listrT   rV   r   rU   ns          rc   autogenerateTestSVMLGeneration.autogenerate   s    !&g%'!%W.02	
 DE &E D((dDKH !E ' ! DACC,WS_=>ri   rK   N)__name__
__module____qualname____firstlineno__rv   _numba_parallel_test_recompilerL   list
svml_funcsr   classmethodr   r   r   __static_attributes__rK   ri   rc   r}   r}      sl    E "CHHo%6tJ7G%GHIJ1 1 >5 >5@ ? ?ri   r}   c                 .    [         R                  " U 5      $ N)mathr   )rl   s    rc   math_sin_scalarr     s    88A;ri   c                     [         R                  " U [         R                  S9n[        U 5       H/  n[        R
                  " [         R                  " U5      5      X'   M1     U$ NrT   npemptyr   rC   r   r   r   rm   rl   s      rc   math_sin_loopr     sA    
((1BJJ
'C1X"**Q-( Jri   c                       \ rS rSrSrSrS rS rS rS r	SS	.S
 jr
S r\R                  " \S9S 5       rS r\R                  " \S9S 5       rS r\R                  " SS0\ES9S 5       rS rSrg)TestSVMLi  zTests SVML behaves as expected Fc                     U(       a   e[        U Vs/ s H  n[        R                  " U5      PM     sn5      n[        U5      " U5      n[        USS9" U5      nUR                  U   UR                  U   4$ s  snf )NTrW   )tupler   typeofr   	overloads)r   rQ   rR   kwargsrl   r   stdfasts           rc   r   TestSVML.compile#  sk    zd3dU\\!_d343ioC$'-}}S!4>>##666 4s    A9c                    U(       d
  [        5       $ / nU H  n[        U[        R                  5      (       a"  UR	                  UR                  S5      5        MD  [        U[        R                  5      (       a!  UR	                  UR                  5       5        M  [        U[        R                  5      (       a  UR	                  U5        M  [        S5      e   [        U5      $ )Nkz%Unsupported argument type encountered)
r   
isinstancer   ndarrayappendcopynumbernumbersNumber
ValueError)r   rR   new_argsrl   s       rc   	copy_argsTestSVML.copy_args,  s    7NA!RZZ((s,Aryy)))Aw~~.." !HII  Xri   c                 F   U R                   " U/UQ76 u  pEU" U R                  " U6 6 nUR                  " U R                  " U6 6 nUR                  " U R                  " U6 6 n[        R                  R
                  " Xv40 UD6  [        R                  R
                  " X40 UD6  g r   )r   r  entry_pointr   testingassert_almost_equal)	r   pyfuncrR   r   jitstdjitfastpy_expectedjitstd_resultjitfast_results	            rc   check_resultTestSVML.check_result;  s    ,,v55 dnnd34 **DNND,AB !,,dnnd.CD 	

&&}LVL


&&~MfMri   c                     UR                  SS 5      nUR                  SS 5      nU R                  " U/UQ76 u  pgU(       a  U R                  Xd5        U(       a  U R                  Xu5        g g )Nstd_patternfast_pattern)popr   check_svml_presence)r   r	  rR   r   r  r  r
  r  s           rc   	check_asmTestSVML.check_asmK  s`    jj5zz.$7 ,,v55$$V9$$W; ri   bothwhatc                    US;   d   eUS:X  d  US:X  a  U R                   " U/UQ70 UD6  US:X  d  US:X  a  U R                  " U/UQ70 UD6  g g )N)r  resultr   r  r  r   )r  r  )r   r	  r  rR   r   s        rc   checkTestSVML.checkW  s_    00006>TX-f6t6v66>TU]NN63D3F3 +ri   c                 Z    UR                   R                  5       nU R                  X#5        g r   )libraryget_asm_strassertIn)r   rQ   r   r   s       rc   r  TestSVML.check_svml_presence^  s     ll&&(g#ri   )envvarsc                     [         R                  (       a  SOSnU R                  [        SSUS9  U R                  [        SSUS9  g )Nz$_sinz$sin      @r   )r  r  )r  r  )r   rP   r  r   )r   pats     rc   test_scalar_context_asm TestSVML.test_scalar_context_asmb  s9      gF

?BU
D

?BU
Eri   c                 .    U R                  [        SSS9  g )Nr&  r  r  )r  r   r   s    rc   test_scalar_context_result#TestSVML.test_scalar_context_resulti  s    

?BX
6ri   c                 :    SnSnU R                  [        SSUUS9  g )Nz__svml_sin8_ha,z__svml_sin8,
   r   )r  r  r  r  r   )r   r   r   s      rc   test_svml_asmTestSVML.test_svml_asmm  s*      

="5c $ 	 	&ri   c                 .    U R                  [        SSS9  g )Nr/  r  r  r0  r+  s    rc   test_svml_resultTestSVML.test_svml_resultv  s    

="8
4ri   NUMBA_DISABLE_INTEL_SVML1c                    S n[         R                  4n[        U5      " U5      n[        USS9" U5      nUR                  U   UR                  U   4nU H/  nUR                  R                  5       nU R                  SU5        M1     g )Nc                     [         R                  " U [         R                  S9n[        U 5       H/  n[        R
                  " [         R                  " U5      5      X'   M1     U$ r   r   r   s      rc   r   2TestSVML.test_svml_disabled.<locals>.math_sin_loop~  sA    ((1BJJ/C1X"**Q-0 Jri   Tr   
__svml_sin)r   rJ   r   r   r   r!  assertNotIn)r   r   r   r   r   fnsr   r   s           rc   test_svml_disabledTestSVML.test_svml_disabledz  s}    	 {{n3i&C$'6mmC $.."55 B**((*C\3/ ri   c                     [        S1SS9S 5       nU" S5        U R                  SUR                  UR                  S   5      ;   5        g )Nr   r?   r   c                     [         R                  " U S-  [         R                  S9n[         R                  " U5      n[	        UR
                  5       H%  nX#==   [        R                  " X   5      -  ss'   M'     U$ )Nr   r   )r   r   r   
empty_likerC   sizer   r"   )r   rl   rm   is       rc   impl@TestSVML.test_svml_working_in_non_isolated_context.<locals>.impl  sU    ((1q5

3A--"C388_$))AD/) %Jri      intel_svmlccr   )r   r   inspect_llvm
signatures)r   rE  s     rc   )test_svml_working_in_non_isolated_context2TestSVML.test_svml_working_in_non_isolated_context  sK    	xW	5	 
6	 	Q$*;*;DOOA<N*OOPri   rK   N)r   r   r   r   rv   r   r   r  r  r  r  r  r   run_test_in_subprocess_skylake_axv512_envvarsr(  r,  r1  r4  r>  rK  r   rK   ri   rc   r   r     s    * "7N 
< )/ 4$ $$-DEF FF7 $$-DE& F&5 $$.H# .I0G.I J0J0$	Qri   r   __main__)z        )=r   r?   r   r   r   r   multiprocessingr   r   r   r   
numba.corer   numba.tests.supportr   r   r   r   r   
USING_SVML
needs_svmlr   r   rN  r   r   r   r   r   r   r   r   r   r   r"   r#   r$   r)   r.   r/   r6   r7   r8   r   rr   itemslenstrr   ro   rp   rd   rh   r{   r}   r   r   r   r   r   main)r   r]   rF   r   s   0000rc   <module>rY     sj      	      B B   !2!2!EG
 Y+;< r&78 
 .>1BD *	!*	!* 
"* 
!	*
 
!* 		{* 

|* 		{* 

|* "* 		{* 

|* "* "* "*  "!*" "#*$ #%*& 
z'*( 		{)** "+*, "-*. "/*0 "1*2 $**%3*4 "5*6 "7*8 "9*: ";*< $**%=*> $**%?*@ "A*B "C*D "E*F #!#S*
X J   *//1@1tqSVaZdad1@
'--/ 5/TQ8123A3q6<<$Q'344q/ 5'--/ 5/TQ;123A3q6<<$Q'344q/ 5("V*)4 b? b? b?J    ! zQx zQ zQz zMMO K
 A 45 45sH   <M&M&0M1=$M,!M1)M1M=$M89M=M=,M18M=