
    [Th                        S SK JrJr  S SKrS SKJr  SSKJr  \\	\
\R                  4   rS/rS\S\R                  4S	 jrS
\\\4   S\\R                  \R                  4   4S jrS\\   S\\R                     4S jr " S S\5      rg)    )OptionalUnionN) _TensorPipeRpcBackendOptionsBase   )	constantsTensorPipeRpcBackendOptionsdevicereturnc                     [         R                  " U 5      n U R                  S:w  a  [        SU R                   S35      eU $ )NcudazA`set_devices` expect a list of CUDA devices, but got device type .)torchr	   type
ValueError)r	   s    U/var/www/auris/envauris/lib/python3.13/site-packages/torch/distributed/rpc/options.py
_to_devicer      sE    \\&!F{{f!;;-q*
 	
 M    
device_mapc           	          0 n0 nU R                  5        HS  u  p4[        R                  " U5      [        R                  " U5      pCXB;   a  [        SU SX$    SU 35      eXAU'   X2U'   MU     U$ )Nz9`device_map` only supports 1-to-1 mapping, trying to map  and  to )itemsr   r	   r   )r   full_device_mapreverse_mapkvs        r   _to_device_mapr      s     9;O46K  "||AQ1!!"5(8QCA  A # r   devicesc                 4    [        [        [        U 5      5      $ N)listmapr   r   s    r   _to_device_listr$   *   s    J())r   c                     ^  \ rS rSrSr\R                  \R                  \R                  SSSSS.S\	S\
S\S\\\\\\4   4      S	\\\      S
\\   S\\   4U 4S jjjrS\S\\\4   4U 4S jjrS	\\   4S jrSrU =r$ )r   .   a  
The backend options for
:class:`~torch.distributed.rpc.TensorPipeAgent`, derived from
:class:`~torch.distributed.rpc.RpcBackendOptions`.

Args:
    num_worker_threads (int, optional): The number of threads in the
        thread-pool used by
        :class:`~torch.distributed.rpc.TensorPipeAgent` to execute
        requests (default: 16).
    rpc_timeout (float, optional): The default timeout, in seconds,
        for RPC requests (default: 60 seconds). If the RPC has not
        completed in this timeframe, an exception indicating so will
        be raised. Callers can override this timeout for individual
        RPCs in :meth:`~torch.distributed.rpc.rpc_sync` and
        :meth:`~torch.distributed.rpc.rpc_async` if necessary.
    init_method (str, optional): The URL to initialize the distributed
        store used for rendezvous. It takes any value accepted for the
        same argument of :meth:`~torch.distributed.init_process_group`
        (default: ``env://``).
    device_maps (Dict[str, Dict], optional): Device placement mappings from
        this worker to the callee. Key is the callee worker name and value
        the dictionary (``Dict`` of ``int``, ``str``, or ``torch.device``)
        that maps this worker's devices to the callee worker's devices.
        (default: ``None``)
    devices (List[int, str, or ``torch.device``], optional): all local
        CUDA devices used by RPC agent. By Default, it will be initialized
        to all local devices from its own ``device_maps`` and corresponding
        devices from its peers' ``device_maps``. When processing CUDA RPC
        requests, the agent will properly synchronize CUDA streams for
        all devices in this ``List``.
N)num_worker_threadsrpc_timeoutinit_methoddevice_mapsr   _transports	_channelsr'   r(   r)   r*   r   r+   r,   c          	         > Uc  0 O.UR                  5        VV	s0 s H  u  pU[        U	5      _M     sn	nn
Uc  / O
[        U5      n[        TU ]  UUUUUU
U5        g s  sn	nf r    )r   r   r$   super__init__)selfr'   r(   r)   r*   r   r+   r,   r   r   full_device_mapsfull_device_list	__class__s               r   r/   $TensorPipeRpcBackendOptions.__init__P   sy     " 3>3D3D3FG3F41!^A&&3FG 	
 ")2og6N	
 Hs   Ator   c           
         > [        U5      n[        TU ]  nX;   aG  UR                  5        H3  u  pVXTU   ;   d  M  XdU   U   :w  d  M  [	        SU SU SXA   U    35      e   [        TU ]  X5        g)a  
Set device mapping between each RPC caller and callee pair. This
function can be called multiple times to incrementally add
device placement configurations.

Args:
    to (str): Callee name.
    device_map (Dict of int, str, or torch.device): Device placement
        mappings from this worker to the callee. This map must be
        invertible.

Example:
    >>> # xdoctest: +SKIP("distributed")
    >>> # both workers
    >>> def add(x, y):
    >>>     print(x)  # tensor([1., 1.], device='cuda:1')
    >>>     return x + y, (x + y).to(2)
    >>>
    >>> # on worker 0
    >>> options = TensorPipeRpcBackendOptions(
    >>>     num_worker_threads=8,
    >>>     device_maps={"worker1": {0: 1}}
    >>> # maps worker0's cuda:0 to worker1's cuda:1
    >>> )
    >>> options.set_device_map("worker1", {1: 2})
    >>> # maps worker0's cuda:1 to worker1's cuda:2
    >>>
    >>> rpc.init_rpc(
    >>>     "worker0",
    >>>     rank=0,
    >>>     world_size=2,
    >>>     backend=rpc.BackendType.TENSORPIPE,
    >>>     rpc_backend_options=options
    >>> )
    >>>
    >>> x = torch.ones(2)
    >>> rets = rpc.rpc_sync("worker1", add, args=(x.to(0), 1))
    >>> # The first argument will be moved to cuda:1 on worker1. When
    >>> # sending the return value back, it will follow the invert of
    >>> # the device map, and hence will be moved back to cuda:0 and
    >>> # cuda:1 on worker0
    >>> print(rets[0])  # tensor([2., 2.], device='cuda:0')
    >>> print(rets[1])  # tensor([2., 2.], device='cuda:1')
z=`set_device_map` only supports 1-to-1 mapping, trying to map r   r   N)r   r.   r*   r   r   _set_device_map)r0   r5   r   r   curr_device_mapsr   r   r3   s          r   set_device_map*TensorPipeRpcBackendOptions.set_device_mapk   s    Z )4 7.!'--/,,r6J16M1M$##$#T!E2B2Fq2I1JL  0 	4r   c                 $    [        U5      U l        g)a*  
Set local devices used by the TensorPipe RPC agent. When processing
CUDA RPC requests, the TensorPipe RPC agent will properly synchronize
CUDA streams for all devices in this ``List``.

Args:
    devices (List of int, str, or torch.device): local devices used by
        the TensorPipe RPC agent.
N)r$   r   )r0   r   s     r   set_devices'TensorPipeRpcBackendOptions.set_devices   s     'w/r   r#   )__name__
__module____qualname____firstlineno____doc__rpc_contantsDEFAULT_NUM_WORKER_THREADSDEFAULT_RPC_TIMEOUT_SECDEFAULT_INIT_METHODintfloatstrr   dict
DeviceTyper!   r/   r9   r<   __static_attributes____classcell__)r3   s   @r   r   r   .   s    H #/"I"I)AA';;IM.2&*$(
  
 	

 
 d3Z-C(D#DEF
 $z*+
 d^
 D>
 
685 85$z:7M2N 85t
04
#3 
0 
0r   )typingr   r   r   torch._C._distributed_rpcr    r   rC   rG   rI   r	   rK   __all__r   rJ   r   r!   r$   r    r   r   <module>rS      s    "  F ' 3U\\)*
(
)z ell Z+,	%,,
$%"*T*- *$u||2D *A0"B A0r   