
    bri                         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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 )zSets 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    d/var/www/html/bestrading.cuttalo.com/models/btc_v9/venv/lib/python3.11/site-packages/torch/random.pyset_rng_stater
   
   s     	*****    c                  (    t          j                    S )zReturns 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          |           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`.
    )_manual_seed_impl)seeds    r	   manual_seedr       s     T"""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 )Nr   )int
torch.cudacuda_is_in_bad_forkmanual_seed_all	torch.mpsmpsr   	torch.xpuxpu_seed_custom_devicer   r   torchs     r	   r   r   -   s    t99D:%%'' )
""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 )zSets 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   C   s     !##D:%%'' )
""4(((9$$&& $	d###9$$&& (	!!$'''Kr   c                    t          |           } t          j                                        }t	          t          |          rt          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 )zSets 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   \   s'    t99D(@@BBu)** >#E+>??**$n55 	>'~;
 ;
 	> >7,n==?? A:)>::4@@@@@A A m':lllGm>mm.mmH[mmmmGM';1======> >r   c                  (    t          j                    S )zReturns 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	   r4   r4   u   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    rt          s|                                 d| d| d	|                                 d
|                                 d|                                 d|                                 d| d| d|                                 d| d| d}t          j	        |d           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)az  
    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 supported device,
            see details in :ref:`accelerator<accelerators>`
    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())`.   r%   Tc                 :    g | ]}                     |          S r   )r   ).0device
device_mods     r	   
<listcomp>zfork_rng.<locals>.<listcomp>   s'    PPPf11&99PPPr   )r    r=   typer*   RuntimeErrordevice_count_fork_rng_warned_alreadyupperr+   r,   listranger   r
   zip)r6   enabled_caller_devices_kwdevice_typenum_devicesr2   cpu_rng_statedevice_rng_statesr=   device_rng_stater>   s              @r	   r5   r5      s     2 f,{++0KT22JK{KKK<=
 
 	
   --//??#;?$$&& 
@ 
@{ 
@ 
@!(
@ 
@5@5F5F5H5H
@ 
@ 7B6G6G6I6I
@ 
@ )4(9(9(;(;	
@ 
@
 $$&&
@ 
@
 BM
@ 
@
 el
@ 
@ #((**
@ 
@ 8C
@ 
@ !,
@ 
@ 
@  M'a0000'+$u[))** w--'))MPPPPPPP?M***(+G5F(G(G 	? 	?$F$$$%5v>>>>	? 	? 	M***(+G5F(G(G 	? 	?$F$$$%5v>>>>	?s   :G   AH)r   N)NTr5   r6   r   )
contextlibr+   collections.abcr   r    torch._Cr   Tensorr
   r   r'   r   r   r   r   r   r4   rC   contextmanagerr5   r   r   r	   <module>rU      sn        % % % % % %  & & & & & &	+U\ 	+d 	+ 	+ 	+ 	+)u| ) ) ) )
#+ 
# 
# 
# 
#/ux1 / / / /,c    2> > > >2,c , , , , !  M? M? M? M? M? M? M? M?r   