U
    ©Ê¹jY
  ã                   @   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   ú_/var/www/html/bwave/python/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                    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>)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__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   r/   r0   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