§
    ƒÛg!C  ã            	       óÐ  — 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Zd dl	Z
d dlmZmZ d dlZd dlmZmZ d dlmZmZ d dlmZ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 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j0        e j0        g“d-g “d.g “d/g “¥g g g ej1        e j1        gej2        e j2        gej3        e j3        gg d0œ¥Z4g d1¢Z5d2„ e4 6                    ¦   «         D ¦   «         Z4d3„ e4 6                    ¦   «         D ¦   «         Z7d4„ e4 6                    ¦   «         D ¦   «         Z8d@d6„Z9d7„ Z:d8„ Z;e G d9„ d:e¦  «        ¦   «         Z<e< =                    ¦   «          d;„ Z>d<„ Z?e G d=„ d>e¦  «        ¦   «         Z@eAd?k    r ejB        ¦   «          dS dS )Aé    N)ÚchainÚcombinations)ÚconfigÚcpu)ÚprangeÚnjit)Úcompile_isolatedÚFlags)ÚTestCaseÚtagÚoverride_env_configz"SVML tests need SVML to be presentÚnehalemÚhaswellúskylake-avx512)é   é   é   Ú ú-prefer-256-bitÚ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)r<   r3   r.   r4   r=   r   c                 ó@   — i | ]\  }}t          |¦  «        d k    ¯||“ŒS )r   )Úlen)Ú.0ÚkÚvs      úK/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_svml.pyú
<dictcomp>rE   T   s)   € Ð@Ð@Ð@‘t�q˜!µS¸±V´V¸a²Z°Zˆa�°Z°Z°Zó    c                 ó4   — g | ]\  }}d d„ |D ¦   «         v ¯|‘ŒS )z<ufuncc                 ó^   — g | ]*}t          |¦  «                             d ¦  «        d         ‘Œ+S ©ú r   ©ÚstrÚsplit©rA   Úps     rD   ú
<listcomp>z<listcomp>.<listcomp>W   ó/   € Ð3Ð3Ð3¨A•3�q‘6”6—<’< Ñ$Ô$ QÔ'Ð3Ð3Ð3rF   © ©rA   ÚfrC   s      rD   rP   rP   V   sE   € ð 5ð 5ð 5‘T�Q˜°8Ø3Ð3°Ð3Ñ3Ô3ð44ð 44ˆqð 44ð 44ð 44rF   c                 ó4   — g | ]\  }}d d„ |D ¦   «         v ¯|‘ŒS )z	<built-inc                 ó^   — g | ]*}t          |¦  «                             d ¦  «        d         ‘Œ+S rI   rK   rN   s     rD   rP   z<listcomp>.<listcomp>Y   rQ   rF   rR   rS   s      rD   rP   rP   X   sE   € ð 5ð 5ð 5‘T�Q˜°;Ø3Ð3°Ð3Ñ3Ô3ð44ð 44ˆqð 44ð 44ð 44rF   ú        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]rR   ©rA   Úas     rD   rP   z!func_patterns.<locals>.<listcomp>d   ó   € Ð3Ð3Ð3¨˜Q˜u™WÐ3Ð3Ð3rF   z[0] += math.ú(z)
Únumpyz += np.ú)Úintz.astype(np.%s)
ú
Úranger   c                 ó   — g | ]}|d z   ‘ŒS )z[i]rR   r\   s     rD   rP   z!func_patterns.<locals>.<listcomp>k   r^   rF   zP{pad}for i in {mode}({res}.size):
{pad}{pad}{res}[i] += math.{func}({arg_list})
Úfloat32Ú	complex64rT   r   r   Ú_haz$_ú$z__svml_%s%d%s,Ú__svml_r   Úint32z%zmmrR   )ÚjoinÚ
startswithÚformatÚlocalsr   ÚIS_OSX)ÚfuncÚargsÚresÚdtypeÚmodeÚvlenÚfastmathÚpadÚarg_listÚbodyÚis_f32rT   rC   Ú	prec_suffÚscalar_funcÚ	svml_funcÚcontainsÚavoidss                     rD   Úfunc_patternsr�   \   sé  € ð ˆxÒÐØ—8’8Ð3Ð3¨dÐ3Ñ3Ô3Ñ4Ô4ˆØ-0¨S°#°#°#°t°t°t¸X¸X¸XÐFˆˆØ	�ŠˆØ&) c¨3¨3¨3°°°°c·h²h¸t±n´n°n°nÐEˆØ¨e×.>Ò.>¸uÑ.EÔ.EÐOÐ" UÑ*Ð*È4ÑOˆˆà�wŠˆ $¨(Ò"2Ð"2Ð"2Ð"2Ø—8’8Ð3Ð3¨dÐ3Ñ3Ô3Ñ4Ô4ˆðð Aäð"ð "å™œð"ð "ˆð �iÒÐ7 5¨KÒ#7€FØÐ$ˆˆS‰ˆ €AØÐ"ˆˆQ‰ˆ˜d€AàÐ)�� E€IÝ"œMÐ4�$�q‘&�&¨s°1©u€KØ  A q¨)Ð#4Ñ4€IØˆxÒÐØ�=ˆØ˜YÐ'ˆˆà�;ˆØˆà�1Š9ˆ9˜&ˆ9 E¨WÒ$4Ð$4Ø�vÐ/°1°a¸±c¸9Ð2EÑEÐFÑFˆFØ�˜6Ð!Ð!rF   c                 ó   — | › d|› |› d|› �S )z, Returns pretty name for given set of modes Ú_rR   )rt   ru   rv   Únames       rD   Úusecase_namer…   ‡   s%   € ð Ð)Ð)�dÐ)˜DÐ)Ð) 4Ð)Ð)Ð)rF   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 retrR   )r…   rn   ro   ÚsetÚnumpy_funcsÚother_funcsrm   Ú
differenceÚcomplex_funcs_excluder�   ÚupdateÚexecÚglobalsÚ__doc__)rt   ru   rv   rw   r„   rz   Úfuncsr   r€   rT   ÚbÚcr]   Úldicts                 rD   Úcombo_svml_usecaser—   �   s;  € õ ˜˜t T¨4Ñ0Ô0€Dð+ð $ä$*ð7ð 7å-3©X¬Xð7ð 7€Dõ ˜t wš˜•�µKÑ@Ô@€EØ×Ò˜	Ñ"Ô"ð 8Ø× Ò Õ!6Ñ7Ô7ˆÝ‰uŒu€HÝ‰UŒU€Fàð ð ˆÝ  C 5¨%°¸¸dÀHÑMÔM‰ˆˆ1ˆaØ�Š�aÑÔÐØ�‰	ˆØ�Š˜ÑÔÐÐØÐ Ñ €Dà€EÝˆ�w‰yŒy˜%Ñ Ô Ð Ø€Eˆ$„KÔØ�Œ;˜ &Ð(Ð(rF   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         rD   Ú	mp_runnerzTestSVMLGeneration.mp_runner°   s{   € å˜˜hÑ'Ô'ˆð	Ø�f‘h”h‰GˆB��øÝð 	ð 	ð 	ÝÔ&Ñ(Ô(ˆCØˆBˆBˆBð	øøøð 	�Š ¨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`   rb   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 )Nrw   r„   ÚNUMBA_CPU_NAMEÚNUMBA_CPU_FEATURESÚerror_model©rw   r­   zraised while compiling c                 ó   •— g | ]}|‰v¯|‘Œ	S rR   rR   ©rA   ÚpatternÚasms     €rD   rP   zITestSVMLGeneration._inject_test.<locals>.run_template.<locals>.<listcomp>Ò   s   ø€ ÐLÐLÐL '¸WÈ¸^¸^�g¸^¸^¸^rF   c                 ó   •— g | ]}|‰v ¯|‘Œ	S rR   rR   r°   s     €rD   rP   zITestSVMLGeneration._inject_test.<locals>.run_template.<locals>.<listcomp>Ó   s   ø€ ÐEÐEÐE °gÀ°n°n�W°n°n°nrF   rc   c                 óP   •— g | ]"}‰j                              |¦  «        rd |v¯ |‘Œ#S )ú")Ú
asm_filterÚsearch)rA   Úliner£   s     €rD   rP   zITestSVMLGeneration._inject_test.<locals>.run_template.<locals>.<listcomp>Ö   sE   ø€ ð Eð Eð E˜$Ø”N×)Ò)¨$Ñ/Ô/ðEØ8;¸t¸¸ð Ø8C¸¸rF   zWhile expecting z	 and not z,
it contains:
z
when compiling )
r—   r   Úvlen2cpuÚvlen2cpu_featuresr   rŸ   r’   Úinspect_asmrl   rM   )Úfnr   r€   Ú	jitted_fnÚmissedÚfoundr§   Údetailr�   r²   r£   rt   Úflagsru   Úsigrv   s            @€€€€€€rD   Úrun_templatez5TestSVMLGeneration._inject_test.<locals>.run_templateÃ   s}  øø€ å#5°e¸TÀ4Ø6;¸JÔ6GØ6;¸F´mñ$Eô $EÑ ˆB�˜&õ %Ð%5µxÀ´~ÑFÔFð Jð JÝ$Ð%9Õ;LÈTÔ;RÑSÔSðJð JðJð!H¥ S°5¸Ô3DØ16°}Ô1Eð!Hñ !Hô !HØHJñ!Lô !L�I�IøðJÝ#Ð$=¸b¼jÑ$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ÐL¨XÐLÑLÔLˆFØEÐEÐEÐE¨FÐEÑEÔEˆEØ�Ð) E 	ˆBØ—Y’YðEð Eð Eð E #§)¢)¨D¡/¤/ð Eñ Eô EñFô FˆFð/ 6ð /ð /°Eð /ð /Ø!'ð/ð /à"$¤*ð/ð /ð ð
 �s�7ˆNsN   Á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)Ú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ÚqrO   Úterm_or_timeoutrÑ   Úoutrœ   r�   r¤   s
            €rD   Útest_runnerz4TestSVMLGeneration._inject_test.<locals>.test_runnerã   s  ø€ å”. Ñ)Ô)ˆCØ—	’	‘”ˆAØ—’¥4¨¡:¤:Ô#7¸xÈ¸m�ÑLÔLˆAØ�GŠG‰IŒIˆIð  Ÿfšf¨R˜fÑ0Ô0ˆOØ”zˆHØÐ&ØÐ#Ø—I’IÐ2Ñ3Ô3Ð3Ð3Ø ’\�\Ø—I’IÐLÀÀ	ÐLÐLÐLÑMÔMÐMØ×Ò˜X qÐ.JÐÑKÔKÐKØ—%’%‘'”'ˆCØ˜”]ˆFØ�e”*ˆCØ�OŠO˜F¨ˆOÑ,Ô,Ð,Ð,Ð,rF   Útest_)rm   ÚnumbaÚint64Ústaticmethodr…   ÚsetattrÚunittestÚ
skipUnless)r£   rt   ru   rv   rÁ   ÚskippedrÃ   ÚpostfixrÛ   rÂ   r¤   s   `````    @@rD   Ú_inject_testzTestSVMLGeneration._inject_testº   s  øøøøøøø€ ð ×Ò˜IÑ&Ô&ð 	¨4°7ª?¨?ØˆFà×"Ò" 5Ñ)Ô)Ð7¨d°aªiˆÝŒ{ˆnˆå	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 
Œð	õ6 ˜u d¨D°%¸´-Ñ@Ô@ˆØ#˜'Ð#Ð#ˆÝ��X˜|Ñ,Ô,Ð,å	Ô	 ˜[Ð*;Ñ	<Ô	<ð	-ð 	-ð 	-ð 	-ñ 
=Ô	<ð	-õ* 	�Ð&˜WÐ&Ð&¨Ñ4Ô4Ð4Ð4Ð4rF   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)rw   r­   r„   TÚfastmath_usecase)rg   Úfloat64rf   rk   )rY   rd   r   r`   )Útest_int32_range4_usecaseÚ	important)r¹   rå   Údictrà   r   rž   )r£   Ú	flag_listrt   rv   rÁ   ru   Úns          rD   ÚautogeneratezTestSVMLGeneration.autogenerateû   sô   € à!&°gØ%ð'ð 'à!%°WØ.ð0ð 0ð2ˆ	ð
 Dð 	Ið 	IˆEÝ ð Ið I�Ø&ð Ið I�EØ Dð Ið I˜Ø×(Ò(¨°°d½DÀ¹K¼KÑHÔHÐHÐHðIðIðIð
ð 	?ð 	?ˆAå�C˜Ð,�C Ñ,Ô,­W°S¸!©_¬_Ñ=Ô=Ñ>Ô>Ð>Ð>ð	?ð 	?rF   N)Ú__name__Ú
__module__Ú__qualname__r’   Ú_numba_parallel_test_ÚreÚcompilerl   ÚlistÚ
svml_funcsr¶   Úclassmethodr¨   rå   rï   rR   rF   rD   r™   r™   §   s¡   € € € € € àEÐEð "Ðà�”˜CŸHšH nÐ%5°d°d¸:Ñ6FÔ6FÑ%FÑGÔGÑHÔH€Jàð1ð 1ñ „[ð1ð ð>5ð >5ñ „[ð>5ð@ ð?ð ?ñ „[ð?ð ?ð ?rF   r™   c                 ó*   — t          j        | ¦  «        S ©N)Úmathr   )rˆ   s    rD   Úmath_sin_scalarrü     s   € ÝŒ8�A‰;Œ;ÐrF   c                 ó¼   — t          j        | t           j        ¬¦  «        }t          | ¦  «        D ]+}t	          j        t          j        |¦  «        ¦  «        ||<   Œ,|S )N©rt   )ÚnpÚemptyré   rd   rû   r   )rî   r‰   rˆ   s      rD   Úmath_sin_loopr    sO   € Ý
Œ(�1�BœJÐ
'Ñ
'Ô
'€CÝ�1‰XŒXð )ð )ˆÝ”�"œ* Q™-œ-Ñ(Ô(ˆˆA‰ˆØ€JrF   c                   óV   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zˆ xZS )ÚTestSVMLz  Tests SVML behaves as expected Fc                 óú   •— t          ¦   «         | _        d| j        _        t          ¦   «         | _        d| j        _        t	          j        d¦  «        | j        _         t          t          | ¦  «        j	        |Ž  d S )NT)
r
   rÁ   ÚnrtÚ	fastflagsr   ÚFastMathOptionsrw   Úsuperr  Ú__init__)rÖ   rr   Ú	__class__s     €rD   r	  zTestSVML.__init__"  sc   ø€ Ý‘W”WˆŒ
ØˆŒ
Œõ ™œˆŒØ!ˆŒÔÝ"%Ô"5°dÑ";Ô";ˆŒÔØ&��h˜ÑÔÔ&¨Ð-Ð-Ð-Ð-rF   c                 ó    — |rJ ‚t          d„ |D ¦   «         ¦  «        }t          ||| j        ¬¦  «        }t          ||| j        ¬¦  «        }||fS )Nc                 ó6   — g | ]}t          j        |¦  «        ‘ŒS rR   )rÝ   Útypeof)rA   rˆ   s     rD   rP   z$TestSVML.compile.<locals>.<listcomp>.  s    € Ð3Ð3Ð3¨•U”\ !‘_”_Ð3Ð3Ð3rF   )rÁ   )Útupler	   rÁ   r  )rÖ   rq   rr   ÚkwargsrÂ   ÚstdÚfasts          rD   rõ   zTestSVML.compile,  s`   € ØÐÐÐÝÐ3Ð3¨dÐ3Ñ3Ô3Ñ4Ô4ˆå˜t S°´
Ð;Ñ;Ô;ˆÝ  c°´Ð@Ñ@Ô@ˆà�DˆyÐrF   c                 óÔ  — |st          ¦   «         S g }|D ]Å}t          |t          j        ¦  «        r)|                     |                     d¦  «        ¦  «         ŒEt          |t          j        ¦  «        r(|                     |                     ¦   «         ¦  «         Œ‡t          |t          j        ¦  «        r|                     |¦  «         Œ·t          d¦  «        ‚t          |¦  «        S )NrB   z%Unsupported argument type encountered)
r  Ú
isinstancerÿ   ÚndarrayÚappendÚcopyÚnumberÚnumbersÚNumberÚ
ValueError)rÖ   rr   Únew_argsrˆ   s       rD   Ú	copy_argszTestSVML.copy_args5  sÔ   € Øð 	Ý‘7”7ˆNØˆØð 	Jð 	JˆAÝ˜!�RœZÑ(Ô(ð JØ—’ §¢ s¡¤Ñ,Ô,Ð,Ð,Ý˜A�rœyÑ)Ô)ð JØ—’ §¢¡¤Ñ)Ô)Ð)Ð)Ý˜A�wœ~Ñ.Ô.ð JØ—’ Ñ"Ô"Ð"Ð"å Ð!HÑIÔIÐIÝ�X‰ŒÐrF   c                 ó¾  —  | j         |g|¢R Ž \  }}|                     dd ¦  «        }|                     dd ¦  «        }|                     dd¦  «        }|                     dd¦  «        }	 | | j        |Ž Ž }
 |j         | j        |Ž Ž } |j         | j        |Ž Ž }t	          j        j        ||
fi |¤Ž t	          j        j        ||
fi |¤Ž t          d|¦  «        5  t          d|	¦  «        5   | j         |g|¢R Ž \  }}|r|                      ||¦  «         |r|                      ||¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )	NÚstd_patternÚfast_patternÚcpu_namer   Úcpu_featuresr   r«   r¬   )	rõ   Úpopr  Úentry_pointrÿ   ÚtestingÚassert_almost_equalr   Úcheck_svml_presence)rÖ   Úpyfuncrr   r  ÚjitstdÚjitfastr  r  r   r!  Úpy_expectedÚjitstd_resultÚjitfast_results                rD   ÚcheckzTestSVML.checkD  sT  € à&˜$œ, vÐ5°Ð5Ð5Ð5‰ˆ�à—j’j °Ñ5Ô5ˆØ—z’z .°$Ñ7Ô7ˆØ—:’:˜jÐ*:Ñ;Ô;ˆð —z’z .Ð2CÑDÔDˆð �f˜n˜dœn¨dÐ3Ð4ˆð +˜Ô*¨N¨D¬N¸DÐ,AÐBˆð -˜Ô,¨n¨d¬n¸dÐ.CÐDˆõ 	Œ
Ô& }°kÐLÐLÀVÐLÐLÐLÝ
Œ
Ô& ~°{ÐMÐMÀfÐMÐMÐMõ !Ð!1°8Ñ<Ô<ð 	@ð 	@Ý Ð!5°|ÑDÔDð	@ð 	@ð +˜dœl¨6Ð9°DÐ9Ð9Ð9‰OˆF�GØð >Ø×(Ò(¨°Ñ=Ô=Ð=Øð @Ø×(Ò(¨°,Ñ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	@ð 	@s7   ÃEÃ,AD:Ä.EÄ:D>	Ä>EÅD>	ÅEÅEÅEc                 ód   — |j                              ¦   «         }|                      ||¦  «         d S rú   )ÚlibraryÚget_asm_strÚassertIn)rÖ   rq   r±   r²   s       rD   r&  zTestSVML.check_svml_presencef  s/   € ØŒl×&Ò&Ñ(Ô(ˆØ�Š�g˜sÑ#Ô#Ð#Ð#Ð#rF   c                 óš   — t           j        rdnd}|                      t          d|¬¦  «         |                      t          d|¬¦  «         d S )Nz$_sinz$sing      @)r  )r  )r   rp   r-  rü   )rÖ   Úpats     rD   Útest_scalar_contextzTestSVML.test_scalar_contextj  sH   € åœÐ2ˆgˆg¨FˆØ�
Š
•? B°Cˆ
Ñ8Ô8Ð8Ø�
Š
•? B°Sˆ
Ñ9Ô9Ð9Ð9Ð9rF   c                 óJ   — d}d}|                       t          d||¬¦  «         d S )Nz__svml_sin8_ha,z__svml_sin8,é
   )r  r  )r-  r  )rÖ   r  r  s      rD   Ú	test_svmlzTestSVML.test_svmlp  s.   € ð  ˆØˆØ�
Š
•= "°#ÀDˆ
ÑIÔIÐIÐIÐIrF   c                 ó  — d}t          j        t          j        d|gt           j        t           j        ¬¦  «        }|                     ¦   «         \  }}|j        dk    r-t          d|j        ›d|                     ¦   «         ›d�¦  «        ‚d S )NaÈ  if 1:
            import os
            import numpy as np
            import math

            def math_sin_loop(n):
                ret = np.empty(n, dtype=np.float64)
                for x in range(n):
                    ret[x] = math.sin(np.float64(x))
                return ret

            def check_no_svml():
                try:
                    # ban the use of SVML
                    os.environ['NUMBA_DISABLE_INTEL_SVML'] = '1'

                    # delay numba imports to account for env change as
                    # numba.__init__ picks up SVML and it is too late by
                    # then to override using `numba.config`
                    import numba
                    from numba import config
                    from numba.core import cpu
                    from numba.tests.support import override_env_config
                    from numba.core.compiler import compile_isolated, Flags

                    # compile for overridden CPU, with and without fastmath
                    with override_env_config('NUMBA_CPU_NAME', 'skylake-avx512'),                          override_env_config('NUMBA_CPU_FEATURES', ''):
                        sig = (numba.int32,)
                        f = Flags()
                        f.nrt = True
                        std = compile_isolated(math_sin_loop, sig, flags=f)
                        f.fastmath = cpu.FastMathOptions(True)
                        fast = compile_isolated(math_sin_loop, sig, flags=f)
                        fns = std, fast

                        # assert no SVML call is present in the asm
                        for fn in fns:
                            asm = fn.library.get_asm_str()
                            assert '__svml_sin' not in asm
                finally:
                    # not really needed as process is separate
                    os.environ['NUMBA_DISABLE_INTEL_SVML'] = '0'
                    config.reload_config()
            check_no_svml()
            z-c)ÚstdoutÚstderrr   zprocess failed with code z: stderr follows
rc   )	Ú
subprocessÚPopenÚsysÚ
executableÚPIPEÚcommunicateÚ
returncodeÚAssertionErrorÚdecode)rÖ   ÚcodeÚpopenrÚ   Úerrs        rD   Útest_svml_disabledzTestSVML.test_svml_disabledw  s˜   € ð-ˆõ\ Ô ÝŒ^˜T 4Ð(Ý”?­:¬?ð<ñ <ô <ˆð ×$Ò$Ñ&Ô&‰ˆˆSØÔ˜qÒ Ð Ý �.àÔ!Ð!Ð! 3§:¢:¡<¤< < <ð1ñ2ô 2ð 2ð !Ð rF   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_likerd   Úsizerû   r'   )rî   rˆ   r‰   Úis       rD   Úimplz@TestSVML.test_svml_working_in_non_isolated_context.<locals>.impl°  sk   € å”(˜1˜q™5­¬
Ð3Ñ3Ô3ˆAÝ”- Ñ"Ô"ˆCÝ˜3œ8‘_”_ð .ð .�Ø˜�F�F”F�dœi¨¨!¬™oœoÑ-�F�F‘F�FØˆJrF   é   Úintel_svmlccr   )r   rÕ   Úinspect_llvmÚ
signatures)rÖ   rM  s     rD   Ú)test_svml_working_in_non_isolated_contextz2TestSVML.test_svml_working_in_non_isolated_context¯  sl   € Ý	˜�x¨WÐ	5Ñ	5Ô	5ð	ð 	ñ 
6Ô	5ð	ð 	ˆˆQ‰ŒˆØ�Š˜¨$×*;Ò*;¸D¼OÈAÔ<NÑ*OÔ*OÐOÑPÔPÐPÐPÐPrF   )rð   rñ   rò   r’   ró   r	  rõ   r  r-  r&  r4  r7  rG  rR  Ú__classcell__)r
  s   @rD   r  r    sÍ   ø€ € € € € à*Ð*ð "Ðð.ð .ð .ð .ð .ðð ð ðð ð ð @ð  @ð  @ðD$ð $ð $ð:ð :ð :ðJð Jð Jð62ð 62ð 62ðp	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	QrF   r  Ú__main__)rW   )Crû   r`   rÿ   r;  r  Ú	importlibr=  rô   r    ÚmultiprocessingrË   Ú	itertoolsr   r   rÝ   Ú
numba.corer   r   r   r   Únumba.core.compilerr	   r
   Únumba.tests.supportr   r   r   rá   râ   Ú
USING_SVMLÚ
needs_svmlr¹   rº   r   r   r   r   r   r   r   r   r    r!   r'   r(   r)   r.   r3   r4   r;   r<   r=   r÷   rŽ   Úitemsr‹   rŒ   r�   r…   r—   r™   rï   rü   r  r  rð   ÚmainrR   rF   rD   ú<module>r_     s#  ðØ €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )à €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ €€€à ˆXÔ  Ô!2Ø!EñGô G€
ð ˜YÐ+;Ð<Ð<€ð ˜rÐ&7Ð8Ð8Ð ð*Ø	�”˜œÐ!ð*à	�”˜œÐ!ð*ð 
�"ð*ð 
�”˜œÐ!ð	*ð
 
�”˜œÐ!ð*ð �”	ˆ{ð*ð �”
ˆ|ð*ð �”	ˆ{ð*ð �”
ˆ|ð*ð �"ð*ð �”	ˆ{ð*ð �”
ˆ|ð*ð �"ð*ð �"ð*ð �"ð*ð  �"ð!*ð" �"ð#*ð *ð$ �”˜œÐ#ð%*ð& 
�”ˆ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ð 5˜Z×-Ò-Ñ/Ô/ð 5ñ 5ô 5€ð5ð 5˜Z×-Ò-Ñ/Ô/ð 5ñ 5ô 5€ð("ð ("ð ("ð ("ðV*ð *ð *ð)ð )ð )ð4 ðb?ð b?ð b?ð b?ð b?˜ñ b?ô b?ñ „ðb?ðJ × Ò Ñ !Ô !Ð !ðð ð ðð ð ð ð\Qð \Qð \Qð \Qð \Qˆxñ \Qô \Qñ „ð\Qð~ ˆzÒÐØ€H„M�O„O€O€O€Oð ÐrF   