U
    PhE                     @  s`   d dl mZ d dlZd dlZd dlZddgZedddddZedddddZdS )	    )annotationsNhas_ampere_or_laterdetect_default_tf32bool)returnc            	      C  s   ddl } ddlm}m} | jjr0|| jj ds4dS |d\}}|sHdS zdzJ|  t|	 D ]0}|
|}||\}}|dkr` W W "dS q`W n tk
r   Y nX W 5 |  X dS )	z5
    Check if there is any Ampere and later GPU.
    r   N)optional_importversion_geqz11.0FpynvmlT   )torchmonai.utils.moduler   r   versioncudaZnvmlShutdownnvmlInitrangeZnvmlDeviceGetCountnvmlDeviceGetHandleByIndexZ"nvmlDeviceGetCudaComputeCapabilityBaseException)	r   r   r   r	   Z
has_pynvmlihandlemajor_ r   E/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/utils/tf32.pyr      s$    


c                  C  s   d} zt  sW dS ddlm} |dddrD|dddsDtd d} d	d
i}| D ]4\}}tj||krTtd| d| d d} qT| W S  t	k
r   ddl
m} | r Y dS X dS )zo
    Detect if there is anything that may enable TF32 mode by default.
    If any, show a warning message.
    Fr   )pytorch_after         ztorch.backends.cuda.matmul.allow_tf32 = True by default.
  This value defaults to True when PyTorch version in [1.7, 1.11] and may affect precision.
  See https://docs.monai.io/en/latest/precision_accelerating.html#precision-and-acceleratingTNVIDIA_TF32_OVERRIDE1zEnvironment variable `z = z` is set.
  This environment variable may enable TF32 mode accidentally and affect precision.
  See https://docs.monai.io/en/latest/precision_accelerating.html#precision-and-accelerating)MONAIEnvVarsN)r   r   r   warningswarnitemsosenvirongetr   Zmonai.utils.miscr   debug)Zmay_enable_tf32r   Zoverride_tf32_env_varsnameZoverride_valr   r   r   r   r   4   s.    )	
__future__r   	functoolsr#   r    __all__	lru_cacher   r   r   r   r   r   <module>   s   