o
    پi                     @   sH   d dl mZ d dlmZmZ d dlZeG dd dZG dd dZdS )    )	dataclass)ListTupleNc                   @   sF   e Zd ZU dZeed< ejed< ejed< e	ed< e	ed< e	ed< dS )	FlattenedTensorMetadataz+Metadata for a tensor in a flattened bucketnameshapedtype	start_idxend_idxnumelN)
__name__
__module____qualname____doc__str__annotations__torchSizer   int r   r   X/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/weight_sync/tensor_bucket.pyr      s   
 

r   c                   @   s   e Zd ZdZdZ			ddeeeej	f  dej	dee
 fddZd	ej	fd
dZd	ee
 fddZd	eeeej	f  fddZdS )FlattenedTensorBucketz
    A bucket that flattens multiple tensors into a single tensor for efficient processing
    while preserving all metadata needed for reconstruction.
    TNnamed_tensorsflattened_tensormetadatac              	   C   s   |durZdgt | | _d| _|stdd}dgt | }t|D ]-\}\}}| tj}	|	||< |		 }
t
||j|j|||
 |
d}|| j|< ||
7 }q"tj|dd| _dS |du sb|du rftd|| _|| _dS )aO  
        Initialize a tensor bucket from a list of named tensors OR from pre-flattened data.
        Args:
            named_tensors: List of (name, tensor) tuples (for creating new bucket)
            flattened_tensor: Pre-flattened tensor (for reconstruction)
            metadata: Pre-computed metadata (for reconstruction)
        Nz!Cannot create empty tensor bucketr   )r   r   r   r	   r
   r   )dimzGMust provide either named_tensors or both flattened_tensor and metadata)lenr   r   
ValueError	enumerateflattenviewr   uint8r   r   r   r   cat)selfr   r   r   current_idxflattened_tensorsir   tensor	flattenedr   metadata_objr   r   r   __init__   s8   


zFlattenedTensorBucket.__init__returnc                 C      | j S )z6Get the flattened tensor containing all bucket tensors)r   r#   r   r   r   get_flattened_tensorR      z*FlattenedTensorBucket.get_flattened_tensorc                 C   r,   )z*Get metadata for all tensors in the bucket)r   r-   r   r   r   get_metadataV   r/   z"FlattenedTensorBucket.get_metadatac                 C   sX   dgt | j }t| jD ]\}}| j|j|j |j|j	}|j
|f||< q|S )z
        Reconstruct original tensors from flattened tensor with optimized performance.
        Uses memory-efficient operations to minimize allocations and copies.
        N)r   r   r   r   r	   r
   r    r   reshaper   r   )r#   reconstructedr&   metar'   r   r   r   reconstruct_tensorsZ   s   z)FlattenedTensorBucket.reconstruct_tensors)NNN)r   r   r   r   supports_multi_dtypesr   r   r   r   Tensorr   r*   r.   r0   r4   r   r   r   r   r      s     
6 r   )dataclassesr   typingr   r   r   r   r   r   r   r   r   <module>   s    