U
    iâËd“  ã                   @   s¬   d dl Z d dlZd dlmZ d dl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k
rp   dZY nX dZe e e¡ZeG dd	„ d	eƒƒZed
kr¨e ¡  dS )é    N)Údedent)ÚTestCaseÚtemp_directoryÚoverride_env_configÚrun_in_subprocess)ÚconfigTFz*pyyaml needed for configuration file testsc                       sX   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
dd„ Z‡  ZS )Ú
TestConfigFc                    s"   t dƒ| _d| _tt| ƒ ¡  d S )NZ
config_tmpiÄ	  )r   ÚtmppathZmaxDiffÚsuperr   ÚsetUp©Úself©Ú	__class__© úP/home/sam/Atlas/atlas_env/lib/python3.8/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   s:   t j |tj¡}t|dƒ�}tj||dd� W 5 Q R X dS )z<
        Injects a mock configuration at 'location'
        ÚwtF)Zdefault_flow_styleN)ÚosÚpathÚjoinr   Z_config_fnameÚopenÚyamlÚdump)r   ÚlocationÚcfgZ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 5 Q R X |  ||¡ z"tddƒ� |  ¡ }W 5 Q R X W 5 t  |¡ X ||fS )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".
        Ú_)r   Úgetcwdr   Úchdirr   r&   r    )r   r   Zoriginal_cwdZ
launch_dirÚoriginalÚcurrentr   r   r   Úcreate_config_effect8   s    
zTestConfig.create_config_effectc                 C   s„   d}t jt jfD ]n}|  ||ƒdi¡\}}|  ||k¡ |  || || k¡ |  || d¡ | |¡ | |¡ |  ||¡ qd S )NZCOLOR_SCHEMEZlight_bg)ÚstrÚupperÚlowerr,   Ú
assertTrueÚassertEqualÚpop)r   ÚkeyÚcaseÚorigÚcurrr   r   r   Útest_configY   s    

zTestConfig.test_configc                 C   s   |   i ¡\}}|  ||¡ d S )N)r,   r1   )r   r5   r6   r   r   r   Útest_empty_configg   s    zTestConfig.test_empty_configc                 C   sb   t j ¡ }d|d< d}d|› d�}tt|ƒ|d�\}}d}|  || d¡¡ |  || d¡¡ d S )	NZnot_a_known_styleZNUMBA_CAPTURED_ERRORSzthe source compiledz0from numba import njit
@njit
def foo():
	print('z')
foo())ÚenvzMenviron NUMBA_CAPTURED_ERRORS defined but failed to parse 'not_a_known_style'zutf-8)r   ÚenvironÚcopyr   r   ZassertInÚdecode)r   Znew_envZsource_compiledÚcodeÚoutÚerrÚexpectedr   r   r   Ú!test_illegal_error_style_handlingl   s    
z,TestConfig.test_illegal_error_style_handling)Ú__name__Ú
__module__Ú__qualname__Z_numba_parallel_test_r   r   r    r&   r,   r7   r8   rA   Ú__classcell__r   r   r   r   r      s   
!r   Ú__main__)r   r   Útextwrapr   ZunittestZnumba.tests.supportr   r   r   r   Z
numba.corer   r   Z
_HAVE_YAMLÚImportErrorZ	_skip_msgZskipIfZ
needs_yamlr   rB   Úmainr   r   r   r   Ú<module>   s    
f