U
    yhc
                     @   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   R/var/www/html/venv/lib/python3.8/site-packages/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                    sp   fddj dd}tkr<|  |S t  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Zfutex)_complete_opr   resultr   r   _wrap_rref_type_cont3   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$   9   s    z!_invoke_rpc.<locals>._complete_op)Z	_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__E   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__J   s    zRRefProxy.__getattr__N)__name__
__module____qualname__r   r,   r-   r   r   r   r   r)   D   s   r)   )	functoolsr    r   r   r   	constantsr   Ztorch.futuresr   r   Zasync_executionr   r(   r)   r   r   r   r   <module>   s   
2