
    xKgn=                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlZ ej$                  ej&                  d      Zdddd	Zd
d
dd	ZdddZi dej0                  e j0                  gdej2                  e j2                  gdg dej4                  e j4                  gdej6                  e j6                  gde j8                  gde j:                  gde j<                  gde j>                  gdg de j@                  gde jB                  gdg dg dg dg dg i dejD                  e jD                  gde jF                  gd e jH                  gd!g d"g d#g d$g d%ejJ                  e jJ                  gd&g d'g d(g d)g d*ejL                  e jL                  gd+ejN                  e jN                  gd,g d-g d.g g g g ejP                  e jP                  gejR                  e jR                  gejT                  e jT                  gg d/Z+g d0Z,e+j[                         D  ci c]  \  } } e.|      d kD  s| | c}} Z+e+j[                         D cg c]2  \  }}d1|D cg c]  } e/|      ja                  d2      d     c}v s1|4 c}}}Z1e+j[                         D cg c]2  \  }}d3|D cg c]  } e/|      ja                  d2      d     c}v s1|4 c}}}Z2d>d4Z3d5 Z4d6 Z5e G d7 d8e             Z6e6jo                          d9 Z8d: Z9e G d; d<e             Z:e;d=k(  r ejx                          yyc c}} w c c}w c c}}}w c c}w c c}}}w )?    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                 |   |dk(  r0dj                  |D cg c]  }|dz   	 c}      }	||d| d|	d}
n|dk(  r8||d| ddj                  |      d	}
|
|j                  d
      rd|z  ndz  }
nH|dk(  s|dk(  sJ dj                  |D cg c]  }|dz   	 c}      }	 dj                  di t               }
|dk(  xs |dk(  }|r| dz   n| }|r|dz  n|}|rdnd}t        j
                  rd|z   nd|z   }d|||fz  }|dk(  r|g}d|g}n!|g}g }|dk7  r|s|dk(  r|dd||dz  |fz  gz  }|
||fS c c}w c c}w )z
    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                      Y/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_svml.pyfunc_patternsrd   ]   s    x88d3dQuWd34-0#tXF	&)3chhtnEe.>.>u.E"U*4Ow$("22288d3dQuWd34 Av"" i75K#7FSAQdAEI"MM$q&s1uK Aq)#44Ix=Y';19&EW$4v/1ac92EEFFF6!!A 4 4s   D4D9c                     |  d| | d| S )z, Returns pretty name for given set of modes _rK   )rT   rU   rV   names       rc   usecase_namerh      s     WAdVD64&))    c           
         t        | |||      } dj                  di t               }t        |dk(  rt        nt
              }| j                  d      r|j                  t              }t               }t               }|D ]?  }	t        |	dgd| |||      \  }
}}|j                  |       ||
z  }|j                  |       A |dz  }i }t        |t               |       |||   _        ||   ||fS )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     tT40D+ $$*F7-3X7D twK@E	"  !67uHUFC5%dHM1aa		 
 	  DEwy% E$K;&((ri   c                       e Zd ZdZdZ ej                  dj                  dg ee	      z               Z
ed        Zed        Zed        Zy)	TestSVMLGenerationz; Tests all SVML-generating functions produce desired calls F|z\$[a-z_]\w+,c                     t        | |      }	  |       \  }}|j	                  ||d       y # t        $ r t        j                         }d}Y 6w xY w)NF)statusmsg)getattr	Exception	traceback
format_excput)clstestnameoutqueuemethodokr   s         rc   	mp_runnerzTestSVMLGeneration.mp_runner   sU    h'	hGB 	3/0  	&&(CB	s   
- AAc                 \   	
 j                  d      rdk7  ry j                  d      xr dk(  }t        j                  f	t         	fd       }t	        d         }d| 
t         
|       t        j                  | d      
fd	       }t         d
| |       y )Nrk   r?   rA   r   c            	         t        d   d         \  } }}t        dt                 5  t        dt                 5  	  t	        d   d         |       }	 d d d        d d d        j                        }|D cg c]	  }||vs| }}|D cg c]	  }||v s| }}| xr | }dj                  |j                  d      D 	cg c]#  }	j                  j                  |	      rd	|	vr|	% c}	      }
d
| d| d|
 d| j                   }||fS #  t        d| j                  z         xY w# 1 sw Y   xY w# 1 sw Y   xY wc c}w c c}w c c}	w )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_templatez5TestSVMLGeneration._inject_test.<locals>.run_template   s   #5eT46;J6G6;Fm$E B& %%5x~F$%9;LT;RSJ!HS53D16}1E!HHJ!LI T G '',C-5LX'W^gXFL,2EFgnWFEE)E	BYY"%))D/ E/$NN))$/t / EFF #6()E7 ;!!' )""$**/ 
 s7NJ#$=bjj$HII TS GF MEEsS   ED6DE	EE	E"E(ED33D66D?	;EErg   run_zNot implementedc                    t        j                  d      }|j                         }|j                  t	        |       j
                  	|g      }|j                          |j                  d      }|j                  }|/|| j                  d       n|dk  r| j                  d|  d       | j                  |dd	
       |j                         }|d   }|d   }| j                  ||
       y )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_runnerz4TestSVMLGeneration._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OOFO,ri   test_)rM   numbaint64staticmethodrh   setattrunittest
skipUnless)r   rT   rU   rV   r   skippedr   postfixr   r   r   s   `````    @@rc   _inject_testzTestSVMLGeneration._inject_test   s     I&47?""5)7dai{{n		 	 
	6 udD%-@'#X|,			[*;	<	- 
=	-* 	uWI&4ri   c                     ddddddddg}dD ]8  }t         D ]-  }|D ]&  }dD ]  }| j                  |||t        |             ! ( / : d	D ](  }t        | | t	        d
      t        | |                   * y )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   autogeneratezTestSVMLGeneration.autogenerate   s    !&g%'!%W.02	
 DE &E D((dDKH !E ' ! DAC,C,WS!_=>ri   N)__name__
__module____qualname__rv   _numba_parallel_test_recompilerL   list
svml_funcsr   classmethodr   r   r   rK   ri   rc   r}   r}      sn    E "CHHo%6tJ7G%GHIJ1 1 >5 >5@ ? ?ri   r}   c                 ,    t        j                  |       S N)mathr   )rl   s    rc   math_sin_scalarr     s    88A;ri   c                     t        j                  | t         j                        }t        |       D ]-  }t	        j
                  t        j                  |            ||<   / |S NrT   npemptyr   rC   r   r   r   rm   rl   s      rc   math_sin_loopr     sC    
((1BJJ
'C1X"**Q-(A Jri   c                       e Zd ZdZdZd Zd Zd Zd Zddd	Z	d
 Z
 ej                  e      d        Zd Z ej                  e      d        Zd Z ej                  ddie      d        Zd Zy)TestSVMLz  Tests SVML behaves as expected Fc                     |rJ t        |D cg c]  }t        j                  |       c}      } t        |      |      } t        |d      |      }|j                  |   |j                  |   fS c c}w )NTrW   )tupler   typeofr   	overloads)r   rQ   rR   kwargsrl   r   stdfasts           rc   r   zTestSVML.compile#  so    zd3dU\\!_d34d3io'tC$'-}}S!4>>##666 4s   A3c                    |s
t               S g }|D ]  }t        |t        j                        r!|j	                  |j                  d             >t        |t        j                        r |j	                  |j                                xt        |t        j                        r|j	                  |       t        d       t        |      S )Nkz%Unsupported argument type encountered)
r   
isinstancer   ndarrayappendcopynumbernumbersNumber
ValueError)r   rR   new_argsrl   s       rc   	copy_argszTestSVML.copy_args,  s    7NA!RZZ(s,Aryy))Aw~~." !HII  Xri   c                 H    | j                   |g| \  }} | | j                  |  } |j                   | j                  |  } |j                   | j                  |  }t        j                  j
                  ||fi | t        j                  j
                  ||fi | y r   )r   r   entry_pointr   testingassert_almost_equal)	r   pyfuncrR   r   jitstdjitfastpy_expectedjitstd_resultjitfast_results	            rc   check_resultzTestSVML.check_result;  s    &$,,v55 ndnnd34 +**NDNND,AB -,,ndnnd.CD 	

&&}kLVL


&&~{MfMri   c                     |j                  dd       }|j                  dd       } | j                  |g| \  }}|r| j                  ||       |r| j                  ||       y y )Nstd_patternfast_pattern)popr   check_svml_presence)r   r   rR   r   r  r  r   r  s           rc   	check_asmzTestSVML.check_asmK  sh    jj5zz.$7 '$,,v55$$V[9$$Wl; ri   bothwhatc                    |dv sJ |dk(  s|dk(  r | j                   |g|i | |dk(  s|dk(  r | j                  |g|i | y y )N)r  resultr   r  r  r   )r  r  )r   r   r  rR   r   s        rc   checkzTestSVML.checkW  sc    00006>TX-Df6t6v66>TU]DNN63D3F3 +ri   c                 \    |j                   j                         }| j                  ||       y r   )libraryget_asm_strassertIn)r   rQ   r   r   s       rc   r
  zTestSVML.check_svml_presence^  s"    ll&&(gs#ri   )envvarsc                     t         j                  rdnd}| j                  t        dd|       | j                  t        dd|       y )Nz$_sinz$sin      @r   )r  r  )r  r  )r   rP   r  r   )r   pats     rc   test_scalar_context_asmz TestSVML.test_scalar_context_asmb  s9      gF

?BU
D

?BU
Eri   c                 4    | j                  t        dd       y )Nr  r  r  )r  r   r   s    rc   test_scalar_context_resultz#TestSVML.test_scalar_context_resulti  s    

?BX
6ri   c                 @    d}d}| j                  t        dd||       y )Nz__svml_sin8_ha,z__svml_sin8,
   r   )r  r  r  r  r   )r   r   r   s      rc   test_svml_asmzTestSVML.test_svml_asmm  s*      

="5c $ 	 	&ri   c                 4    | j                  t        dd       y )Nr  r  r  r   r  s    rc   test_svml_resultzTestSVML.test_svml_resultv  s    

="8
4ri   NUMBA_DISABLE_INTEL_SVML1c                    d }t         j                  f} t        |      |      } t        |d      |      }|j                  |   |j                  |   f}|D ].  }|j                  j                         }| j                  d|       0 y )Nc                     t        j                  | t         j                        }t        |       D ]-  }t	        j
                  t        j                  |            ||<   / |S r   r   r   s      rc   r   z2TestSVML.test_svml_disabled.<locals>.math_sin_loop~  sC    ((1BJJ/C1X"**Q-0A Jri   Tr   
__svml_sin)r   rJ   r   r   r  r  assertNotIn)r   r   r   r   r   fnsr   r   s           rc   test_svml_disabledzTestSVML.test_svml_disabledz  s    	 {{nd3i&'tC$'6mmC $.."55 B**((*C\3/ ri   c                     t        dhd      d        } |d       | j                  d|j                  |j                  d         v        y )Nr   r?   r   c                     t        j                  | dz  t         j                        }t        j                  |      }t	        |j
                        D ]%  }||xx   t        j                  ||         z  cc<   ' |S )Nr   r   )r   r   r   
empty_likerC   sizer   r"   )r   rl   rm   is       rc   implz@TestSVML.test_svml_working_in_non_isolated_context.<locals>.impl  sY    ((1q5

3A--"C388_A$))AaD/) %Jri      intel_svmlccr   )r   r   inspect_llvm
signatures)r   r1  s     rc   )test_svml_working_in_non_isolated_contextz2TestSVML.test_svml_working_in_non_isolated_context  sK    	xW	5	 
6	 	Q$*;*;DOOA<N*OOPri   N)r   r   r   rv   r   r   r   r  r  r  r
  r   run_test_in_subprocess_skylake_axv512_envvarsr  r  r!  r#  r+  r6  rK   ri   rc   r   r     s    * "7N 
< )/ 4$ %X$$-DEF FF7 %X$$-DE& F&5 %X$$.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   r8  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>rC     st      	      B B  X  !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@1tq!SVaZad1@
'--/ 5/TQ812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HMMO K
 A 45 45sH   <MM-M:!MM M=M(
!M#+M(0M(M#M(