B
    F.\                 @   s   d dl m Z mZmZmZ ddlZddlZeejdd Z	eejdd Z
eejjdd	 Zeejjd
d Zeejj dS )   )	serializedask_serializedask_deserializeregister_generic    Nc             C   sd   t |  \}}| jd k	rFt | j \}}|t|d|d< ||7 }| j|d< | jj|d< ||fS )N)headerstartgradrequires_graddevice)r   numpyr	   lenr
   r   type)tr   framesZgrad_headergrad_frames r   9lib/python3.7/site-packages/distributed/protocol/torch.pyserialize_torch_Tensor   s    

r   c             C   s   |  ddrN| d d }|d | ||d   }}ttj| d d |}nd }ttj| |}| d dkrt|}| d r|d}ntj|| d | d d	}|d k	rt||_	|S )
Nr	   Fr   r   r   Zcpur
   T)datar   r
   )
getr   dispatchnpZndarraytorchZ
from_numpyZrequires_grad_Ztensorr	   )r   r   ir   r	   xr   r   r   r   deserialize_torch_Tensor   s     
r   c             C   s"   t |  \}}| j|d< ||fS )Nr
   )r   detachr
   )pr   r   r   r   r   serialize_torch_Parameters+   s    
r   c             C   s&   t tj| |}tjj|| d dS )Nr
   )r   r
   )r   r   r   Tensornn	Parameter)r   r   r   r   r   r   deserialize_torch_Parameters2   s    r#   )r   r   r   r   r   r   r   registerr    r   r   r!   r"   r   r#   ZModuler   r   r   r   <module>   s   