
    g                     *   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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dS )    N)ListOptionalUnion   )AcceleratorState   )CUDA_DISTRIBUTED_TYPES)DistributedTypeRNGType)is_mlu_availableis_musa_availableis_npu_availableis_torch_xla_availableis_xpu_availableFseeddevice_specificdeterministicc                    |r| t                      j        z  } t          j        |            t          j                            |            t          j        |            t                      r t
          j        	                    |            nt                      r t
          j        	                    |            n{t                      r t
          j        	                    |            nMt                      r t
          j        	                    |            nt
          j        	                    |            t#                      rt%          j        |            |rt          j        d           dS 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`.
        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   musacudar   xmset_rng_stateuse_deterministic_algorithms)r   r   r   s      S/var/www/html/ai-engine/env/lib/python3.11/site-packages/accelerate/utils/random.pyset_seedr$      sO     1 ""00
KINN4	d 	)	!!$''''			 )	!!$''''			 )	!!$''''			 )
""4((((
""4((( 
 1*4000001 1    rng_type	generatorc                 	   | t           j        k    rt          j                    }n| t           j        k    r t          j                                        }n| t           j        k    r?t                      s
J d            t          j        t          j                              }nM| t           j
        k    r8t                      s
J d            t          j                                        }n| t           j        k    r7t                      s
J d            t          j                                        }n| t           j        k    r7t#                      s
J d            t          j                                        }nw| t           j        k    r7t)                      s
J d            t          j                                        }n0| t           j        k    r |
J d            |                                }t1                      }|j        t4          j        k    rc|                    t          j                              }t          j        |g           t          j                     |                                }n|j        t@          v sT|j        t4          j!        k    s?|j        t4          j"        k    s*|j        t4          j#        k    s|j        t4          j$        k    rO|                    |j%                  }t          j&        '                    |d           |                                }n5|j        t4          j(        k    r t          j&        '                    |d           | t           j        k    rt          j)        |           d S | t           j        k    r!t          j        )                    |           d S | t           j
        k    r!t          j        )                    |           d S | t           j        k    r!t          j        )                    |           d S | t           j        k    r!t          j        )                    |           d S | t           j        k    r!t          j        )                    |           d S | t           j        k    r(t          j)        |*                                           d S | t           j        k    r|+                    |           d S d S )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 MUSA seeds on an environment without MUSAs.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   MLUr   r   MUSAr   r   XPUr   r   	GENERATOR	get_stater   distributed_typer
   to
xla_devicecollective_broadcast	mark_stepcpur	   	MULTI_MLU
MULTI_MUSA	MULTI_NPU	MULTI_XPUdevicedistributed	broadcast	MULTI_CPUr!   item	set_state)r&   r'   	rng_statestates       r#   synchronize_rng_staterF   B   s   7=  '))			W\	!	!J,,..			W[	 	 %''cc)ccccL!1!3!344			W[	 	 !!``#````I++--			W[	 	 !!``#````I++--			W\	!	! ""cc$ccccJ,,..			W[	 	 !!``#````I++--			W&	&	&$$&Q$$$''))	 E!444LL11	
,,,
MMOO		"888!_%>>>!_%???!_%>>>!_%>>>LL..	##Iq111MMOO				?#<	<	<##Iq111 7=  I&&&&&	W\	!	!
  +++++	W[	 	 		*****	W[	 	 		*****	W\	!	!
  +++++	W[	 	 		*****	W[	 	 
))*****	W&	&	&I&&&&& 
'	&r%   	rng_typesc                 L    | D ] }t          t          |          |           !d S )N)r'   )rF   r   )rG   r'   r&   s      r#   synchronize_rng_statesrI      s=     F Fgh//9EEEEEF Fr%   )FF)NN)N) r   typingr   r   r   numpyr   r   rE   r   	constantsr	   dataclassesr
   r   importsr   r   r   r   r   torch_xla.core.xla_modelcore	xla_modelr    intboolr$   	GeneratorrF   strrI    r%   r#   <module>rW      s    ( ( ( ( ( ( ( ( ( (      $ $ $ $ $ $ - - - - - - 1 1 1 1 1 1 1 1 t t t t t t t t t t t t t t  *))))))))) 1  13  1  1d  1  1  1  1F=' ='HW$5 ='RWRaIb =' =' =' ='@F Fd5g+>&? FHUZUdLe F F F F F Fr%   