o
    1&io\                     @   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d dlZzd dlZdZW n e	y/   dZY nw 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dd ZG dd deZe Zdd ZdS )    NTFwin32darwin          z.numba_config.yamlc                 C   s@   | sdS t d| }|std| }t|d t|d f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   <C:\wamp64\www\opt\env\Lib\site-packages\numba/core/config.py	_parse_cc   s   r   c                  C   s   t jdrt dvrdS ztdd} W n
 ty   Y dS w | , | D ]}|d\}}}| dkrDd| v rD W d	   dS q%	 W d	   d
S 1 sQw   Y  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avxNF)	sysplatform
startswithmachineopenOSError	partitionstripsplit)flinehead_bodyr   r   r   _os_supports_avx/   s"   $r(   c                       s4   e Zd ZdZ fddZedd Zdd Z  ZS )	_OptLevela  This class holds the "optimisation level" set in `NUMBA_OPT`. As this env
    var can be an int or a string, but is almost always interpreted as an int,
    this class subclasses int so as to get the common behaviour but stores the
    actual value as a `_raw_value` member. The value "max" is a special case
    and the property `is_opt_max` can be queried to find if the optimisation
    level (supplied value at construction time) is "max".c                    s\   t |dksJ |\}|dkrdnt|}t j| |fi |}|dkr)||_|S ||_|S )Nr   max   )lenr   super__new__
_raw_value)clsargskwargsvalueZ
_int_valuenew	__class__r   r   r.   Q   s   z_OptLevel.__new__c                 C   s
   | j dkS )zLReturns True if the the optimisation level is "max" False
        otherwise.r*   )r/   selfr   r   r   
is_opt_max[   s   
z_OptLevel.is_opt_maxc                 C   s.   t | jtrd| j d}n| j}d| dS )N'z
_OptLevel())
isinstancer/   str)r8   argr   r   r   __repr__a   s   z_OptLevel.__repr__)	__name__
__module____qualname____doc__r.   propertyr9   r?   __classcell__r   r   r5   r   r)   I   s    

r)   c                 C   s$   | dvrd|  d}t |t| S )N)0123r*   zAEnvironment variable `NUMBA_OPT` is set to an unsupported value 'z-', supported values are 0, 1, 2, 3, and 'max')r
   r)   )	opt_levelmsgr   r   r   _process_opt_leveli   s   rL   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)resetr7   r   r   r   __init__v   s   z_EnvReloader.__init__c                 C   s   i | _ | jdd d S )NT)force)old_environupdater7   r   r   r   rO   y   s   z_EnvReloader.resetFc           
      C   s   i }t jtrGt jtrGtsd}t| n/ttd}t	
|}W d    n1 s-w   Y  |d urG| D ]\}}||d|  < q:t j D ]\}}	|drY|	||< qL|sa| j|krk| | 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   rR   process_environdictvalidate)
r8   rQ   Znew_environrK   r#   Zy_confkvnamer3   r   r   r   rS   }   s&   


z_EnvReloader.updatec              
   C   sl   t r2zdd l}W n  ty( } zd|j d}t| da W Y d }~nd }~ww tr4td d S d S 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ImportErrorrK   r[   r\   CUDA_PER_THREAD_DEFAULT_STREAM)r8   ri   ierK   r   r   r   rc      s   
z_EnvReloader.validatec           b         s(  fdd}d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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&t d}|d't d}|d(|d  |d)|t  d*krd"nd } |d+ttd,}!|d-t |}"|d.t |}#|d/t |}$|d0t |p|}%|d1t d}&|d2t d}'|d3t d}(|d4t d})|d5t d}*|d6t |}+|d7t |},|d8t |}-|d9t d}.|d:t d}/|d;t |}0|d<t d}1|d=t d}2d>d? }3|d@|3d }4 fdAdB}5|dCt |5}6|dDt t}7|dEt d}8|dFdGdH g dI}9|dJtdK}:|dLt d};|dMtd }<|dNtdO}=|dPt t tdQk}>|dRt d}?|dStd"}@|dTt d}A|dUt dV}B|dWtdX}C|dYt d}D|dZtd"}E|d[t d\}F|d]t d}G|d^t d}H|d_t d}It	rt
jd`}J|Jrt
j|Jda}Kndb}Knt
jt
jdcdddeda}K|dft|K}Ldgdh }M|M }N|dit |N}Odit v r t di |Okr ddjlm}P |Pjr tdk|Ot di f |O}Q~O|dlt d}Rdmt
jv }S|dnt t |S}T|dot |T}U|dpt d}V|dqt d}Wdrds }X|dt|Xdu}Y|dvtdK}Z|dwt d}[|dxt|[rfdynd"}\|dzt d }]|d{t d}^|d|t d}_t   D ]\}`}a|` r|at |`< qd S )}Nc                    sh     | }|d u rt|r| S |S z||W S  ty3   td|  d| dt  t | Y S w )NzEnvironment variable 'z'' is defined but its associated value 'z8' could not be parsed.
The parse failed with exception:
)getcallable	Exceptionr[   r\   	traceback
format_excRuntimeWarning)rf   Zctordefaultr3   )r`   r   r   _readenv   s   

z._EnvReloader.process_environ.<locals>._readenvc                 S   s   | d urt | S d S rN   )r=   )xr   r   r   optional_str   s   z2_EnvReloader.process_environ.<locals>.optional_strZNUMBA_USE_LEGACY_TYPE_SYSTEMr   Z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_WARNINGSZ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_NRT_STATSZNUMBA_FUNCTION_CACHE_SIZE   ZNUMBA_PARFOR_MAX_TUPLE_SIZEd   ZNUMBA_DEBUG_CACHEZNUMBA_CACHE_DIR ZNUMBA_CACHE_LOCATOR_CLASSESZNUMBA_TRACEZNUMBA_CHROME_TRACEZNUMBA_DEBUG_TYPEINFERZ"NUMBA_DISABLE_TYPEINFER_FAIL_CACHEZNUMBA_CPU_NAMEZNUMBA_CPU_FEATURESZgenericZ	NUMBA_OPTr+   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 u r| S t j| S rN   )rU   rV   abspath)rV   r   r   r   fmt_html_paths  s   z3_EnvReloader.process_environ.<locals>.fmt_html_pathZNUMBA_DUMP_HTMLc                     s0   t  sdS  p
t } h d}|dhO }| |vS )NF>   Zsandybridgez
corei7-avxZ	ivybridgez
core-avx-iZnocona)r(   llZget_host_cpu_name)Zcpu_nameZdisabled_cpus)CPU_NAMEr   r   avx_default}  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 rN   )r"   )stringr   r   r   <lambda>  s    z._EnvReloader.process_environ.<locals>.<lambda>)ZtbbZompZ	workqueueZNUMBA_THREADING_LAYERrs   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-NUMBA_CUDA_ENABLE_MINOR_VERSION_COMPATIBILITYZ	CUDA_PATHincludeZcuda_include_not_foundusrlocalri   ZNUMBA_CUDA_INCLUDE_PATHc                  S   sN   zt j} W n	 ty   Y n
w tdt| dS t  }|d ur%td|S dS )Nr   r   )rU   sched_getaffinityAttributeErrorr*   r,   	cpu_count)r   r   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NUMBA_ENABLE_SYS_MONITORINGZVS_PROFILERZNUMBA_ENABLE_PROFILINGZNUMBA_DEBUGINFOZNUMBA_CUDA_DEBUGINFOZNUMBA_EXTEND_VARIABLE_LIFETIMESc                 S   s   t | }|d ur|S | S rN   )shutilwhich)Zpath_or_bingdbr   r   r   	which_gdb&  s   
z/_EnvReloader.process_environ.<locals>.which_gdbZNUMBA_GDB_BINARYr   ZNUMBA_CUDA_MEMORY_MANAGERZNUMBA_LLVM_REFPRUNE_PASSZNUMBA_LLVM_REFPRUNE_FLAGSallZ!NUMBA_USE_LLVMLITE_MEMORY_MANAGERZNUMBA_LLVM_PASS_TIMINGSZNUMBA_JIT_COVERAGE)r   r=   lowerrL   r)   	IS_32BITSr   MACHINE_BITSfloatIS_WIN32rU   r`   rm   rV   joinsepglobalsZnumba.np.ufuncr   Z_is_initializedRuntimeErrorlocalscopyr^   isupper)br8   r`   rt   rv   ZUSE_LEGACY_TYPE_SYSTEMZDEVELOPER_MODEZDISABLE_PERFORMANCE_WARNINGSZFULL_TRACEBACKSZ	SHOW_HELPZCOLOR_SCHEMEZBOUNDSCHECKZALWAYS_WARN_UNINIT_VARZCUDA_LOW_OCCUPANCY_WARNINGSrh   DEBUGZDEBUG_PRINT_AFTERZDEBUG_PRINT_BEFOREZDEBUG_PRINT_WRAPZHIGHLIGHT_DUMPSZ	DEBUG_JITZDEBUG_FRONTENDZ	DEBUG_NRTZ	NRT_STATSZFUNCTION_CACHE_SIZEZPARFOR_MAX_TUPLE_SIZEZDEBUG_CACHEZ	CACHE_DIRZCACHE_LOCATOR_CLASSESTRACEZCHROME_TRACEZDEBUG_TYPEINFERZDISABLE_TYPEINFER_FAIL_CACHEZCPU_FEATURESZ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}   HTMLr   Z
ENABLE_AVXZDISABLE_INTEL_SVMLZDISABLE_JITZTHREADING_LAYER_PRIORITYZTHREADING_LAYERZ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_LOGrk   Z'CUDA_ENABLE_MINOR_VERSION_COMPATIBILITYZ	cuda_pathZdefault_cuda_include_pathZCUDA_INCLUDE_PATHr   ZNUMBA_DEFAULT_NUM_THREADSZ_NUMBA_NUM_THREADSr   r   ZENABLE_SYS_MONITORINGZRUNNING_UNDER_PROFILERZENABLE_PROFILINGZDEBUGINFO_DEFAULTZCUDA_DEBUGINFO_DEFAULTZEXTEND_VARIABLE_LIFETIMESr   Z
GDB_BINARYZCUDA_MEMORY_MANAGERZLLVM_REFPRUNE_PASSZLLVM_REFPRUNE_FLAGSZUSE_LLVMLITE_MEMORY_MANAGERZLLVM_PASS_TIMINGSZJIT_COVERAGErf   r3   r   )r   r`   r   ra      sr  



z_EnvReloader.process_environN)F)r@   rA   rB   rP   rO   rS   rc   ra   r   r   r   r   rM   t   s    
!rM   c                   C   s   t   dS )zL
    Reload the configuration from environment variables, if necessary.
    N)_env_reloaderrS   r   r   r   r   reload_configV  s   r   ) r   r   rU   r   r   r[   rp   r]   rZ   rj   Zllvmlite.bindingZbindingr~   r   r   ZIS_OSXtuple__itemsize__r   r   version_infoZ	PYVERSIONrX   r   r(   r   r)   rL   objectrM   r   r   r   r   r   r   <module>   s<    
    b