§
    ž²Åjî  ã                   óÜ   — d dl Z d dlZd dlmZ d dlZd dlmZ dej        ddfd„Zdej        fd„Z	dej
        j        fd„Zdefd	„Zdd
„Zdefd„Zdae j        	 	 	 	 	 ddefd„¦   «         ZdS )é    N)Ú	Generator)Údefault_generatorÚ	new_stateÚreturnc                 ó.   — t          j        | ¦  «         dS )zûSets the random number generator state.

    .. note:: This function only works for CPU. For CUDA, please use
        :func:`torch.manual_seed`, which works for both CPU and CUDA.

    Args:
        new_state (torch.ByteTensor): The desired state
    N)r   Ú	set_state)r   s    ú=C:\Projects\Historical\venv\Lib\site-packages\torch/random.pyÚset_rng_stater
   
   s   € õ Ô 	Ñ*Ô*Ð*Ð*Ð*ó    c                  ó(   — t          j        ¦   «         S )zÁReturns the random number generator state as a `torch.ByteTensor`.

    .. note:: The returned state is for the default generator on CPU only.

    See also: :func:`torch.random.fork_rng`.
    )r   Ú	get_state© r   r	   Úget_rng_stater      s   € õ Ô&Ñ(Ô(Ð(r   c                 ó°  — t          | ¦  «        } ddl}|j                             ¦   «         s|j                             | ¦  «         ddl}|j                             ¦   «         s|j                             | ¦  «         ddl}|j	                             ¦   «         s|j	                             | ¦  «         t          | ¦  «         t          j        | ¦  «        S )aŸ  Sets the seed for generating random numbers on all devices. Returns a
    `torch.Generator` object.

    Args:
        seed (int): The desired seed. Value must be within the inclusive range
            `[-0x8000_0000_0000_0000, 0xffff_ffff_ffff_ffff]`. Otherwise, a RuntimeError
            is raised. Negative inputs are remapped to positive values with the formula
            `0xffff_ffff_ffff_ffff + seed`.
    r   N)ÚintÚ
torch.cudaÚcudaÚ_is_in_bad_forkÚmanual_seed_allÚ	torch.mpsÚmpsÚmanual_seedÚ	torch.xpuÚxpuÚ_seed_custom_devicer   ©ÚseedÚtorchs     r	   r   r       sÖ   € õ ˆt‰9Œ9€DØÐÐÐàŒ:×%Ò%Ñ'Ô'ð )ØŒ
×"Ò" 4Ñ(Ô(Ð(àÐÐÐàŒ9×$Ò$Ñ&Ô&ð $ØŒ	×Ò˜dÑ#Ô#Ð#àÐÐÐàŒ9×$Ò$Ñ&Ô&ð (ØŒ	×!Ò! $Ñ'Ô'Ð'å˜ÑÔÐåÔ(¨Ñ.Ô.Ð.r   c                  ó”  — t          j        ¦   «         } ddl}|j                             ¦   «         s|j                             | ¦  «         ddl}|j                             ¦   «         s|j                             | ¦  «         ddl	}|j
                             ¦   «         s|j
                             | ¦  «         t          | ¦  «         | S )z—Sets the seed for generating random numbers to a non-deterministic
    random number on all devices. Returns a 64 bit number used to seed the RNG.
    r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   s     r	   r   r   ?   sÍ   € õ Ô!Ñ#Ô#€DØÐÐÐàŒ:×%Ò%Ñ'Ô'ð )ØŒ
×"Ò" 4Ñ(Ô(Ð(àÐÐÐàŒ9×$Ò$Ñ&Ô&ð $ØŒ	×Ò˜dÑ#Ô#Ð#àÐÐÐàŒ9×$Ò$Ñ&Ô&ð (ØŒ	×!Ò! $Ñ'Ô'Ð'å˜ÑÔÐà€Kr   c                 óÌ  — t          | ¦  «        } t          j                             ¦   «         }t	          t          |¦  «        r¡t          t          |¦  «        }d}d}t	          ||¦  «        rEt	          ||¦  «        r5 t          ||¦  «        ¦   «         s t          ||¦  «        | ¦  «         dS dS d|› d�}|d|› d|› d|› d�z  }t          j        |t          d	¬
¦  «         dS dS )z­Sets the seed to generate random numbers for custom device.

    Args:
        seed (int): The desired seed.

    See [Note: support the custom device with privateuse1]
    r   r   zSet seed for `z0` device does not take effect, please add API's ú`z` and `z` to `z` device module.é   )Ú
stacklevelN)	r   r   Ú_CÚ_get_privateuse1_backend_nameÚhasattrÚgetattrÚwarningsÚwarnÚUserWarning)r   Úcustom_backend_nameÚcustom_device_modÚ_bad_fork_nameÚ_seed_all_nameÚmessages         r	   r   r   X   s'  € õ ˆt‰9Œ9€DÝœ(×@Ò@ÑBÔBÐÝ�uÐ)Ñ*Ô*ð >Ý#¥EÐ+>Ñ?Ô?ÐØ*ˆØ*ˆÝÐ$ nÑ5Ô5ð 	>½'Ø˜~ñ;
ô ;
ð 	>ð >•7Ð,¨nÑ=Ô=Ñ?Ô?ð AØ:•Ð)¨>Ñ:Ô:¸4Ñ@Ô@Ð@Ð@Ð@ðAð Að mÐ':ÐlÐlÐlˆGØÐm˜>ÐmÐm°.ÐmÐmÐH[ÐmÐmÐmÑmˆGÝŒM˜'¥;¸1Ð=Ñ=Ô=Ð=Ð=Ð=ð>ð >r   c                  ó(   — t          j        ¦   «         S )zžReturns the initial seed for generating random numbers as a
    Python `long`.

    .. note:: The returned seed is for the default generator on CPU only.
    )r   Úinitial_seedr   r   r	   r1   r1   q   s   € õ Ô)Ñ+Ô+Ð+r   FTÚfork_rngÚdevicesr   c              #   ó  ‡K  — |dk    rdV — dS t          j        |¦  «        j        }t          t           |d¦  «        Š‰€t	          d|› d�dz   ¦  «        ‚|sdV — dS | €æ‰                     ¦   «         }|dk    r¯t          s¨|                     ¦   «         › d|› d|› d	|                     ¦   «         › d
|                     ¦   «         › d|                     ¦   «         › d|                     ¦   «         › d|› d|› d|                     ¦   «         › d|› d|› d�}t          j	        |¦  «         dat          t          |¦  «        ¦  «        } nt          | ¦  «        } t          j        ¦   «         }ˆfd„| D ¦   «         }	 dV — t          j        |¦  «         t          | |¦  «        D ]\  }	}
‰                     |
|	¦  «         ŒdS # t          j        |¦  «         t          | |¦  «        D ]\  }	}
‰                     |
|	¦  «         Œw xY w)a‰  
    Forks the RNG, so that when you return, the RNG is reset
    to the state that it was previously in.

    Args:
        devices (iterable of Device IDs): devices for which to fork
            the RNG. CPU RNG state is always forked. By default, :meth:`fork_rng` operates
            on all devices, but will emit a warning if your machine has a lot
            of devices, since this function will run very slowly in that case.
            If you explicitly specify devices, this warning will be suppressed
        enabled (bool): if ``False``, the RNG is not forked.  This is a convenience
            argument for easily disabling the context manager without having
            to delete it and unindent your Python code under it.
        device_type (str): device type str, default is `cuda`. As for custom device,
            see details in [Note: support the custom device with privateuse1]
    ÚmetaNztorch has no module of `z`, you should register z,a module by `torch._register_device_module`.é   z reports that you have z& available devices, and you have used z_ without explicitly specifying which devices are being used. For safety, we initialize *every* zA device by default, which can be quite slow if you have a lot of z5s. If you know that you are only making use of a few z' devices, set the environment variable z_VISIBLE_DEVICES or the 'z' keyword argument of z° with the set of devices you are actually using. For example, if you are using CPU only, set device.upper()_VISIBLE_DEVICES= or devices=[]; if you are using device 0 only, set zb_VISIBLE_DEVICES=0 or devices=[0].  To initialize all devices and suppress this warning, set the 'z#' keyword argument to `range(torch.z.device_count())`.Tc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )r   )Ú.0ÚdeviceÚ
device_mods     €r	   ú
<listcomp>zfork_rng.<locals>.<listcomp>Ä   s'   ø€ ÐPÐPÐP¸f˜×1Ò1°&Ñ9Ô9ÐPÐPÐPr   )r   r9   Útyper'   ÚRuntimeErrorÚdevice_countÚ_fork_rng_warned_alreadyÚupperr(   r)   ÚlistÚranger   r
   Úzip)r3   ÚenabledÚ_callerÚ_devices_kwÚdevice_typeÚnum_devicesr/   Úcpu_rng_stateÚdevice_rng_statesr9   Údevice_rng_stater:   s              @r	   r2   r2   }   sè  øè è € ð2 �fÒÐØˆˆˆØˆå”,˜{Ñ+Ô+Ô0€KÝ� ¨TÑ2Ô2€JØÐÝØK {ÐKÐKÐKØ<ñ=ñ
ô 
ð 	
ð ð ØˆˆˆØˆà€Ø ×-Ò-Ñ/Ô/ˆØ˜Š?ˆ?Õ#;ˆ?à×$Ò$Ñ&Ô&ð 
@ð 
@¸{ð 
@ð 
@Ø!(ð
@ð 
@à5@×5FÒ5FÑ5HÔ5Hð
@ð 
@ð 7B×6GÒ6GÑ6IÔ6Ið
@ð 
@ð )4×(9Ò(9Ñ(;Ô(;ð	
@ð 
@ð
 ×$Ò$Ñ&Ô&ð
@ð 
@ð
 BMð
@ð 
@ð
 elð
@ð 
@ð #×(Ò(Ñ*Ô*ð
@ð 
@ð 8Cð
@ð 
@ð !,ð
@ð 
@ð 
@ð õ ŒM˜'Ñ"Ô"Ð"Ø'+Ð$Ý•u˜[Ñ)Ô)Ñ*Ô*ˆˆõ �w‘-”-ˆåÔ'Ñ)Ô)€MØPÐPÐPÐPÈÐPÑPÔPÐð?ØˆˆˆåÔ˜MÑ*Ô*Ð*Ý(+¨GÐ5FÑ(GÔ(Gð 	?ð 	?Ñ$ˆFÐ$Ø×$Ò$Ð%5°vÑ>Ô>Ð>Ð>ð	?ð 	?øõ 	Ô˜MÑ*Ô*Ð*Ý(+¨GÐ5FÑ(GÔ(Gð 	?ð 	?Ñ$ˆFÐ$Ø×$Ò$Ð%5°vÑ>Ô>Ð>Ð>ð	?øøøs   Å8F> Æ>AH )r   N)NTr2   r3   r   )Ú
contextlibr(   Útypingr   r   Útorch._Cr   ÚTensorr
   r   r$   r   r   r   r   r1   r?   Úcontextmanagerr2   r   r   r	   ú<module>rQ      sN  ðà Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à €€€Ø &Ð &Ð &Ð &Ð &Ð &ð	+˜Uœ\ð 	+¨dð 	+ð 	+ð 	+ð 	+ð)�u”|ð )ð )ð )ð )ð/˜œÔ+ð /ð /ð /ð /ð>ˆcð ð ð ð ð2>ð >ð >ð >ð2,�cð ,ð ,ð ,ð ,ð !Ð ð ÔàØØØØðM?ð M?ð ðM?ð M?ð M?ñ ÔðM?ð M?ð M?r   