
    xKg$                        d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ 	 d dlZdZdZ ej"                  e e      Ze G d	 d
e             Z G d de      Zedk(  r ej,                          yy# e$ r dZY Rw xY w)    N)dedent)mock)TestCasetemp_directoryoverride_env_configrun_in_subprocess)configTFz*pyyaml needed for configuration file testsc                        e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej                  ej                   d      d        Z xZS )
TestConfigFc                 X    t        d      | _        d| _        t        t        |           y )N
config_tmpi	  )r   tmppathmaxDiffsuperr   setUp)self	__class__s    [/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_config.pyr   zTestConfig.setUp   s#    %l3j$%'    c                 B    t        j                  | j                        S )zT
        Creates a mock launch location.
        Returns the location path.
        )dir)tempfilemkdtempr   )r   s    r   mock_cfg_locationzTestConfig.mock_cfg_location    s    
 DLL11r   c                     t         j                  j                  |t        j                        }t        |d      5 }t        j                  ||d       ddd       y# 1 sw Y   yxY w)z<
        Injects a mock configuration at 'location'
        wtF)default_flow_styleN)ospathjoinr	   _config_fnameopenyamldump)r   locationcfgtmpcfgfs        r   inject_mock_cfgzTestConfig.inject_mock_cfg'   sF     h(<(<=&$1IIc17  s   AA&c                     t               }t        t              D ]&  }|j                         st	        t        |      ||<   ( |S )z8
        Gets the current numba config settings
        )dictr   r	   isuppergetattr)r   storexs      r   get_settingszTestConfig.get_settings/   s9     VAyy{"61-a  r   c                    t        j                         }| j                         }t        j                  |       t	        dd      5  | j                         }ddd       | j                  ||       	 t	        dd      5  | j                         }ddd       t        j                  |       fS # 1 sw Y   ZxY w# 1 sw Y   .xY w# t        j                  |       w xY w)z
        Returns a config "original" from a location with no config file
        and then the impact of applying the supplied cfg dictionary as
        a config file at a location in the returned "current".
        _N)r   getcwdr   chdirr   r0   r)   )r   r&   original_cwd
launch_diroriginalcurrents         r   create_config_effectzTestConfig.create_config_effect9   s     yy{ ++-
 	 !c*((*H + 	Z-	# %S#.++- / HH\"   +* /. HH\"s0   B02C >B<C 0B9<CC Cc                 x   d}t         j                  t         j                  fD ]  }| j                   ||      di      \  }}| j	                  ||k7         | j	                  ||   ||   k7         | j                  ||   d       |j                  |       |j                  |       | j                  ||        y )NCOLOR_SCHEMElight_bg)strupperlowerr9   
assertTrueassertEqualpop)r   keycaseorigcurrs        r   test_configzTestConfig.test_configZ   s     YY		*D22DIz3JKJD$OODDL)OODIc23T#Y
3HHSMHHSMT4( +r   c                 P    | j                  i       \  }}| j                  ||       y N)r9   rA   )r   rE   rF   s      r   test_empty_configzTestConfig.test_empty_configh   s&    ..r2
dt$r   c                 @   t         j                  j                         }d|d<   d}d| d}t        t	        |      |      \  }}d}|j                  d      }| j                  ||       d	}| j                  ||       | j                  ||j                  d             y )
Nnot_a_known_styleNUMBA_CAPTURED_ERRORSzthe source compiledz0from numba import njit
@njit
def foo():
	print('z')
foo()envzyEnvironment variable 'NUMBA_CAPTURED_ERRORS' is defined but its associated value 'not_a_known_style' could not be parsed.utf-8z9Invalid style in NUMBA_CAPTURED_ERRORS: not_a_known_styler   environcopyr   r   decodeassertIn)	r   new_envsource_compiledcodeouterrexpectederr_msgex_expecteds	            r   !test_illegal_error_style_handlingz,TestConfig.test_illegal_error_style_handlingm   s    **//#+>'(/)*)5$VD\w?S! **W%h(+k7+oszz'':;r   c                     t         j                  j                         }d|d<   d}t        t	        |      |      \  }}|j                  d      }|j                  d      }d}| j                  |||       y )NdefaultrM   zqfrom numba.core import config
print('---->', config.CAPTURED_ERRORS)
assert config.CAPTURED_ERRORS == 'new_style'rN   rP   z----> new_stylemsgrQ   r   rV   rX   rY   rZ   r\   out_msgr]   s           r   !test_default_error_style_handlingz,TestConfig.test_default_error_style_handling   sm    **//#+4'(? %VD\w?S**W%**W%'k78r   z#test expects NUMBA_ENABLE_AVX==Truec                    t         j                  j                         }|j                  dd        d|d<   d}t	        t        |      |      \  }}|j                  d      }|j                  d      }d}| j                  |||       d	|d<   d
}t	        t        |      |      \  }}|j                  d      }|j                  d      }d}| j                  |||       y )NNUMBA_ENABLE_AVXnoconaNUMBA_CPU_NAMEzbfrom numba.core import config
print('---->', bool(config.ENABLE_AVX))
assert not config.ENABLE_AVXrN   rP   z----> Falsera   zskylake-avx512z^from numba.core import config
print('---->', bool(config.ENABLE_AVX))
assert config.ENABLE_AVXz
----> True)r   rR   rS   rB   r   r   rT   rU   rc   s           r   test_nocona_disables_avxz#TestConfig.test_nocona_disables_avx   s     **//#&-$, !/ %VD\w?S**W%**W%#k78 %5 !+ %VD\w?S**W%**W%"k78r   )__name__
__module____qualname___numba_parallel_test_r   r   r)   r0   r9   rG   rJ   r^   re   unittest
skipUnlessr	   
ENABLE_AVXrj   __classcell__)r   s   @r   r   r      sg     "(28!B)%
<$9 X**>@9@9r   r   c                      e Zd Zd Z ej
                  ddi      d        Z ej
                  ddi      d        Z ej
                  ddi      d	        Z ej
                         d
        Z	 ej
                  ddi      d        Z
y)TestNumbaOptLevelc                    	 ddl m}m}  j                  |j                  |        j                  |j                  j
                  |       ddlm} d	 	fd}t        j                  j                  |d|      5   j                  t              5 }  |d               d d d         j                  	t        j                               d d d        y # 1 sw Y   7xY w# 1 sw Y   y xY w)	Nr   )r	   njit)
CPUCodegenzexpected side effectc                  >    j                  |       t              rI   )rA   RuntimeError)argskwargsr[   r   side_effect_messages     r   side_effectz,TestNumbaOptLevel.check.<locals>.side_effect   s    VX.233r   _module_pass_manager)r}   c                       y)N. r   r   r   <lambda>z)TestNumbaOptLevel.check.<locals>.<lambda>   s    cr   )numbar	   rv   rA   OPT
_raw_valuenumba.core.codegenrw   r   patchobjectassertRaisesry   rU   r=   	exception)
r   r[   	opt_value	raw_valuer	   rv   rw   r}   raisesr|   s
   ``       @r   checkzTestNumbaOptLevel.check   s    & 	Y/..	: 	24	4 ZZz+A+6  8""<0F"\"$ 1 MM-s63C3C/DE8 8008 8s$   ?C&C$-C&C#	C&&C/	NUMBA_OPTmax)envvarsc                 8    ddddd}| j                  |dd       y )NTF   cheaploop_vectorizeslp_vectorizeoptcostr   r   r   r[   s     r   test_opt_maxzTestNumbaOptLevel.test_opt_max   s)     '+%*#% 	

8Q&r   3c                 8    ddddd}| j                  |dd       y NFr   r   r   r   r   r   s     r   
test_opt_3zTestNumbaOptLevel.test_opt_3   )     ',%*#% 	

8Q"r   0c                 8    ddddd}| j                  |dd       y )NFr   r   r   r   r   s     r   
test_opt_0zTestNumbaOptLevel.test_opt_0   r   r   c                 8    ddddd}| j                  |dd       y r   r   r   s     r   test_opt_defaultz"TestNumbaOptLevel.test_opt_default   s)     ',%*#% 	

8Q"r   invalidc                 8    ddddd}| j                  |dd       y r   r   r   s     r   test_opt_invalidz"TestNumbaOptLevel.test_opt_invalid   r   r   N)rk   rl   rm   r   r   run_test_in_subprocessr   r   r   r   r   r   r   r   rt   rt      s    F8 %X$$k5-AB' C' %X$$k3-?@# A# %X$$k3-?@# A# %X$$&# '# %X$$k9-EF# G#r   rt   __main__)r   r   textwrapr   ro   r   numba.tests.supportr   r   r   r   
numba.corer	   r#   
_HAVE_YAMLImportError	_skip_msgskipIf
needs_yamlr   rt   rk   mainr   r   r   <module>r      s    	    4 4 J 9	X__^Y7
 Q9 Q9 Q9hL# L#^ zHMMO W  Js   A; ;BB