a
    d                      @   s  d dl Z d dlZ d dlZd dlZd dlmZ d dlmZ d dlZd dl	m
Z
 d dlmZ ddlmZ ddlmZmZ zd dlm  mZ d	ZW n ey   d
ZY n0 ej Zdd ZedddZdd Zdd Zdd Z edDddZ!dd Z"dEddZ#dd Z$dd Z%d d! Z&d"d# Z'd$d% Z(d&d' Z)d(d) Z*d*d+ Z+d,d- Z,d.d/ Z-d0d1 Z.d2d3 Z/d4d5 Z0d6d7 Z1d8d9 Z2d:d; Z3d<d= Z4d>d? Z5edFd@dAZ6edGdBdCZ7dS )H    N)	strtobool)	lru_cache)version)parse   )parse_flag_from_env)compare_versionsis_torch_versionTFc                 C   sD   t j| d u}|r@zt j| }W dS  t jjy>   Y dS 0 d S )NTF)	importlibutil	find_specmetadataPackageNotFoundError)pkg_namepackage_exists_ r   a/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/accelerate/utils/imports.py_is_package_available*   s    r   )returnc                   C   s   t S )N)_torch_distributed_availabler   r   r   r   is_torch_distributed_available5   s    r   c                   C   s@   zW n t y   td Y n0 tjdd up>tjdd uS )NzIntel(R) oneCCL Bindings for PyTorch* is required to run DDP on Intel(R) GPUs, but it is not detected. If you see "ValueError: Invalid backend: 'ccl'" error, please install Intel(R) oneCCL Bindings for PyTorch*.Z	torch_cclZoneccl_bindings_for_pytorch)ImportErrorprintr
   r   r   r   r   r   r   is_ccl_available9   s    
r   c                   C   s   t jdS )NZoneccl_bind_pt)r
   r   r   r   r   r   r   get_ccl_versionH   s    r   c                   C   s   t dS )NZtransformer_enginer   r   r   r   r   is_fp8_availableL   s    r   c                 C   s>   t j rdS tr:| r:zt }W dS  ty8   Y dS 0 tS )zQChecks if `torch_xla` is installed and potentially if a TPU is in the environmentFT)torchcudais_available_tpu_availablexmZ
xla_deviceRuntimeError)check_devicer   r   r   r   is_tpu_availableP   s    
r%   c                   C   s   t dS )NZ	deepspeedr   r   r   r   r   is_deepspeed_available`   s    r&   c                 C   s.   t  r|  S tj r tj S t r*dS dS )z8Checks if bf16 is supported, optionally ignoring the TPUFT)r%   r   r   r    Zis_bf16_supportedis_npu_available)Z
ignore_tpur   r   r   is_bf16_availabled   s    

r(   c                  C   s.   t d} | r*ttjd}t|ddS dS )Nbitsandbytes>=z0.39.0Fr   r   r   r
   r   r   r   Zbnb_versionr   r   r   is_4bit_bnb_availableo   s
    r-   c                  C   s.   t d} | r*ttjd}t|ddS dS )Nr)   r*   z0.37.2Fr+   r,   r   r   r   is_8bit_bnb_availablew   s
    r.   c                   C   s   t dS )Nr)   r   r   r   r   r   is_bnb_available   s    r/   c               
   C   s   t tjdddkrtjdd u} | rzttj	d}t
|ddW S  ty~ } ztd|  W Y d }~d	S d }~0 0 d S )
NZACCELERATE_USE_MEGATRON_LMFalser   Zmegatronzmegatron-lmr*   z2.2.0z)Parse Megatron version failed. Exception:F)r   osenvirongetr
   r   r   r   r   r   r   	Exceptionwarningswarn)r   Zmegatron_versioner   r   r   is_megatron_lm_available   s    r8   c                   C   s   t dS )NZsafetensorsr   r   r   r   r   is_safetensors_available   s    r9   c                   C   s   t dS )NZtransformersr   r   r   r   r   is_transformers_available   s    r:   c                   C   s   t dS )NZdatasetsr   r   r   r   r   is_datasets_available   s    r;   c                   C   s   t dS )NZaimr   r   r   r   r   is_aim_available   s    r<   c                   C   s   t dpt dS )NZtensorboardZtensorboardXr   r   r   r   r   is_tensorboard_available   s    r=   c                   C   s   t dS )NZwandbr   r   r   r   r   is_wandb_available   s    r>   c                   C   s   t dS )NZcomet_mlr   r   r   r   r   is_comet_ml_available   s    r?   c                   C   s   t dS )NZboto3r   r   r   r   r   is_boto3_available   s    r@   c                   C   s6   t dr2dtjv r(td tdd S tddS dS )NZrichZACCELERATE_DISABLE_RICHz`ACCELERATE_DISABLE_RICH` is deprecated and will be removed in v0.22.0 and deactivated by default. Please use `ACCELERATE_ENABLE_RICH` if you wish to use `rich`.FZACCELERATE_ENABLE_RICH)r   r1   r2   r5   r6   r   r   r   r   r   is_rich_available   s    

rA   c                   C   s   t dS )NZ	sagemakerr   r   r   r   r   is_sagemaker_available   s    rB   c                   C   s   t dS )NZtqdmr   r   r   r   r   is_tqdm_available   s    rC   c                   C   s   t dS )NZmlflowr   r   r   r   r   is_mlflow_available   s    rD   c                   C   s"   t ddo tjj o tjj S )Nr*   1.12)r	   r   backendsZmpsr    Zis_builtr   r   r   r   is_mps_available   s    rG   c               	   C   s   dd } t jd}t jdd u r(dS d}zt jd}W n t jjyT   Y dS 0 | |}| |}||krtd| d| d	| d
 dS dS )Nc                 S   s$   t t| jd t t| j S )N.)strr   r   majorminor)Zfull_versionr   r   r    get_major_and_minor_from_version   s    z;is_ipex_available.<locals>.get_major_and_minor_from_versionr   intel_extension_for_pytorchFzN/AzIntel Extension for PyTorch z needs to work with PyTorch z.*, but PyTorch z? is found. Please switch to the matching version and run again.T)r
   r   r   r   r   r   r5   r6   )rL   Z_torch_versionZ_ipex_versionZtorch_major_and_minorZipex_major_and_minorr   r   r   is_ipex_available   s&    rN   c                 C   sx   t jddu s t jddu r$dS ddl}ddl}| rdz|j }|j W S  tyb   Y dS 0 t	|dov|j S )zQChecks if `torch_npu` is installed and potentially if a NPU is in the environmentr   N	torch_npuFr   npu)
r
   r   r   r   rO   rP   device_countr    r#   hasattr)r$   r   rO   r   r   r   r   r'      s     
r'   c                 C   s~   t dddsdS t r.ddl}tddr2dS ndS ddl}| rjz|j }|j W S  tyh   Y dS 0 t	|d	o||j S )
z$check if user disables it explicitlyZACCELERATE_USE_XPUT)defaultFr   Nz<=rE   xpu)
r   rN   r   r	   rM   rT   rQ   r    r#   rR   )r$   r   rM   r   r   r   r   is_xpu_available   s    

rU   )T)F)F)F)8r
   importlib.metadatar1   r5   distutils.utilr   	functoolsr   r   	packagingr   Zpackaging.versionr   environmentr   versionsr   r	   Ztorch_xla.core.xla_modelcoreZ	xla_modelr"   r!   r   Zdistributedr    r   r   boolr   r   r   r   r%   r&   r(   r-   r.   r/   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rG   rN   r'   rU   r   r   r   r   <module>   s^   


