
    J/Phn=              	          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j        e j        gdej        e j        gdg dej        e j        gdej        e j        gde j        gde j        gde j        gde j        gdg de j         gde j!        gdg dg dg dg dg i dej"        e j"        gde j#        gd e j$        gd!g d"g d#g d$g d%ej%        e j%        gd&g d'g d(g d)g d*ej&        e j&        gd+ej'        e j'        gd,g d-g d.g g g g ej(        e j(        gej)        e j)        gej*        e j*        gg d/Z+g d0Z,d1 e+-                                D             Z+d2 e+-                                D             Z.d3 e+-                                D             Z/d?d5Z0d6 Z1d7 Z2e G d8 d9e                      Z3e34                                 d: Z5d; Z6e G d< d=e                      Z7e8d>k    r ej9                     dS dS )@    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   c                 @    i | ]\  }}t          |          d k    ||S )r   )len).0kvs      U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_svml.py
<dictcomp>r@   U   s)    @@@tq!SVVaZZaZZZ    c                 4    g | ]\  }}d d |D             v |S )z<ufuncc                 ^    g | ]*}t          |                              d           d         +S  r   strsplitr<   ps     r?   
<listcomp>z<listcomp>.<listcomp>X   /    333A3q66<<$$Q'333rA    r<   fr>   s      r?   rK   rK   W   sE     5 5 5TQ83333344 44q 44 44 44rA   c                 4    g | ]\  }}d d |D             v |S )z	<built-inc                 ^    g | ]*}t          |                              d           d         +S rD   rF   rI   s     r?   rK   z<listcomp>.<listcomp>Z   rL   rA   rM   rN   s      r?   rK   rK   Y   sE     5 5 5TQ;3333344 44q 44 44 44rA           c                 p   |dk    r-d                     d |D                       }||d| d|d}	n|dk    r@||d| dd                     |          d	}	|	|                    d
          rd|z  ndz  }	nF|dk    s|dk    sJ d                     d |D                       } dj        di t                      }	|dk    p|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k    r|
s|dk    r|dd||dz  |fz  gz  }|	||fS )z
    For a given function and its usage modes,
    returns python code and assembly patterns it should and should not generate
    scalar,c                     g | ]}|d z   S )z[0]rM   r<   as     r?   rK   z!func_patterns.<locals>.<listcomp>e       333QuW333rA   z[0] += math.(z)
numpyz += np.)intz.astype(np.%s)

ranger   c                     g | ]}|d z   S )z[i]rM   rW   s     r?   rK   z!func_patterns.<locals>.<listcomp>l   rY   rA   zP{pad}for i in {mode}({res}.size):
{pad}{pad}{res}[i] += math.{func}({arg_list})
float32	complex64rO   r   r   _haz$_$z__svml_%s%d%s,__svml_r   int32z%zmmrM   )join
startswithformatlocalsr   IS_OSX)funcargsresdtypemodevlenfastmathpadarg_listbodyis_f32rO   r>   	prec_suffscalar_func	svml_funccontainsavoidss                     r?   func_patternsr|   ]   s    x8833d33344-0S###tttXXXF	&)c333chhtnnnnEe.>.>u.E.EO"U**4Ow$("2"2"2"28833d33344 A" "" " i75K#7F$SA"QdA)EI"M4$q&&s1uK Aq)#44Ix=Y';199&9EW$4$4v/1ac92EEFFF6!!rA   c                     |  d| | d| S )z, Returns pretty name for given set of modes _rM   )ro   rp   rq   names       r?   usecase_namer      s%     ))d)D))4)))rA   c           
      D   t          | |||          } dj        di t                      }t          |dk    rt          nt
                    }|                     d          r|                    t                    }t                      }t                      }|D ]K}	t          |	dgd| |||          \  }
}}|
                    |           ||
z  }|
                    |           L|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 retrM   )r   ri   rj   setnumpy_funcsother_funcsrh   
differencecomplex_funcs_excluder|   updateexecglobals__doc__)ro   rp   rq   rr   r   ru   funcsrz   r{   rO   bcrX   ldicts                 r?   combo_svml_usecaser      s;    tT400D+ $$*7 7-3XX7 7D twK@@E	"" 8  !677uuHUUF  C5%dHMM1aa	  DEwyy%   E$K;&((rA   c                       e Zd ZdZdZ ej        d                    dg ee	          z                       Z
ed             Zed             Zed             ZdS )	TestSVMLGenerationz; Tests all SVML-generating functions produce desired calls F|z\$[a-z_]\w+,c                     t          | |          }	  |            \  }}n%# t          $ r t          j                    }d}Y nw xY w|                    ||d           d S )NF)statusmsg)getattr	Exception	traceback
format_excput)clstestnameoutqueuemethodokr   s         r?   	mp_runnerzTestSVMLGeneration.mp_runner   s{    h''	fhhGB 	 	 	&((CBBB	 	3//00000s     AAc                    	
                      d          rdk    rd S                      d          odk    }t          j        f	t           	fd            }t	          d                   }d| 
t           
|           t          j        | d          
fd	            }t           d
| |           d S )Nr   r[   r]   r   c            	        	 t          d         d                   \  } }}t          dt                             5  t          dt                             5  	  t	          d         d                   |           }n#  t          d| j        z             xY w	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                              		fd|D             }	fd	|D             }| o| }d
                    
fd		                    d
          D                       }d| d| d| d| j         }||fS )Nrr   r   r   r   error_modelrr   r   zraised while compiling c                     g | ]}|v|	S rM   rM   r<   patternasms     r?   rK   zITestSVMLGeneration._inject_test.<locals>.run_template.<locals>.<listcomp>   s    LLL'W^^g^^^rA   c                     g | ]}|v |	S rM   rM   r   s     r?   rK   zITestSVMLGeneration._inject_test.<locals>.run_template.<locals>.<listcomp>   s    EEEgnnWnnnrA   r^   c                 P    g | ]"}j                             |          rd |v |#S )")
asm_filtersearch)r<   liner   s     r?   rK   zITestSVMLGeneration._inject_test.<locals>.run_template.<locals>.<listcomp>   sE     E E E$N))$//E8;t 8CrA   zWhile expecting z	 and not z,
it contains:
z
when compiling )
r   r   vlen2cpuvlen2cpu_featuresr   r   r   inspect_asmrg   rH   )fnrz   r{   	jitted_fnmissedfoundr   detailr   r   r   ro   flagsrp   sigrq   s            @r?   run_templatez5TestSVMLGeneration._inject_test.<locals>.run_template   s}   #5eT46;J6G6;Fm$E $E B& %%5x~FF J J$%9;LT;RSSJ JJ!HS53D16}1E!H !H !HHJ!L !LIIJ#$=bj$HIII 	J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J '',,CLLLLXLLLFEEEEFEEEE)E	BYYE E E E#))D// E E EF FF/6 / /E / /!'/ /"$*/ / 
 s7NsN   CB0'BB0B  B0$C0B4	4C7B4	8CCCr   run_zNot implementedc                 *   t          j        d          }|                                }|                    t	          |           j        	|g          }|                                 |                    d          }|j        }|8|| 	                    d           n |dk     r| 	                    d|  d           | 
                    |dd	
           |                                }|d         }|d         }|                     ||
           d S )Nspawn)targetrm      )timeoutzProcess timed out.r   zProcess terminated with signal .zprocess ended unexpectedly)r   r   r   )mpget_contextQueueProcesstyper   startrg   exitcodefailassertEqualget
assertTrue)
selfctxqrJ   term_or_timeoutr   outr   r   r   s
            r?   test_runnerz4TestSVMLGeneration._inject_test.<locals>.test_runner   s   .))C		A4::#7xmLLAGGIII  ffRf00OzH&#II23333\\IIL	LLLMMMXq.JKKK%%''C]Fe*COOFO,,,,,rA   test_)rh   numbaint64staticmethodr   setattrunittest
skipUnless)r   ro   rp   rq   r   skippedr   postfixr   r   r   s   `````    @@r?   _inject_testzTestSVMLGeneration._inject_test   s    I&& 	47??F""5))7dai{n		 	 	 	 	 	 	 	 	 
	6 udD%-@@#'##X|,,,		[*;	<	<	- 	- 	- 	- 
=	<	-* 	&W&&44444rA   c                    ddddddddg}dD ];}t           D ]1}|D ],}dD ]'}|                     |||t          |                     (-2<d	D ]7}t          | | t	          d
          t          | |                               8d S )NFr[   usecase)rr   r   r   Tfastmath_usecase)rb   float64ra   rf   )rT   r_   r   r[   )test_int32_range4_usecase	important)r   r   dictr   r   r   )r   	flag_listro   rq   r   rp   ns          r?   autogeneratezTestSVMLGeneration.autogenerate   s    !&g%' '!%W.0 02	
 D 	I 	IE  I I& I IE D I I((dDKKHHHHIII
 	? 	?AC,C,,WS!__==>>>>	? 	?rA   N)__name__
__module____qualname__r   _numba_parallel_test_recompilerg   list
svml_funcsr   classmethodr   r   r   rM   rA   r?   r   r      s        EE "CHHo%6ttJ7G7G%GHHIIJ1 1 [1 >5 >5 [>5@ ? ? [? ? ?rA   r   c                 *    t          j        |           S N)mathr   )r   s    r?   math_sin_scalarr     s    8A;;rA   c                     t          j        | t           j                  }t          |           D ]+}t	          j        t          j        |                    ||<   ,|S Nro   npemptyr   r_   r   r   r   r   r   s      r?   math_sin_loopr     sO    
(1BJ
'
'
'C1XX ) )"*Q--((AJrA   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dS )TestSVMLz  Tests SVML behaves as expected Fc                     |rJ t          d |D                       } t          |          |          } t          |d          |          }|j        |         |j        |         fS )Nc                 6    g | ]}t          j        |          S rM   )r   typeof)r<   r   s     r?   rK   z$TestSVML.compile.<locals>.<listcomp>%  s     333U\!__333rA   Trr   )tupler   	overloads)r   rl   rm   kwargsr   stdfasts          r?   r   zTestSVML.compile#  sr    33d33344d3iioo'tC$'''--}S!4>##666rA   c                    |st                      S g }|D ]}t          |t          j                  r)|                    |                    d                     Et          |t          j                  r(|                    |                                           t          |t          j                  r|                    |           t          d          t          |          S )Nr=   z%Unsupported argument type encountered)
r  
isinstancer   ndarrayappendcopynumbernumbersNumber
ValueError)r   rm   new_argsr   s       r?   	copy_argszTestSVML.copy_args,  s     	77N 	J 	JA!RZ(( Js,,,,Ary)) J))))Aw~.. J"""" !HIIIXrA   c                      | j         |g|R  \  }} | | j        |  } |j         | j        |  } |j         | j        |  }t          j        j        ||fi | t          j        j        ||fi | d S r   )r   r  entry_pointr   testingassert_almost_equal)	r   pyfuncrm   r  jitstdjitfastpy_expectedjitstd_resultjitfast_results	            r?   check_resultzTestSVML.check_result;  s    &$,v5555 fndnd34 +*NDND,AB -,ndnd.CD 	
&}kLLVLLL

&~{MMfMMMMMrA   c                     |                     dd           }|                     dd           } | j        |g|R  \  }}|r|                     ||           |r|                     ||           d S d S )Nstd_patternfast_pattern)popr   check_svml_presence)r   r  rm   r  r   r!  r  r  s           r?   	check_asmzTestSVML.check_asmK  s    jj55zz.$77 '$,v5555 	:$$V[999 	<$$Wl;;;;;	< 	<rA   bothwhatc                    |dv sJ |dk    s|dk    r | j         |g|R i | |dk    s|dk    r | j        |g|R i | d S d S )N)r%  resultr   r%  r)  r   )r  r$  )r   r  r'  rm   r  s        r?   checkzTestSVML.checkW  s    000006>>TX--Df6t666v6666>>TU]]DN63D333F33333 +]rA   c                 d    |j                                         }|                     ||           d S r   )libraryget_asm_strassertIn)r   rl   r   r   s       r?   r#  zTestSVML.check_svml_presence^  s/    l&&((gs#####rA   )envvarsc                     t           j        rdnd}|                     t          dd|           |                     t          dd|           d S )Nz$_sinz$sin      @r   )r'  r   )r'  r!  )r   rk   r*  r   )r   pats     r?   test_scalar_context_asmz TestSVML.test_scalar_context_asmb  sN      2ggF

?BU
DDD

?BU
EEEEErA   c                 @    |                      t          dd           d S )Nr1  r)  r&  )r*  r   r   s    r?   test_scalar_context_resultz#TestSVML.test_scalar_context_resulti  s     

?BX
66666rA   c                 L    d}d}|                      t          dd||           d S )Nz__svml_sin8_ha,z__svml_sin8,
   r   )r'  r   r!  r*  r   )r   r  r  s      r?   test_svml_asmzTestSVML.test_svml_asmm  s>      

="5c $ 	 	& 	& 	& 	& 	&rA   c                 @    |                      t          dd           d S )Nr8  r)  r&  r9  r5  s    r?   test_svml_resultzTestSVML.test_svml_resultv  s     

="8
44444rA   NUMBA_DISABLE_INTEL_SVML1c                 &   d }t           j        f} t          |          |          } t          |d          |          }|j        |         |j        |         f}|D ]1}|j                                        }|                     d|           2d S )Nc                     t          j        | t           j                  }t          |           D ]+}t	          j        t          j        |                    ||<   ,|S r   r   r   s      r?   r   z2TestSVML.test_svml_disabled.<locals>.math_sin_loop~  sO    (1BJ///C1XX 1 1"*Q--00AJrA   Tr  
__svml_sin)r   rf   r   r  r,  r-  assertNotIn)r   r   r   r  r  fnsr   r   s           r?   test_svml_disabledzTestSVML.test_svml_disabledz  s    	 	 	 {nd3ii&&'tC$'''66mC $."55  	0 	0B*((**C\3////	0 	0rA   c                     t          dhd          d             } |d           |                     d|                    |j        d                   v            d S )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_liker_   sizer   r"   )r   r   r   is       r?   implz@TestSVML.test_svml_working_in_non_isolated_context.<locals>.impl  sk    (1q5
333A-""C38__ * *A$)AaD//)JrA      intel_svmlccr   )r   r   inspect_llvm
signatures)r   rJ  s     r?   )test_svml_working_in_non_isolated_contextz2TestSVML.test_svml_working_in_non_isolated_context  sl    	xW	5	5	5	 	 
6	5	 	Q$*;*;DOA<N*O*OOPPPPPrA   N)r   r   r   r   r   r   r  r  r$  r*  r#  r   run_test_in_subprocess_skylake_axv512_envvarsr3  r6  r:  r<  rD  rO  rM   rA   r?   r   r     sj       ** "7 7 7  N N N 
< 
< 
< )/ 4 4 4 4 4$ $ $ %X$-DEEEF F FEF7 7 7 %X$-DEEE& & FE&5 5 5 %X$.H# .I0G.I J J J0 0J J0$	Q 	Q 	Q 	Q 	QrA   r   __main__)rR   ):r   r[   r   r  r   r   multiprocessingr   r   r   r   
numba.corer   numba.tests.supportr   r   r   r   r   
USING_SVML
needs_svmlr   r   rQ  r   r   r   r   r   r   r   r   r   r   r"   r#   r$   r)   r.   r/   r6   r7   r8   r   r   itemsr   r   r|   r   r   r   r   r   r   r   r   mainrM   rA   r?   <module>rZ     s         				                        B B B B B B B B B B  X !2!EG G
 Y+;<< r&788 
 .>1BD D *	!*	!* 
"* 
!	*
 
!* 	{* 
|* 	{* 
|* "* 	{* 
|* "* "* "*  "!*" "#* *$ #%*& 
z'*( 	{)** "+*, "-*. "/*0 "1*2 $*%3*4 "5*6 "7*8 "9*: ";*< $*%=*> $*%?*@ "A*B "C*D "E* *F #!#S* * *
X JII  A@z//11@@@
5 5Z--// 5 5 55 5Z--// 5 5 5(" (" (" ("V* * *) ) )4 b? b? b? b? b? b? b? b?J    ! ! !     zQ zQ zQ zQ zQx zQ zQ zQz zHMOOOOO rA   