U
    0-e                     @   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   X/var/www/html/Darija-Ai-Train/env/lib/python3.8/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 sBtdt	t
 }nj| t jkrvt sjtdtj }nF| t jkrt stdtj }n"| t jkr|d k	std| }t }|jtjkr|t
 }t
|g t
  | }nh|jtk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_stateCUDAr   ZXLAr   AssertionErrorZ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device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   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