U
    dY
                     @   st   d dl mZ ddlmZ ddlmZ d dlZddlmZ d dlm	Z	 dd	 Z
ejd
d Zdd ZG dd dZdS )    )partial   )	functions)	rpc_asyncN)UNSET_RPC_TIMEOUT)Futurec                 C   s   t |  |||S NgetattrZlocal_valuerref	func_nameargskwargs r   D/tmp/pip-unpacked-wheel-ua33x9lu/torch/distributed/rpc/rref_proxy.py_local_invoke
   s    r   c                 C   s   t |  |||S r   r	   r   r   r   r   _local_invoke_async_execution   s    r   c                    sx   	fddj 	dd}tkr<|  |S t  fddfdd |fd	d
 S d S )Nc                    s`   |   }t}t|tjjp&t|tjj}|sDt|}t|drDt	}
 | fdS )NZ_wrapped_async_rpc_function)r   timeout)valuer   
issubclasstorchZjitZScriptModuleZ_Cr
   hasattrr   owner)rref_futZ	rref_typeZ_invoke_funcZbypass_typefunc)r   r   r   rpc_apir   r   r   r   _rref_type_cont   s      


z$_invoke_rpc.<locals>._rref_type_contF)r   blockingc              
      sD   z|    W n, tk
r> } z| W 5 d }~X Y nX d S r   )thenBaseExceptionset_exceptionfutex)_complete_opr   resultr   r   _wrap_rref_type_cont2   s    z)_invoke_rpc.<locals>._wrap_rref_type_contc              
      sD   z  |   W n, tk
r> } z | W 5 d }~X Y nX d S r   )Z
set_resultr   r    r!   r"   )r&   r   r   r%   8   s    z!_invoke_rpc.<locals>._complete_opc                    s    | S r   r   )r#   )r'   r   r   <lambda>>       z_invoke_rpc.<locals>.<lambda>)	_get_typer   waitr   r   )r   r   r   r   r   r   r   r   )
r%   r   r'   r   r   r   r&   r   r   r   r   _invoke_rpc   s    r,   c                   @   s    e Zd ZefddZdd ZdS )	RRefProxyc                 C   s   || _ || _|| _d S r   )r   r   rpc_timeout)selfr   r   r   r   r   r   __init__D   s    zRRefProxy.__init__c                 C   s   t t| j| j|| jS r   )r   r,   r   r   r.   )r/   r   r   r   r   __getattr__I   s    zRRefProxy.__getattr__N)__name__
__module____qualname__r   r0   r1   r   r   r   r   r-   C   s   r-   )	functoolsr    r   r   r   	constantsr   Ztorch.futuresr   r   Zasync_executionr   r,   r-   r   r   r   r   <module>   s   
2