
    ;iL                     2   S SK r S SKJrJr  S SKrS SKrSSKJr  SSK	J
r
  SSKJrJr  SSKJrJrJrJrJrJrJr  \" 5       (       a	  S SKJs  Jr  SS	\S
\S\4S jjrSS\\   S\\R:                     4S jjrSS\\\ \4      S\\R:                     4S jjr!g)    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                    U(       a  U [        5       R                  -  n [        R                  " U 5        [        R                  R                  U 5        [
        R                  " U 5        [        5       (       a!  [
        R                  R                  U 5        GO
[        5       (       a   [
        R                  R                  U 5        O[        5       (       a   [
        R                  R                  U 5        O[        5       (       a   [
        R                  R                  U 5        O}[!        5       (       a   [
        R"                  R                  U 5        ON[%        5       (       a   [
        R&                  R                  U 5        O[
        R(                  R                  U 5        [+        5       (       a  [,        R.                  " U 5        U(       a  [
        R0                  " S5        gg)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      g/home/dmtnaga/Documents/work/airagagent/rag_env/lib/python3.13/site-packages/accelerate/utils/random.pyset_seedr'   '   s&     "000
KKIINN4	d		!!$'					!!$'					!!$'			

""4(			

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

""4(
**40     rng_type	generatorc                    U [         R                  :X  a  [        R                  " 5       nGOpU [         R                  :X  a   [        R
                  R                  5       nGO<U [         R                  :X  aA  [        5       (       d   S5       e[        R                  " [        R                  " 5       5      nGOU [         R                  :X  a6  [        5       (       d   S5       e[        R                  R                  5       nGOU [         R                  :X  a6  [        5       (       d   S5       e[        R                  R                  5       nGOSU [         R                   :X  a6  [#        5       (       d   S5       e[        R$                  R                  5       nGO	U [         R&                  :X  a5  [)        5       (       d   S5       e[        R*                  R                  5       nOU [         R,                  :X  a5  [/        5       (       d   S5       e[        R0                  R                  5       nOwU [         R2                  :X  a5  [5        5       (       d   S5       e[        R6                  R                  5       nO.U [         R8                  :X  a  Uc   S5       eUR;                  5       n[=        5       nUR>                  [@        R                  :X  ab  WRC                  [        RD                  " 5       5      n[        RF                  " U/5        [        RH                  " 5         URK                  5       nGORUR>                  [L        ;   d  UR>                  [@        RN                  :X  d  UR>                  [@        RP                  :X  dx  UR>                  [@        RR                  :X  dZ  UR>                  [@        RT                  :X  d<  UR>                  [@        RV                  :X  d  UR>                  [@        RX                  :X  aL  WRC                  URZ                  5      n[        R\                  R_                  US	5        URK                  5       nO>UR>                  [@        R`                  :X  a   [        R\                  R_                  WS	5        U [         R                  :X  a  [        Rb                  " W5        g U [         R                  :X  a   [        R
                  Rc                  W5        g U [         R                  :X  a   [        R                  Rc                  W5        g U [         R                  :X  a   [        R                  Rc                  W5        g U [         R                   :X  a   [        R$                  Rc                  W5        g U [         R&                  :X  a   [        R*                  Rc                  W5        g U [         R,                  :X  a   [        R0                  Rc                  W5        g W[         R2                  :X  a   [        R6                  Rc                  U5        g U [         R                  :X  a%  [        Rb                  " URe                  5       5        g U [         R8                  :X  a  URg                  U5        g g )
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                 <    U  H  n[        [        U5      US9  M     g )N)r*   )rM   r
   )rN   r*   r)   s      r&   synchronize_rng_statesrP      s    gh/9E 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(   