a
    d                     @   s   d dl Z d dlmZmZmZ d dlZd dlZddlm	Z	 ddl
mZ ddlmZmZ ddlmZmZmZ ed	d
rd dlm  mZ deedddZdee eej dddZdeeeef  eej dddZdS )    N)ListOptionalUnion   )AcceleratorState   )CUDA_DISTRIBUTED_TYPES)DistributedTypeRNGType)is_npu_availableis_tpu_availableis_xpu_availableF)Zcheck_deviceseedZdevice_specificc                 C   sx   |r| t  j7 } t|  tj|  t|  t rDtj	|  n t
 rXtj	|  ntj	|  t rtt|  dS )a=  
    Helper function for reproducible behavior to set the seed in `random`, `numpy`, `torch`.

    Args:
        seed (`int`):
            The seed to set.
        device_specific (`bool`, *optional*, defaults to `False`):
            Whether to differ the seed on each device slightly with `self.process_index`.
    N)r   Zprocess_indexrandomr   nptorchZmanual_seedr   xpuZmanual_seed_allr   npucudar   xmset_rng_stater    r   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/accelerate/utils/random.pyset_seed   s    


r   )rng_type	generatorc                 C   s  | t jkrt }n| t jkr*tj }n| t jkrRt sBJ dtt	 }nj| t j
krvt sjJ dtj }nF| t jkrt sJ dtj }n"| t jkr|d usJ d| }t }|jtjkr|t	 }t	|g t	  | }nh|jtv s"|jtjks"|jtjkrF||j}tj |d | }n|jtj!krbtj |d | t jkrzt"| n| t jkrtj"| nf| t j
krtj"| nL| t jkrtj"| n2| t jkrt	"|#  n| t jkr|$| d S )Nz;Can't synchronize XLA seeds on an environment without TPUs.z;Can't synchronize NPU seeds on an environment without NPUs.z;Can't synchronize XPU seeds on an environment without XPUs.z)Need a generator to synchronize its seed.r   )%r
   ZTORCHr   Zget_rng_stateZCUDAr   ZXLAr   Ztensorr   ZNPUr   r   ZXPUr   r   	GENERATORZ	get_stater   Zdistributed_typer	   ZTPUtoZ
xla_deviceZcollective_broadcastZ	mark_stepcpur   Z	MULTI_NPUZ	MULTI_XPUZdeviceZdistributed	broadcastZ	MULTI_CPUr   itemZ	set_state)r   r   Z	rng_statestater   r   r   synchronize_rng_state9   sZ    










r#   )	rng_typesr   c                 C   s   | D ]}t t||d qd S )N)r   )r#   r
   )r$   r   r   r   r   r   synchronize_rng_statesm   s    r%   )F)NN)N)r   typingr   r   r   numpyr   r   r"   r   	constantsr   Zdataclassesr	   r
   Zimportsr   r   r   Ztorch_xla.core.xla_modelcoreZ	xla_modelr   intboolr   	Generatorr#   strr%   r   r   r   r   <module>   s   
4