
    9i                        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	
      r	d dlmc mZ ddedefdZddee   deej4                     fdZddeeeef      deej4                     fdZy)    N)ListOptionalUnion   )AcceleratorState   )CUDA_DISTRIBUTED_TYPES)DistributedTypeRNGType)is_npu_availableis_tpu_availableis_xpu_availableF)check_deviceseeddevice_specificc                    |r| t               j                  z  } t        j                  |        t        j                  j                  |        t        j                  |        t               r t
        j                  j                  |        nIt               r t
        j                  j                  |        nt
        j                  j                  |        t               rt        j                  |        yy)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   process_indexrandomr   nptorchmanual_seedr   xpumanual_seed_allr   npucudar   xmset_rng_state)r   r   s     a/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/accelerate/utils/random.pyset_seedr      s      "000
KKIINN4	d		!!$'				!!$'

""4(
     rng_type	generatorc                    | t         j                  k(  rt        j                         }n0| t         j                  k(  rt        j
                  j                         }n| t         j                  k(  r9t               sJ d       t        j                  t        j                               }n| t         j                  k(  r0t               sJ d       t        j                  j                         }no| t         j                  k(  r0t               sJ d       t        j                  j                         }n,| t         j                   k(  r|J d       |j#                         }t%               }|j&                  t(        j*                  k(  r^j-                  t        j.                               }t        j0                  |g       t        j2                          |j5                         }n|j&                  t6        v s:|j&                  t(        j8                  k(  s|j&                  t(        j:                  k(  rLj-                  |j<                        }t        j>                  jA                  |d       |j5                         }n=|j&                  t(        jB                  k(  r t        j>                  jA                  d       | t         j                  k(  rt        jD                         y | t         j                  k(  r t        j
                  jE                         y | t         j                  k(  r t        j                  jE                         y | t         j                  k(  r t        j                  jE                         y | t         j                  k(  r$t        jD                  jG                                y | t         j                   k(  r|jI                         y y )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   TORCHr   get_rng_stateCUDAr   XLAr   tensorr   NPUr   r   XPUr   r   	GENERATOR	get_stater   distributed_typer
   TPUto
xla_devicecollective_broadcast	mark_stepcpur	   	MULTI_NPU	MULTI_XPUdevicedistributed	broadcast	MULTI_CPUr   item	set_state)r!   r"   	rng_statestates       r   synchronize_rng_stater>   9   s   7== '')		W\\	!JJ,,.		W[[	 !`#``!LL!1!1!34		W[[	 !`#``!II++-		W[[	 !`#``!II++-		W&&	&$Q&QQ$'')	 E!4!44LL1	
,
MMO	"88!!_%>%>>!!_%>%>>LL.	##Iq1MMO				?#<#<	<##Iq1 7== I&	W\\	!

  +	W[[	 			*	W[[	 			*	W[[	 
)*	W&&	&I& 
'r    	rng_typesc                 >    | D ]  }t        t        |      |        y )N)r"   )r>   r   )r?   r"   r!   s      r   synchronize_rng_statesrA   m   s"     Fgh/9EFr    )F)NN)N)r   typingr   r   r   numpyr   r   r=   r   	constantsr	   dataclassesr
   r   importsr   r   r   torch_xla.core.xla_modelcore	xla_modelr   intboolr   	Generatorr>   strrA    r    r   <module>rO      s     ( (   $ - 1 I I '))3  41'HW$5 1'RWRaRaIb 1'hFd5g+>&? FHUZUdUdLe Fr    