U
    ,dKN                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZzd dlZdZW n ek
rX   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dd ZG dd deZe Zdd ZdS )    NTF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+)zdCompute capability must be specified as a string of "major.minor" where major and minor are decimalsr      )rematch
ValueErrorgroupsint)textmgrp r   5/tmp/pip-unpacked-wheel-eu7e0c37/numba/core/config.py	_parse_cc   s    r   c               	   C   s   t jdrt dkrdS ztdd} W n tk
r@   Y dS X | R | D ]<}|d\}}}| dkrLd| krL W 5 Q R  dS qLW 5 Q R  d	S 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.
    linux)i386Zi586i686x86_64Tz/proc/cpuinfor:flagsZavxFN)	sysplatform
startswithmachineopenOSError	partitionstripsplit)flinehead_bodyr   r   r   _os_supports_avx.   s    
r(   c                 C   s,   t | }|dkr$d| }t|n|S d S )N)Z	new_style	old_stylez(Invalid style in NUMBA_CAPTURED_ERRORS: )strr
   )Z	style_strZrendered_stylemsgr   r   r   _validate_captured_errors_styleI   s
    

r,   c                   @   s6   e Zd Zdd Zdd ZdddZdd	 Zd
d ZdS )_EnvReloaderc                 C   s   |    d S N)resetselfr   r   r   __init__U   s    z_EnvReloader.__init__c                 C   s   i | _ | jdd d S )NT)force)old_environupdater0   r   r   r   r/   X   s    z_EnvReloader.resetFc           
   	   C   s   i }t jtrzt jtrzts0d}t| nJttd}t	
|}W 5 Q R X |d k	rz| D ]\}}||d|  < q`t j D ]\}}	|dr|	||< q|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`.rtZNUMBA_)ospathexists_config_fnameisfile
_HAVE_YAMLwarningswarnr   yamlZ	safe_loaditemsupperenvironr   r4   process_environdictvalidate)
r1   r3   Znew_environr+   r#   Zy_confkvnamevaluer   r   r   r5   \   s"    



z_EnvReloader.updatec              
   C   sb   t r^zdd l}W n> tk
rN } z d|j d}t| da W 5 d }~X Y nX tr^td d S )Nr   z}CUDA Python bindings requested (the environment variable NUMBA_CUDA_USE_NVIDIA_BINDING is set), but they are not importable: .FzPTDS support is handled by CUDA Python when using the NVIDIA binding. Please set the environment variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM to 1 instead.)CUDA_USE_NVIDIA_BINDINGcudaImportErrorr+   r=   r>   CUDA_PER_THREAD_DEFAULT_STREAM)r1   rL   Zier+   r   r   r   rE   }   s    
z_EnvReloader.validatec           \         s   fdd}dd }|dt d}|dt d}|dt |}|d	t d}|d
td}|dt d }	|dt d}
|dt d}|dt d}|dt d}|dtd}|dtd}|dtd}|dt d}|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#t d}|d$|d }|d%|t| d&kr\d nd }|d't d(}|d)t |}|d*t |} |d+t |}!|d,t |p|}"|d-t d}#|d.t d}$|d/t d}%|d0t d}&|d1t d}'|d2t |}(|d3t |})|d4t |}*|d5t tot }+|d6t d},|d7t |}-|d8t d}.|d9t d}/d:d; }0|d<|0d }1d=d> }2|d?t |2}3|d@t t}4|dAt d}5|dBdCdD dEdFdGg}6|dHtdI}7|dJtdK}8|dLt d}9|dMtd }:|dNtdO};|dPt t tdQk}<|dRt d}=|dStd }>|dTt d}?|dUt dV}@|dWtdX}A|dYt d}B|dZtd }C|d[t d\}D|d]t d}E|d^t d}Ftrt	j
d_}G|Grt	j|Gd`}Hnda}Hnt	jt	jdbdcddd`}H|det|H}Idfdg }J|J }K|dht |K}Ldht krt dh |Lkrddilm}M |Mjrtdj|Lt dh f |L}N~Ldkt	j
k}O|dlt t |O}P|dmt |P}Q|dnt d}R|dot d}Sdpdq }T|dr|Tds}U|dttdI}V|dut d}W|dvt|Wrdwnd }X|dxt d}Yt   D ]\}Z}[|Z r|[t |Z< qd S )yNc                    s`     | }|d kr$t|r | S |S z
||W S  tk
rZ   td| |f t | Y S X d S )Nz+environ %s defined but failed to parse '%s')getcallable	Exceptionr=   r>   RuntimeWarning)rH   ZctordefaultrI   rB   r   r   _readenv   s    

z._EnvReloader.process_environ.<locals>._readenvc                 S   s   | d k	rt | S d S r.   )r*   )xr   r   r   optional_str   s    z2_EnvReloader.process_environ.<locals>.optional_strZNUMBA_DEVELOPER_MODEr   Z"NUMBA_DISABLE_PERFORMANCE_WARNINGSZNUMBA_FULL_TRACEBACKSZNUMBA_SHOW_HELPZNUMBA_COLOR_SCHEMEno_colorZNUMBA_BOUNDSCHECKZNUMBA_ALWAYS_WARN_UNINIT_VARZ!NUMBA_CUDA_LOW_OCCUPANCY_WARNINGSr   ZNUMBA_CUDA_USE_NVIDIA_BINDINGZNUMBA_DEBUGZNUMBA_DEBUG_PRINT_AFTERnoneZNUMBA_DEBUG_PRINT_BEFOREZNUMBA_DEBUG_PRINT_WRAPZNUMBA_HIGHLIGHT_DUMPSZNUMBA_DEBUG_JITZNUMBA_DEBUG_FRONTENDZNUMBA_DEBUG_NRTZNUMBA_FUNCTION_CACHE_SIZE   ZNUMBA_PARFOR_MAX_TUPLE_SIZEd   ZNUMBA_DEBUG_CACHEZNUMBA_CACHE_DIR ZNUMBA_TRACEZNUMBA_CHROME_TRACEZNUMBA_DEBUG_TYPEINFERZNUMBA_CPU_NAMEZNUMBA_CPU_FEATURESZgenericZ	NUMBA_OPT   ZNUMBA_DUMP_BYTECODEZNUMBA_DUMP_CFGZNUMBA_DUMP_IRZNUMBA_DUMP_SSAZ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_SLP_VECTORIZEZNUMBA_DUMP_ASSEMBLYZNUMBA_DUMP_ANNOTATIONZNUMBA_DIFF_IRc                 S   s   | d kr| S t j| S d S r.   )r7   r8   abspath)r8   r   r   r   fmt_html_path>  s    z3_EnvReloader.process_environ.<locals>.fmt_html_pathZNUMBA_DUMP_HTMLc                  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_defaultH  s    z1_EnvReloader.process_environ.<locals>.avx_defaultZNUMBA_ENABLE_AVXZNUMBA_DISABLE_INTEL_SVMLZNUMBA_DISABLE_JITZNUMBA_THREADING_LAYER_PRIORITYc                 S   s   |   S r.   )r"   )stringr   r   r   <lambda>a      z._EnvReloader.process_environ.<locals>.<lambda>ZtbbZompZ	workqueueZNUMBA_THREADING_LAYERrS   ZNUMBA_CAPTURED_ERRORSr)   Z NUMBA_CUDA_WARN_ON_IMPLICIT_COPYZNUMBA_FORCE_CUDA_CCZNUMBA_CUDA_DEFAULT_PTX_CC)   r]   ZNUMBA_DISABLE_CUDAr   ZNUMBA_ENABLE_CUDASIMZNUMBA_CUDA_LOG_LEVELZNUMBA_CUDA_LOG_API_ARGSZ%NUMBA_CUDA_MAX_PENDING_DEALLOCS_COUNT
   Z%NUMBA_CUDA_MAX_PENDING_DEALLOCS_RATIOg?ZNUMBA_CUDA_ARRAY_INTERFACE_SYNCZNUMBA_CUDA_DRIVERZNUMBA_CUDA_LOG_SIZEi   ZNUMBA_CUDA_VERBOSE_JIT_LOGZ$NUMBA_CUDA_PER_THREAD_DEFAULT_STREAMZ	CUDA_PATHincludeZcuda_include_not_foundZusrlocalrL   ZNUMBA_CUDA_INCLUDE_PATHc                  S   sP   z
t j} W n tk
r   Y nX tdt| dS t  }|d k	rLtd|S dS )Nr   r   )r7   sched_getaffinityAttributeErrormaxlen	cpu_count)ri   rm   r   r   r   num_threads_default  s    

z9_EnvReloader.process_environ.<locals>.num_threads_defaultNUMBA_NUM_THREADS)parallelz{Cannot set NUMBA_NUM_THREADS to a different value once the threads have been launched (currently have %s, trying to set %s)ZVS_PROFILERZNUMBA_ENABLE_PROFILINGZNUMBA_DEBUGINFOZNUMBA_CUDA_DEBUGINFOZNUMBA_EXTEND_VARIABLE_LIFETIMESc                 S   s   t | }|d k	r|S | S r.   )shutilwhich)Zpath_or_bingdbr   r   r   	which_gdb  s    
z/_EnvReloader.process_environ.<locals>.which_gdbZNUMBA_GDB_BINARYrs   ZNUMBA_CUDA_MEMORY_MANAGERZNUMBA_LLVM_REFPRUNE_PASSZNUMBA_LLVM_REFPRUNE_FLAGSallZNUMBA_LLVM_PASS_TIMINGS)r   r*   lowerIS_WIN32	IS_32BITSr,   r   MACHINE_BITSfloatr7   rB   rO   r8   joinsepglobalsZnumba.np.ufuncrp   Z_is_initializedRuntimeErrorlocalscopyr@   isupper)\r1   rB   rU   rW   ZDEVELOPER_MODEZDISABLE_PERFORMANCE_WARNINGSZFULL_TRACEBACKSZ	SHOW_HELPZCOLOR_SCHEMEZBOUNDSCHECKZALWAYS_WARN_UNINIT_VARZCUDA_LOW_OCCUPANCY_WARNINGSrK   DEBUGZDEBUG_PRINT_AFTERZDEBUG_PRINT_BEFOREZDEBUG_PRINT_WRAPZHIGHLIGHT_DUMPSZ	DEBUG_JITZDEBUG_FRONTENDZ	DEBUG_NRTZFUNCTION_CACHE_SIZEZPARFOR_MAX_TUPLE_SIZEZDEBUG_CACHEZ	CACHE_DIRTRACEZCHROME_TRACEZDEBUG_TYPEINFERZCPU_NAMEZCPU_FEATURESOPTZDUMP_BYTECODEZDUMP_CFGZDUMP_IRZDUMP_SSAZ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SLP_VECTORIZEZDUMP_ASSEMBLYZANNOTATEZDIFF_IRr_   ZHTMLra   Z
ENABLE_AVXZDISABLE_INTEL_SVMLZDISABLE_JITZTHREADING_LAYER_PRIORITYZTHREADING_LAYERZCAPTURED_ERRORSZCUDA_WARN_ON_IMPLICIT_COPYZFORCE_CUDA_CCZCUDA_DEFAULT_PTX_CCZDISABLE_CUDAZENABLE_CUDASIMZCUDA_LOG_LEVELZCUDA_LOG_API_ARGSZCUDA_DEALLOCS_COUNTZCUDA_DEALLOCS_RATIOZCUDA_ARRAY_INTERFACE_SYNCZCUDA_DRIVERZCUDA_LOG_SIZEZCUDA_VERBOSE_JIT_LOGrN   Z	cuda_pathZdefault_cuda_include_pathZCUDA_INCLUDE_PATHrn   ZNUMBA_DEFAULT_NUM_THREADSZ_NUMBA_NUM_THREADSrp   ro   ZRUNNING_UNDER_PROFILERZENABLE_PROFILINGZDEBUGINFO_DEFAULTZCUDA_DEBUGINFO_DEFAULTZEXTEND_VARIABLE_LIFETIMESrt   Z
GDB_BINARYZCUDA_MEMORY_MANAGERZLLVM_REFPRUNE_PASSZLLVM_REFPRUNE_FLAGSZLLVM_PASS_TIMINGSrH   rI   r   rT   r   rC      s                
  	   
      
        
z_EnvReloader.process_environN)F)__name__
__module____qualname__r2   r/   r5   rE   rC   r   r   r   r   r-   S   s
   
!r-   c                   C   s   t   dS )zL
    Reload the configuration from environment variables, if necessary.
    N)_env_reloaderr5   r   r   r   r   reload_config  s    r   )r   r   r7   r   rq   r=   r?   r<   rM   Zllvmlite.bindingZbindingr`   r   rw   ZIS_OSXtuple__itemsize__ry   rx   version_infoZ	PYVERSIONr:   r   r(   r,   objectr-   r   r   r   r   r   r   <module>   s4   


   8