
    biL                        d dl Z d dl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mZmZmZmZ  e       r	d dlmc mZ dd	ed
edefdZddee   deej:                     fdZddeee ef      deej:                     fdZ!y)    N)OptionalUnion   )AcceleratorState   )CUDA_DISTRIBUTED_TYPES)DistributedTypeRNGType)is_hpu_availableis_mlu_availableis_musa_availableis_npu_availableis_sdaa_availableis_torch_xla_availableis_xpu_availableseeddevice_specificdeterministicc                 l   |r| t               j                  z  } t        j                  |        t        j                  j                  |        t        j                  |        t               r t
        j                  j                  |        nt               r t
        j                  j                  |        nt               r t
        j                  j                  |        nt               r t
        j                  j                  |        nst!               r t
        j"                  j                  |        nIt%               r t
        j&                  j                  |        nt
        j(                  j                  |        t+               rt-        j.                  |        |rt        j0                  d       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`.
        deterministic (`bool`, *optional*, defaults to `False`):
            Whether to use deterministic algorithms where available. Can slow down training.
    TN)r   process_indexrandomr   nptorchmanual_seedr   xpumanual_seed_allr   npur   mlur   sdaar   musar   hpucudar   xmset_rng_stateuse_deterministic_algorithms)r   r   r   s      R/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/accelerate/utils/random.pyset_seedr'   '   s     "000
KKIINN4	d		!!$'				!!$'				!!$'		

""4(		

""4(				!!$'

""4(
**40     rng_type	generatorc                 H   | t         j                  k(  rt        j                         }n@| t         j                  k(  r t        j
                  j                         }n| t         j                  k(  r:t               sJ d       t        j                  t        j                               }n| t         j                  k(  r1t               sJ d       t        j                  j                         }n|| t         j                  k(  r1t               sJ d       t        j                  j                         }n8| t         j                   k(  r0t#               sJ d       t        j$                  j                         }n| t         j&                  k(  r0t)               sJ d       t        j*                  j                         }n| t         j,                  k(  r0t/               sJ d       t        j0                  j                         }no| t         j2                  k(  r0t5               sJ d       t        j6                  j                         }n,| t         j8                  k(  r|J d       |j;                         }t=               }|j>                  t@        j                  k(  r_jC                  t        jD                               }t        jF                  |g       t        jH                          |jK                         }nI|j>                  tL        v s|j>                  t@        jN                  k(  s|j>                  t@        jP                  k(  st|j>                  t@        jR                  k(  sW|j>                  t@        jT                  k(  s:|j>                  t@        jV                  k(  s|j>                  t@        jX                  k(  rLjC                  |jZ                        }t        j\                  j_                  |d	       |jK                         }n=|j>                  t@        j`                  k(  r t        j\                  j_                  d	       | t         j                  k(  rt        jb                         y | t         j                  k(  r t        j
                  jc                         y | t         j                  k(  r t        j                  jc                         y | t         j                  k(  r t        j                  jc                         y | t         j                   k(  r t        j$                  jc                         y | t         j&                  k(  r t        j*                  jc                         y | t         j,                  k(  r t        j0                  jc                         y t         j2                  k(  r t        j6                  jc                  |       y | t         j                  k(  r$t        jb                  |je                                y | t         j8                  k(  r|jg                  |       y y )
Nz8Can't synchronize XLA seeds as torch_xla is unavailable.z;Can't synchronize NPU seeds on an environment without NPUs.z;Can't synchronize MLU seeds on an environment without MLUs.z=Can't synchronize SDAA seeds on an environment without SDAAs.z=Can't synchronize MUSA seeds on an environment without MUSAs.z;Can't synchronize XPU seeds on an environment without XPUs.z;Can't synchronize HPU seeds on an environment without HPUs.z)Need a generator to synchronize its seed.r   )4r
   TORCHr   get_rng_stateCUDAr"   XLAr   tensorr#   NPUr   r   MLUr   r   SDAAr   r   MUSAr   r    XPUr   r   HPUr   r!   	GENERATOR	get_stater   distributed_typer	   to
xla_devicecollective_broadcast	mark_stepcpur   	MULTI_MLU
MULTI_SDAA
MULTI_MUSA	MULTI_NPU	MULTI_XPU	MULTI_HPUdevicedistributed	broadcast	MULTI_CPUr$   item	set_state)r)   r*   	rng_statestates       r&   synchronize_rng_staterM   N   s'   7== '')		W\\	!JJ,,.		W[[	 %'c)cc'LL!1!1!34		W[[	 !`#``!II++-		W[[	 !`#``!II++-		W\\	! "c$cc"JJ,,.		W\\	! "c$cc"JJ,,.		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\\	!

  +	W[[	 			*	gkk	!			*	W[[	 
)*	W&&	&I& 
'r(   	rng_typesc                 >    | D ]  }t        t        |      |        y )N)r*   )rM   r
   )rN   r*   r)   s      r&   synchronize_rng_statesrP      s"     Fgh/9EFr(   )FF)NN)N)"r   typingr   r   numpyr   r   rL   r   	constantsr   dataclassesr	   r
   importsr   r   r   r   r   r   r   torch_xla.core.xla_modelcore	xla_modelr#   intboolr'   	GeneratorrM   liststrrP    r(   r&   <module>r_      s     "   $ - 1   ))$13 $1 $1d $1NI'HW$5 I'RWRaRaIb I'XFd5g+>&? FHUZUdUdLe Fr(   