U
    JcU                     @   sx   d dl mZmZ d dlmZ d dlmZ d dlZd dlm	Z	 G dd deZ
eG dd	 d	eZeG d
d deZdS )    )	dataclassfield)Enum)ListN)ShardMetadatac                   @   s   e Zd ZdZdZdZdS )MEM_FORMAT_ENCODINGr         N)__name__
__module____qualname__TORCH_CONTIGUOUS_FORMATTORCH_CHANNELS_LASTTORCH_PRESERVE_FORMAT r   r   T/tmp/pip-unpacked-wheel-gikjz4vx/torch/distributed/_shard/sharded_tensor/metadata.pyr      s   r   c                   @   s   e Zd ZU dZee dZejed< eej	dZ
ej
ed< dZeed< eejdZejed< dZeed< d	d
 Zdd Zeejd dddZdS )TensorPropertiesz+ Properties used to create :class:`Tensor` defaultdtypelayoutFrequires_gradmemory_format
pin_memoryc                 C   s`   | j }|tjkrtj}n2|tjkr*tj}n |tjkr<tj}nt	d| | j
| j| j|| jfS )NzInvalid torch.memory_format: )r   torchcontiguous_formatr   r   channels_lastr   preserve_formatr   RuntimeErrorr   r   r   r   )selfr   mem_format_encodingr   r   r   __getstate__   s    


zTensorProperties.__getstate__c                 C   sd   |\| _ | _| _}| _|tjkr(tj}n2|tjkr:tj	}n |tj
krLtj}ntd| || _d S )Nz&Invalid torch.memory_format encoding: )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   stater    r   r   r   r   __setstate__,   s    


zTensorProperties.__setstate__)tensorreturnc                 C   s   t | j| j| jtj|  dS )N)r   r   r   r   r   )r   r   r   r   r   r   	is_pinned)r$   r   r   r   create_from_tensor=   s    z#TensorProperties.create_from_tensorN)r
   r   r   __doc__r   r   Zget_default_dtyper   __annotations__Zstridedr   r   boolr   r   r   r!   r#   staticmethodZTensorr'   r   r   r   r   r      s   
r   c                   @   sV   e Zd ZU dZeedZee e	d< ee
g dZe
je	d< ee dZee	d< dS )ShardedTensorMetadataz8
    Represents metadata for :class:`ShardedTensor`
    )default_factoryshards_metadatar   sizetensor_propertiesN)r
   r   r   r(   r   listr.   r   r   r)   r   Sizer/   r   r0   r   r   r   r   r,   F   s   
r,   )Zdataclassesr   r   enumr   typingr   r   Z!torch.distributed._shard.metadatar   r   objectr   r,   r   r   r   r   <module>   s   8