U
    /e                     @  s   d dl mZ d dlZd dlmZmZmZmZm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 )    )annotationsN)dask_deserializedask_serializedeserializeregister_generic	serializec                 C  s   | j }|r t|   \}}nt|  \}}d|i}| jd k	rnt| j \}}|t|d|d< ||7 }||d< | jj|d< ||fS )N
sub-header)headerstartgradrequires_graddevice)r   r   detachZnumpyr   lenr   type)trequires_grad_
sub_headerframesr	   Zgrad_headergrad_frames r   >/tmp/pip-unpacked-wheel-g426oqom/distributed/protocol/torch.pyserialize_torch_Tensor   s    
r   c                 C  s   |  ddrF| d d }|d | ||d   }}t| d d |}nd }t| d |}| d dkrt|}| d r|d	}ntj|| d | d d
}|d k	rt||_|S )Nr   Fr
   r	   r   r   cpur   T)datar   r   )getr   torchZ
from_numpyr   Ztensorr   )r	   r   ir   r   xr   r   r   r   deserialize_torch_Tensor!   s$    
  r   c                 C  s*   t |  \}}d|i}| j|d< ||fS )Nr   r   )r   r   r   )pr   r   r	   r   r   r   serialize_torch_Parameters8   s    
r!   c                 C  s"   t | d |}tjj|| d dS )Nr   r   )r   r   )r   r   nn	Parameter)r	   r   r   r   r   r   deserialize_torch_Parameters@   s    r$   )
__future__r   r   Zdistributed.protocol.serializer   r   r   r   r   registerZTensorr   r   r"   r#   r!   r$   Moduler   r   r   r   <module>   s   	





