B
     \3                 @   s   d dl mZmZm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
yd dlZdZW n ek
rt   dZY nX d dlmZ ejdZejdZejd ZedkZejdd	 Zd
Zdd Zdd ZG dd deZe Zdd Z dS )    )print_functiondivisionabsolute_importNTFZwin32darwin          z.numba_config.yamlc             C   sD   | sdS t d| }|s td| }t|d t|d fS dS )z7
    Parse CUDA compute capability version string.
    Nz(\d+)\.(\d+)zeNUMBA_FORCE_CUDA_CC must be specified as a string of "major.minor" where major and minor are decimalsr      )rematch
ValueErrorgroupsint)textmZgrp r   +lib/python3.7/site-packages/numba/config.py	_parse_cc   s    r   c           	   C   s   t jdrt dkrdS ytdd} W n tk
r>   dS X | D x<| D ]0}|d\}}}| dkrLd| krLdS qLW d	S W d
Q R X d
S )z
    Whether the current OS supports AVX, regardless of the CPU.

    This is necessary because the user may be running a very old Linux
    kernel (e.g. CentOS 5) on a recent CPU.
    Zlinux)Zi386Zi586Zi686Zx86_64Tz/proc/cpuinfor:flagsZavxFN)	sysplatform
startswithmachineopenOSError	partitionstripsplit)flinehead_Zbodyr   r   r   _os_supports_avx/   s    
r$   c               @   s.   e Zd Zdd Zdd ZdddZdd	 Zd
S )_EnvReloaderc             C   s   |    d S )N)reset)selfr   r   r   __init__K   s    z_EnvReloader.__init__c             C   s   i | _ | jdd d S )NT)force)old_environupdate)r'   r   r   r   r&   N   s    z_EnvReloader.resetFc       
   	   C   s   i }t jtr~t jtr~ts0d}t| nNttd}t	
|}W d Q R X |d k	r~x$| D ]\}}||d|  < qbW x(t j D ]\}}	|dr|	||< qW |s| j|kr| | t|| _d S )NzA Numba config file is found but YAML parsing capabilities appear to be missing. To use this feature please install `pyyaml`. e.g. `conda install pyyaml`.ZrtZNUMBA_)ospathexists_config_fnameisfile
_HAVE_YAMLwarningswarnr   yamlloaditemsupperenvironr   r*   process_environdict)
r'   r)   Znew_environmsgr    Zy_confkvnamevaluer   r   r   r+   R   s     

z_EnvReloader.updatec       =         s0   fdd}dd }|dt d}|dt d}|dt |}|d	t | }|d
td}|dt d}	|dt d}
|dt d}|dt d}|dt |	}|dtd}|dt d}|dt d}|d|d }|d|t| dkrdnd }|dt d}|dt |}|dt |}|dt |p|}|dt d}|dt d}|d t d}|d!t d}|d"t d}|d#t |	}|d$t |	}|d%t |	}|d&t tot }|d't |	} |d(t d}!|d)t d}"d*d+ }#|d,|#d }$|d-t d}%d.d/ }&|d0t |&}'|d1t t}(|d2t d})|d3td4}*|d5td }+|d6t t td7k},|d8t d}-|d9td}.|d:t d;}/|d<td=}0|d>t d}1td?t	
 }2|d@t |2}3dAtjk}4|dBt t |4}5|dCt |5}6|dDt d}7|dEtdF}8x0t   D ]\}9}:|9 r|:t |9< qW |dkrddGlm}; tdH|; t s,ddIlm}< tdJ|< d S )KNc                sZ     | }|d kr$t|r | S |S y||S  tk
rT   td| |f t |S X d S )Nz+environ %s defined but failed to parse '%s')getcallable	Exceptionr2   r3   RuntimeWarning)r>   Zctordefaultr?   )r8   r   r   _readenvr   s    
z._EnvReloader.process_environ.<locals>._readenvc             S   s   | d k	rt | S d S )N)str)xr   r   r   optional_str}   s    z2_EnvReloader.process_environ.<locals>.optional_strZNUMBA_WARNINGSr   ZNUMBA_DEVELOPER_MODEZNUMBA_FULL_TRACEBACKSZNUMBA_SHOW_HELPZNUMBA_COLOR_SCHEMEZno_colorZNUMBA_DEBUGZNUMBA_DEBUG_JITZNUMBA_DEBUG_FRONTENDZNUMBA_FUNCTION_CACHE_SIZE   ZNUMBA_DEBUG_CACHEZNUMBA_CACHE_DIR ZNUMBA_TRACEZNUMBA_DEBUG_TYPEINFERZNUMBA_CPU_NAMEZNUMBA_CPU_FEATURESZgenericZ	NUMBA_OPT   ZNUMBA_DUMP_BYTECODEZNUMBA_DUMP_CFGZNUMBA_DUMP_IRZNUMBA_DEBUG_ARRAY_OPTZNUMBA_DEBUG_ARRAY_OPT_RUNTIMEZNUMBA_DEBUG_ARRAY_OPT_STATSZNUMBA_PARALLEL_DIAGNOSTICSZNUMBA_DEBUG_INLINE_CLOSUREZNUMBA_DUMP_LLVMZNUMBA_DUMP_FUNC_OPTZNUMBA_DUMP_OPTIMIZEDZNUMBA_LOOP_VECTORIZEZNUMBA_DUMP_ASSEMBLYZNUMBA_DUMP_ANNOTATIONZNUMBA_DIFF_IRc             S   s   | d kr| S t j| S d S )N)r,   r-   abspath)r-   r   r   r   fmt_html_path   s    z3_EnvReloader.process_environ.<locals>.fmt_html_pathZNUMBA_DUMP_HTMLZNUMBA_COMPATIBILITY_MODEc              S   s   t  s
dS t } | dkS d S )NF)z
corei7-avxz
core-avx-iZsandybridgeZ	ivybridge)r$   llZget_host_cpu_name)Zcpu_namer   r   r   avx_default   s    z1_EnvReloader.process_environ.<locals>.avx_defaultZNUMBA_ENABLE_AVXZNUMBA_DISABLE_INTEL_SVMLZNUMBA_DISABLE_JITZNUMBA_THREADING_LAYERrD   ZNUMBA_FORCE_CUDA_CCZNUMBA_DISABLE_CUDAr   ZNUMBA_ENABLE_CUDASIMZNUMBA_CUDA_LOG_LEVELZ%NUMBA_CUDA_MAX_PENDING_DEALLOCS_COUNT
   Z%NUMBA_CUDA_MAX_PENDING_DEALLOCS_RATIOg?ZNUMBA_DISABLE_HSAr	   NUMBA_NUM_THREADSZVS_PROFILERZNUMBA_ENABLE_PROFILINGZNUMBA_DEBUGINFOZNUMBA_CUDA_DEBUGINFOZNUMBA_GDB_BINARYz/usr/bin/gdb)NumbaWarningignore)PerformanceWarningz^your operating system doesn't support AVX, this may degrade performance on some numerical code)r   rF   lowerIS_WIN32	IS_32BITSr   MACHINE_BITSfloatmaxmultiprocessing	cpu_countr,   r8   localscopyr6   isupperglobalsZnumba.errorsrR   r2   simplefilterr$   rT   r3   )=r'   r8   rE   rH   ZWARNINGSZDEVELOPER_MODEZFULL_TRACEBACKSZ	SHOW_HELPZCOLOR_SCHEMEDEBUGZ	DEBUG_JITZDEBUG_FRONTENDZFUNCTION_CACHE_SIZEZDEBUG_CACHEZ	CACHE_DIRZTRACEZDEBUG_TYPEINFERZCPU_NAMEZCPU_FEATURESZOPTZDUMP_BYTECODEZDUMP_CFGZDUMP_IRZDEBUG_ARRAY_OPTZDEBUG_ARRAY_OPT_RUNTIMEZDEBUG_ARRAY_OPT_STATSZPARALLEL_DIAGNOSTICSZDEBUG_INLINE_CLOSUREZ	DUMP_LLVMZDUMP_FUNC_OPTZDUMP_OPTIMIZEDZLOOP_VECTORIZEZDUMP_ASSEMBLYZANNOTATEZDIFF_IRrM   ZHTMLZCOMPATIBILITY_MODErO   Z
ENABLE_AVXZDISABLE_INTEL_SVMLZDISABLE_JITZTHREADING_LAYERZFORCE_CUDA_CCZDISABLE_CUDAZENABLE_CUDASIMZCUDA_LOG_LEVELZCUDA_DEALLOCS_COUNTZCUDA_DEALLOCS_RATIOZDISABLE_HSAZNUMBA_DEFAULT_NUM_THREADSrQ   ZRUNNING_UNDER_PROFILERZENABLE_PROFILINGZDEBUGINFO_DEFAULTZCUDA_DEBUGINFO_DEFAULTZ
GDB_BINARYr>   r?   rR   rT   r   )r8   r   r9   q   s    


z_EnvReloader.process_environN)F)__name__
__module____qualname__r(   r&   r+   r9   r   r   r   r   r%   I   s   
r%   c               C   s   t   dS )zL
    Reload the configuration from environment variables, if necessary.
    N)_env_reloaderr+   r   r   r   r   reload_configX  s    rg   )!Z
__future__r   r   r   r   Zstructr   r,   r
   r2   r[   r4   r1   ImportErrorZllvmlite.bindingZbindingrN   r   rV   ZIS_OSXtuple__itemsize__rX   rW   version_infoZ	PYVERSIONr/   r   r$   objectr%   rf   rg   r   r   r   r   <module>   s4   

  