
    %ɷi	                         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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_neuron_availableis_npu_availableis_sdaa_availableis_torch_xla_availableis_xpu_availableseeddevice_specificdeterministicc                    |r| t               j                  z  } t        j                  |        t        j                  j                  |        t        j                  |        t               r!t
        j                  j                  |        n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t1        j2                  |        |rt        j4                  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   hpur   neuroncudar   xmset_rng_stateuse_deterministic_algorithms)r   r   r   s      J/var/www/html/venv/lib/python3.12/site-packages/accelerate/utils/random.pyset_seedr)   (   s)     "000
KKIINN4	d		!!$'				!!$'				!!$'		

""4(		

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

""4(
**40     rng_type	generatorc                 p   | t         j                  k(  rt        j                         }n| t         j                  k(  r t        j
                  j                         }nQ| 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                         }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        j0                  j                         }n| t         j2                  k(  r0t5               sJ d       t        j6                  j                         }no| t         j8                  k(  r0t;               sJ d       t        j<                  j                         }n,| t         j>                  k(  r|J d	       |jA                         }tC               }|jD                  tF        j                  k(  r_jI                  t        jJ                               }t        jL                  |g       t        jN                          |jQ                         }nf|jD                  tR        v s|jD                  tF        jT                  k(  s|jD                  tF        jV                  k(  s|jD                  tF        jX                  k(  st|jD                  tF        jZ                  k(  sW|jD                  tF        j\                  k(  s:|jD                  tF        j^                  k(  s|jD                  tF        j`                  k(  rLjI                  |jb                        }t        jd                  jg                  |d
       |jQ                         }n=|jD                  tF        jh                  k(  r t        jd                  jg                  d
       | t         j                  k(  rt        jj                         y | t         j                  k(  r t        j
                  jk                         y | t         j                  k(  r t        j                  jk                         y | t         j                  k(  r t        j                  jk                         y | t         j                   k(  r t        j$                  jk                         y | t         j&                  k(  r t        j*                  jk                         y | t         j,                  k(  r t        j0                  jk                         y | t         j2                  k(  r t        j6                  jk                         y | t         j8                  k(  r t        j<                  jk                         y | t         j                  k(  r$t        jj                  jm                                y | t         j>                  k(  r|jo                         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.zFCan't synchronize Neuron seeds on an environment without Neuron Cores.z)Need a generator to synchronize its seed.r   )8r
   TORCHr   get_rng_stateCUDAr$   XLAr   tensorr%   NPUr   r   MLUr   r   SDAAr   r    MUSAr   r!   XPUr   r   HPUr   r"   NEURONr   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MULTI_NEURONdevicedistributed	broadcast	MULTI_CPUr&   item	set_state)r+   r,   	rng_statestates       r(   synchronize_rng_staterQ   Q   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^^	#"$n&nn$LL..0		W&&	&$Q&QQ$'')	 E!4!44LL1	
,
MMO	"88!!_%>%>>!!_%?%??!!_%?%??!!_%>%>>!!_%>%>>!!_%>%>>!!_%A%AALL.	##Iq1MMO				?#<#<	<##Iq1 7== I&	W\\	!

  +	W[[	 			*	W[[	 			*	W\\	!

  +	W\\	!

  +	W[[	 			*	W[[	 			*	W^^	#""9-	W[[	 
)*	W&&	&I& 
'r*   	rng_typesc                 >    | D ]  }t        t        |      |        y )N)r,   )rQ   r
   )rR   r,   r+   s      r(   synchronize_rng_statesrT      s"     Fgh/9EFr*   )FF)NN)N)#r   typingr   r   numpyr   r   rP   r   	constantsr   dataclassesr	   r
   importsr   r   r   r   r   r   r   r   torch_xla.core.xla_modelcore	xla_modelr%   intboolr)   	GeneratorrQ   liststrrT    r*   r(   <module>rc      s     "   $ - 1	 	 	 ))&13 &1 &1d &1RO'HW$5 O'RWRaRaIb O'dFd5g+>&? FHUZUdUdLe Fr*   