o
    ۾i                     @   s   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 zd dlZdZW n ey=   dZY nw dZee eZeG d	d
 d
eZG dd deZedkrce  dS dS )    N)dedent)mock)TestCasetemp_directoryoverride_env_configrun_in_subprocess)configTFz*pyyaml needed for configuration file testsc                       sf   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
eejddd Z  ZS )
TestConfigFc                    s"   t d| _d| _tt|   d S )N
config_tmpi	  )r   tmppathmaxDiffsuperr	   setUpself	__class__ K/home/ubuntu/.local/lib/python3.10/site-packages/numba/tests/test_config.pyr      s   
zTestConfig.setUpc                 C   s   t j| jdS )zT
        Creates a mock launch location.
        Returns the location path.
        )dir)tempfilemkdtempr   r   r   r   r   mock_cfg_location    s   zTestConfig.mock_cfg_locationc                 C   sP   t j|tj}t|d}tj||dd W d   dS 1 s!w   Y  dS )z<
        Injects a mock configuration at 'location'
        wtF)default_flow_styleN)ospathjoinr   _config_fnameopenyamldump)r   locationcfgtmpcfgfr   r   r   inject_mock_cfg'   s   "zTestConfig.inject_mock_cfgc                 C   s.   t  }ttD ]}| rtt|||< q|S )z8
        Gets the current numba config settings
        )dictr   r   isuppergetattr)r   storexr   r   r   get_settings/   s   zTestConfig.get_settingsc              	   C   s   t  }|  }t | tdd |  }W d   n1 s!w   Y  | || z-tdd |  }W d   n1 sAw   Y  W t | ||fS W t | ||fS t | 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   r,   r&   )r   r#   original_cwd
launch_diroriginalcurrentr   r   r   create_config_effect9   s"   




zTestConfig.create_config_effectc                 C   s   d}t jt jfD ]7}| ||di\}}| ||k | || || k | || d || || | || qd S )NCOLOR_SCHEMElight_bg)strupperlowerr4   
assertTrueassertEqualpop)r   keycaseorigcurrr   r   r   test_configZ   s   

zTestConfig.test_configc                 C   s   |  i \}}| || d S N)r4   r;   )r   r?   r@   r   r   r   test_empty_configh   s   zTestConfig.test_empty_configz#test expects NUMBA_ENABLE_AVX==Truec                 C   s   t j }|dd  d|d< d}tt||d\}}|d}|d}d}| j|||d d	|d< d
}tt||d\}}|d}|d}d}| j|||d d S )NNUMBA_ENABLE_AVXnoconaNUMBA_CPU_NAMEzbfrom numba.core import config
print('---->', bool(config.ENABLE_AVX))
assert not config.ENABLE_AVX)envzutf-8z----> False)msgzskylake-avx512z^from numba.core import config
print('---->', bool(config.ENABLE_AVX))
assert config.ENABLE_AVXz
----> True)r   environcopyr<   r   r   decodeassertIn)r   new_envcodeouterrerr_msgout_msgex_expectedr   r   r   test_nocona_disables_avxm   s    




z#TestConfig.test_nocona_disables_avx)__name__
__module____qualname___numba_parallel_test_r   r   r&   r,   r4   rA   rC   unittest
skipUnlessr   
ENABLE_AVXrT   __classcell__r   r   r   r   r	      s    
!r	   c                   @   s   e Zd Zdd Zejddiddd Zejddidd	d
 Zejddiddd Ze dd Z	ejddiddd Z
dS )TestNumbaOptLevelc           	   	      s   ddl m}m} |j| |jj| ddlm} d fdd}tj	j
|d|d. t}|d	d
   W d    n1 sHw   Y  t|j W d    d S 1 saw   Y  d S )Nr   )r   njit)
CPUCodegenzexpected side effectc                     s    |  trB   )r;   RuntimeError)argskwargsexpectedr   side_effect_messager   r   side_effect   s   z,TestNumbaOptLevel.check.<locals>.side_effect_module_pass_manager)rf   c                   S   s   dS )N.r   r   r   r   r   <lambda>   s    z)TestNumbaOptLevel.check.<locals>.<lambda>)numbar   r^   r;   OPT
_raw_valuenumba.core.codegenr_   r   patchobjectassertRaisesr`   rL   r7   	exception)	r   rd   	opt_value	raw_valuer   r^   r_   rf   raisesr   rc   r   check   s   
"zTestNumbaOptLevel.check	NUMBA_OPTmax)envvarsc                 C   s    ddddd}|  |dd d S )NTF   cheaploop_vectorizeslp_vectorizeoptcostrv   rt   r   rd   r   r   r   test_opt_max      zTestNumbaOptLevel.test_opt_max3c                 C       ddddd}|  |dd d S NFr   ry   rz   rx   r   r   r   r   r   
test_opt_3   r   zTestNumbaOptLevel.test_opt_30c                 C   s    ddddd}|  |dd d S )NFr   ry   rz   r   r   r   r   r   
test_opt_0   r   zTestNumbaOptLevel.test_opt_0c                 C   r   r   r   r   r   r   r   test_opt_default   s   z"TestNumbaOptLevel.test_opt_defaultinvalidc                 C   r   r   r   r   r   r   r   test_opt_invalid   r   z"TestNumbaOptLevel.test_opt_invalidN)rU   rV   rW   rt   r   run_test_in_subprocessr   r   r   r   r   r   r   r   r   r]      s    



	r]   __main__)r   r   textwrapr   rY   r   numba.tests.supportr   r   r   r   
numba.corer   r    
_HAVE_YAMLImportError	_skip_msgskipIf
needs_yamlr	   r]   rU   mainr   r   r   r   <module>   s*    uO