o
    8ήcKN                     @   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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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   8/tmp/pip-target-vg8gfxp4/lib/python/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)i386i586i686x86_64Tz/proc/cpuinfor:flagsavxNF)	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vrd| }t||S )N)	new_style	old_stylez(Invalid style in NUMBA_CAPTURED_ERRORS: )strr
   )	style_strrendered_stylemsgr   r   r   _validate_captured_errors_styleI   s   r1   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updater5   r   r   r   r4   X   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`.rtNUMBA_)ospathexists_config_fnameisfile
_HAVE_YAMLwarningswarnr    yaml	safe_loaditemsupperenvironr   r9   process_environdictvalidate)
r6   r8   new_environr0   r%   y_confkvnamevaluer   r   r   r:   \   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ImportErrorr0   rC   rD   CUDA_PER_THREAD_DEFAULT_STREAM)r6   rU   ier0   r   r   r   rL   }   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rd 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 g dE}6|dFtdG}7|dHtdI}8|dJt d}9|dKtd }:|dLtdM};|dNt t tdOk}<|dPt d}=|dQtd }>|dRt d}?|dSt dT}@|dUtdV}A|dWt d}B|dXtd }C|dYt dZ}D|d[t d}E|d\t d}Ftrt	j
d]}G|Grt	j|Gd^}Hnd_}Hnt	jt	jd`dadbd^}H|dct|H}Iddde }J|J }K|dft |K}Ldft v rt df |Lkrddglm}M |Mjrtdh|Lt df f |L}N~Ldit	j
v }O|djt t |O}P|dkt |P}Q|dlt d}R|dmt d}Sdndo }T|dp|Tdq}U|drtdG}V|dst d}W|dtt|WrHdund }X|dvt d}Yt   D ]\}Z}[|Z rf|[t |Z< qXd S )wNc                    sZ     | }|d u rt|r| S |S z||W S  ty,   td| |f t | Y S w )Nz+environ %s defined but failed to parse '%s')getcallable	ExceptionrC   rD   RuntimeWarning)rQ   ctordefaultrR   rI   r   r   _readenv   s   

z._EnvReloader.process_environ.<locals>._readenvc                 S   s   | d urt | S d S r3   )r-   )xr   r   r   optional_str   s   z2_EnvReloader.process_environ.<locals>.optional_strNUMBA_DEVELOPER_MODEr   "NUMBA_DISABLE_PERFORMANCE_WARNINGSNUMBA_FULL_TRACEBACKSNUMBA_SHOW_HELPNUMBA_COLOR_SCHEMEno_colorNUMBA_BOUNDSCHECKNUMBA_ALWAYS_WARN_UNINIT_VAR!NUMBA_CUDA_LOW_OCCUPANCY_WARNINGSr   NUMBA_CUDA_USE_NVIDIA_BINDINGNUMBA_DEBUGNUMBA_DEBUG_PRINT_AFTERnoneNUMBA_DEBUG_PRINT_BEFORENUMBA_DEBUG_PRINT_WRAPNUMBA_HIGHLIGHT_DUMPSNUMBA_DEBUG_JITNUMBA_DEBUG_FRONTENDNUMBA_DEBUG_NRTNUMBA_FUNCTION_CACHE_SIZE   NUMBA_PARFOR_MAX_TUPLE_SIZEd   NUMBA_DEBUG_CACHENUMBA_CACHE_DIR NUMBA_TRACENUMBA_CHROME_TRACENUMBA_DEBUG_TYPEINFERNUMBA_CPU_NAMENUMBA_CPU_FEATURESgeneric	NUMBA_OPT   NUMBA_DUMP_BYTECODENUMBA_DUMP_CFGNUMBA_DUMP_IRNUMBA_DUMP_SSANUMBA_DEBUG_ARRAY_OPTNUMBA_DEBUG_ARRAY_OPT_RUNTIMENUMBA_DEBUG_ARRAY_OPT_STATSNUMBA_PARALLEL_DIAGNOSTICSNUMBA_DEBUG_INLINE_CLOSURENUMBA_DUMP_LLVMNUMBA_DUMP_FUNC_OPTNUMBA_DUMP_OPTIMIZEDNUMBA_LOOP_VECTORIZENUMBA_SLP_VECTORIZENUMBA_DUMP_ASSEMBLYNUMBA_DUMP_ANNOTATIONNUMBA_DIFF_IRc                 S   s   | d u r| S t j| S r3   )r=   r>   abspath)r>   r   r   r   fmt_html_path>  s   z3_EnvReloader.process_environ.<locals>.fmt_html_pathNUMBA_DUMP_HTMLc                  S   s   t  sdS t } | dvS )NF)z
corei7-avxz
core-avx-isandybridge	ivybridge)r*   llget_host_cpu_name)cpu_namer   r   r   avx_defaultH  s   z1_EnvReloader.process_environ.<locals>.avx_defaultNUMBA_ENABLE_AVXNUMBA_DISABLE_INTEL_SVMLNUMBA_DISABLE_JITNUMBA_THREADING_LAYER_PRIORITYc                 S   s   |   S r3   )r$   )stringr   r   r   <lambda>a  s    z._EnvReloader.process_environ.<locals>.<lambda>)tbbomp	workqueueNUMBA_THREADING_LAYERr^   NUMBA_CAPTURED_ERRORSr,    NUMBA_CUDA_WARN_ON_IMPLICIT_COPYNUMBA_FORCE_CUDA_CCNUMBA_CUDA_DEFAULT_PTX_CC)   r   NUMBA_DISABLE_CUDAr   NUMBA_ENABLE_CUDASIMNUMBA_CUDA_LOG_LEVELNUMBA_CUDA_LOG_API_ARGS%NUMBA_CUDA_MAX_PENDING_DEALLOCS_COUNT
   %NUMBA_CUDA_MAX_PENDING_DEALLOCS_RATIOg?NUMBA_CUDA_ARRAY_INTERFACE_SYNCNUMBA_CUDA_DRIVERNUMBA_CUDA_LOG_SIZEi   NUMBA_CUDA_VERBOSE_JIT_LOG$NUMBA_CUDA_PER_THREAD_DEFAULT_STREAM	CUDA_PATHincludecuda_include_not_foundusrlocalrU   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   )r=   sched_getaffinityAttributeErrormaxlen	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)VS_PROFILERNUMBA_ENABLE_PROFILINGNUMBA_DEBUGINFONUMBA_CUDA_DEBUGINFONUMBA_EXTEND_VARIABLE_LIFETIMESc                 S   s   t | }|d ur|S | S r3   )shutilwhich)path_or_bingdbr   r   r   	which_gdb  s   
z/_EnvReloader.process_environ.<locals>.which_gdbNUMBA_GDB_BINARYr   NUMBA_CUDA_MEMORY_MANAGERNUMBA_LLVM_REFPRUNE_PASSNUMBA_LLVM_REFPRUNE_FLAGSallNUMBA_LLVM_PASS_TIMINGS)r   r-   lowerIS_WIN32	IS_32BITSr1   r   MACHINE_BITSfloatr=   rI   rY   r>   joinsepglobalsnumba.np.ufuncr   _is_initializedRuntimeErrorlocalscopyrG   isupper)\r6   rI   r`   rb   DEVELOPER_MODEDISABLE_PERFORMANCE_WARNINGSFULL_TRACEBACKS	SHOW_HELPCOLOR_SCHEMEBOUNDSCHECKALWAYS_WARN_UNINIT_VARCUDA_LOW_OCCUPANCY_WARNINGSrT   DEBUGDEBUG_PRINT_AFTERDEBUG_PRINT_BEFOREDEBUG_PRINT_WRAPHIGHLIGHT_DUMPS	DEBUG_JITDEBUG_FRONTEND	DEBUG_NRTFUNCTION_CACHE_SIZEPARFOR_MAX_TUPLE_SIZEDEBUG_CACHE	CACHE_DIRTRACECHROME_TRACEDEBUG_TYPEINFERCPU_NAMECPU_FEATURESOPTDUMP_BYTECODEDUMP_CFGDUMP_IRDUMP_SSADEBUG_ARRAY_OPTDEBUG_ARRAY_OPT_RUNTIMEDEBUG_ARRAY_OPT_STATSPARALLEL_DIAGNOSTICSDEBUG_INLINE_CLOSURE	DUMP_LLVMDUMP_FUNC_OPTDUMP_OPTIMIZEDLOOP_VECTORIZESLP_VECTORIZEDUMP_ASSEMBLYANNOTATEDIFF_IRr   HTMLr   
ENABLE_AVXDISABLE_INTEL_SVMLDISABLE_JITTHREADING_LAYER_PRIORITYTHREADING_LAYERCAPTURED_ERRORSCUDA_WARN_ON_IMPLICIT_COPYFORCE_CUDA_CCCUDA_DEFAULT_PTX_CCDISABLE_CUDAENABLE_CUDASIMCUDA_LOG_LEVELCUDA_LOG_API_ARGSCUDA_DEALLOCS_COUNTCUDA_DEALLOCS_RATIOCUDA_ARRAY_INTERFACE_SYNCCUDA_DRIVERCUDA_LOG_SIZECUDA_VERBOSE_JIT_LOGrW   	cuda_pathdefault_cuda_include_pathCUDA_INCLUDE_PATHr   NUMBA_DEFAULT_NUM_THREADS_NUMBA_NUM_THREADSr   r   RUNNING_UNDER_PROFILERENABLE_PROFILINGDEBUGINFO_DEFAULTCUDA_DEBUGINFO_DEFAULTEXTEND_VARIABLE_LIFETIMESr   
GDB_BINARYCUDA_MEMORY_MANAGERLLVM_REFPRUNE_PASSLLVM_REFPRUNE_FLAGSLLVM_PASS_TIMINGSrQ   rR   r   r_   r   rJ      sX  
	



z_EnvReloader.process_environN)F)__name__
__module____qualname__r7   r4   r:   rL   rJ   r   r   r   r   r2   S   s    
!r2   c                   C   s   t   dS )zL
    Reload the configuration from environment variables, if necessary.
    N)_env_reloaderr:   r   r   r   r   reload_config  s   r8  )r   r   r=   r   r   rC   rE   rB   rV   llvmlite.bindingbindingr   r   r   IS_OSXtuple__itemsize__r   r   version_info	PYVERSIONr@   r   r*   r1   objectr2   r7  r8  r   r   r   r   <module>   s8    

   8