§
    `ƒij&  ã                   ó   — d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZ d dlmZmZmZmZ d dlmZ g d¢Z ed¬	¦  «         G d
„ d¦  «        ¦   «         Z G d„ de j        ¦  «        Z G d„ de j        ¦  «        ZdS )é    N)Ú	dataclass)ÚAnyÚOptionalÚUnion)ÚMetadataÚMetadataIndexÚStorageMeta)ÚLoadPlanÚLoadPlannerÚSavePlanÚSavePlanner)ÚFuture)ÚWriteResultÚStorageWriterÚStorageReaderT)Úfrozenc                   ó.   — e Zd ZU eed<   eed<   eed<   dS )r   ÚindexÚsize_in_bytesÚstorage_dataN)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Úintr   © ó    úx/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/distributed/checkpoint/storage.pyr   r      s6   € € € € € € àÐÐÑàÐÐÑØÐÐÑÐÐr   r   c            	       óð  — e Zd ZdZej        ddeeej	        df         ddfd„¦   «         Z
ej        dedededdfd	„¦   «         Zej        d
edefd„¦   «         Zej        dee         dee         fd„¦   «         Zej        d
ededeee                  fd„¦   «         Zej        dedeee                  ddfd„¦   «         Zeej        deeej	        f         defd„¦   «         ¦   «         Zdee         fd„ZdS )r   a8  
    Interface used by ``save_state_dict`` to write to storage.

    One StorageWriter instance acts as both the coordinator and the follower
    in a distributed checkpoint. As part of initialization, each instance
    is told its role.

    A subclass should expect the following sequence of calls.

    0) (all ranks) set checkpoint_id if users pass a valid checkpoint_id.
    1) (all ranks) set_up_storage_writer()
    2) (all ranks) prepare_local_plan()
    3) (coordinator) prepare_global_plan()
    4) (all ranks) write_data()
    5) (coordinator) finish()
    NÚcheckpoint_idÚreturnc                 ó   — dS )a©  
        Calls to indicates a brand new checkpoint write is going to happen.
        A checkpoint_id may be present if users set the checkpoint_id for
        this checkpoint write. The meaning of the checkpiont_id is
        storage-dependent. It can be a path to a folder/file or a key for
        a key-value storage.

        Args:
            checkpoint_id (Union[str, os.PathLike, None]):
                The ID of this checkpoint instance. The meaning of the checkpoint_id
                depends on the storage. It can be a path to a folder or to a file.
                It can also be a key if the storage is a key-value store.
                (Default: ``None``)
        Nr   ©Úselfr    s     r   ÚresetzStorageWriter.reset-   ó	   € ð  	ˆr   Úis_coordinatorÚargsÚkwargsc                 ó   — dS )z±
        Initialize this instance.

        Args:
            is_coordinator (bool): Whether this instance is responsible for coordinating
              the checkpoint.
        Nr   )r$   r'   r(   r)   s       r   Úset_up_storage_writerz#StorageWriter.set_up_storage_writer?   ó   € € € r   Úplanc                 ó   — dS )a‰  
        Perform storage-specific local planning.

        While this method can produce a completely different plan, the recommended
        way is to store storage specific data in SavePlan::storage_data.

        Args:
            plan (SavePlan): The local plan from the ``SavePlanner`` in use.

        Returns:
            A transformed ``SavePlan`` after storage local planning
        Nr   ©r$   r-   s     r   Úprepare_local_planz StorageWriter.prepare_local_planK   r,   r   Úplansc                 ó   — dS )aÌ  
        Perform centralized planning of storage.

        This method is only called on the coordinator instance.

        While this method can produce a completely different plan, the preferred
        way is to store storage specific data in SavePlan::storage_data.

        Args:
            plans: A list of ``SavePlan`` instances, one for each rank.

        Returns:
            A list of transformed ``SavePlan`` after storage global planning
        Nr   ©r$   r1   s     r   Úprepare_global_planz!StorageWriter.prepare_global_planZ   r,   r   Úplannerc                 ó   — dS )a  
        Write all items from ``plan`` using ``planner`` to resolve the data.

        A subclass should call ``SavePlanner::resolve_data`` on each item
        from the plan to get access to the underlying object to write.

        Subclasses should lazily call `resolve_data` as it can allocate memory.
        In case of tensors, make following assumptions:

        - They might be on any device, including not matching the one on ``WriteItem::tensor_data``
        - They might be views or not contiguous. Only the projection needs to be saved.

        Args:
            plan (SavePlan): The save plan to execute.
            planner (SavePlanner): Planner object to be used to resolve items to data.

        Returns:
            A future that completes to a list of WriteResult
        Nr   ©r$   r-   r5   s      r   Ú
write_datazStorageWriter.write_datak   r,   r   ÚmetadataÚresultsc                 ó   — dS )a½  
        Write the metadata and marks the current checkpoint as successful.

        The actual format/schema used for serializing `metadata` is an
        implementation detail. The only requirement is that it's recoverable
        in to the same object graph.

        Args:
            metadata (Metadata): metadata for the new checkpoint
            results: A list of WriteResults from all ranks.

        Returns:
            None
        Nr   )r$   r9   r:   s      r   ÚfinishzStorageWriter.finishƒ   r,   r   c                 ó   — dS ©zŒ
        Check if the given checkpoint_id is supported by the storage. This allow
        us to enable automatic storage selection.
        Nr   ©Úclsr    s     r   Úvalidate_checkpoint_idz$StorageWriter.validate_checkpoint_id”   ó	   € ð 	ˆr   c                 ó   — dS )a=  
        Return the storage-specific metadata. This is used to store additional information
        in a checkpoint that can be useful for providing request-level observability. StorageMeta
        is passed to the ``SavePlanner`` during save calls. Returns None by default.

        TODO: provide an example
        Nr   )r$   s    r   Ústorage_metazStorageWriter.storage_meta   s	   € ð ˆtr   ©N)r   r   r   Ú__doc__ÚabcÚabstractmethodr   ÚstrÚosÚPathLiker%   Úboolr   r+   r   r0   Úlistr4   r   r   r   r8   r   r<   ÚclassmethodrA   r   r	   rD   r   r   r   r   r      s  € € € € € ðð ð" 	Ôðð  5¨¨b¬k¸4Ð)?Ô#@ð ÈDð ð ð ñ Ôðð" 	Ôð	Ø"ð	Ø+.ð	Ø:=ð	à	ð	ð 	ð 	ñ Ôð	ð 	Ôð xð °Hð ð ð ñ Ôðð 	Ôð¨¨h¬ð ¸DÀ¼Nð ð ð ñ Ôðð  	ÔðØðØ'2ðà	[Ô!Ô	"ðð ð ñ Ôðð. 	Ôð˜xð °$°t¸KÔ7HÔ2Ið Èdð ð ð ñ Ôðð  ØÔð°5¸¸b¼kÐ9IÔ3Jð Ètð ð ð ñ Ôñ „[ðð˜h {Ô3ð ð ð ð ð ð r   r   c                   ó¸  — e Zd ZdZej        ddeeej	        df         ddfd„¦   «         Z
ej        dededefd„¦   «         Zej        d	ed
edededdf
d„¦   «         Zej        dedefd„¦   «         Zej        dee         dee         fd„¦   «         Zej        dededed         fd„¦   «         Zeej        deeej	        f         defd„¦   «         ¦   «         ZdS )r   aV  
    Interface used by ``load_state_dict`` to read from storage.

    One StorageReader instance acts as both the coordinator and the follower
    in a distributed checkpoint. As part of initialization, each instance
    is told its role.

    A subclass should expected the following sequence of calls by ``load_state_dict``:

    0) (all ranks) set checkpoint_id if users pass a valid checkpoint_id.
    1) (all ranks) read_metadata()
    2) (all ranks) set_up_storage_reader()
    3) (all ranks) prepare_local_plan()
    4) (coordinator) prepare_global_plan()
    5) (all ranks) read_data()
    Nr    r!   c                 ó   — dS )a±  
        Calls to indicates a brand new checkpoint read is going to happen.
        A checkpoint_id may be present if users set the checkpoint_id for
        this checkpoint read. The meaning of the checkpiont_id is
        storage-dependent. It can be a path to a folder/file or a key for
        a key-value storage.

        Args:
            checkpoint_id (Union[str, os.PathLike, None]):
                The ID of this checkpoint instance. The meaning of the checkpoint_id
                depends on the storage. It can be a path to a folder or to a file.
                It can also be a key if the storage is more like a key-value store.
                (Default: ``None``)
        Nr   r#   s     r   r%   zStorageReader.resetº   r&   r   r(   r)   c                 ó   — dS )z
        Read the checkpoint metadata.

        Returns:
            The metadata object associated with the checkpoint being loaded.

        Nr   )r$   r(   r)   s      r   Úread_metadatazStorageReader.read_metadataÌ   r,   r   r9   r'   c                 ó   — dS )zî
        Initialize this instance.

        Args:
            metadata (Metadata): The metadata schema to use.
            is_coordinator (bool): Whether this instance is responsible for coordinating
              the checkpoint.
        Nr   )r$   r9   r'   r(   r)   s        r   Úset_up_storage_readerz#StorageReader.set_up_storage_readerÖ   r,   r   r-   c                 ó   — dS )a†  
        Perform storage-specific local planning.

        While this method can produce a completely different plan, the recommended
        way is to store storage specific data in LoadPlan::storage_data.

        Args:
            plan (LoadPlan): The local plan from the ``LoadPlan`` in use.

        Returns:
            A transformed ``LoadPlan`` after storage local planning
        Nr   r/   s     r   r0   z StorageReader.prepare_local_planã   r,   r   r1   c                 ó   — dS )aÔ  
        Perform centralized planning of storage loading.

        This method is only called on the coordinator instance.

        While this method can produce a completely different plan, the preferred
        way is to store storage specific data in LoadPlan::storage_data.

        Args:
            plans: A list of ``LoadPlan`` instances, one for each rank.

        Returns:
            A list of transformed ``LoadPlan`` after storage global planning
        Nr   r3   s     r   r4   z!StorageReader.prepare_global_planò   r,   r   r5   c                 ó   — dS )a«  
        Read all items from ``plan`` using ``planner`` to resolve the data.

        A subclass should call ``LoadPlanner::load_bytes`` to deserialize a BytesIO
        object into the right place.

        A subclass should call ``LoadPlanner::resolve_tensor`` to get access to the
        tensors that in should load data into.

        It's the StorageLayer responsibility to properly schedule any cross device copies
        required.

        Args:
            plan (LoadPlan): The local plan to execute on
            planner (LoadPlanner): The planner object to use to resolve items.

        Returns:
            A future that completes once all reads are finished.
        Nr   r7   s      r   Ú	read_datazStorageReader.read_data  r,   r   c                 ó   — dS r>   r   r?   s     r   rA   z$StorageReader.validate_checkpoint_id  rB   r   rE   )r   r   r   rF   rG   rH   r   rI   rJ   rK   r%   r   r   rR   rL   rT   r
   r0   rM   r4   r   r   rX   rN   rA   r   r   r   r   r   ¨   sÙ  € € € € € ðð ð" 	Ôðð  5¨¨b¬k¸4Ð)?Ô#@ð ÈDð ð ð ñ Ôðð" 	Ôð 3ð °#ð ¸(ð ð ð ñ Ôðð 	Ôð
Ø ð
Ø26ð
Ø?Bð
ØNQð
à	ð
ð 
ð 
ñ Ôð
ð 	Ôð xð °Hð ð ð ñ Ôðð 	Ôð¨¨h¬ð ¸DÀ¼Nð ð ð ñ Ôðð  	Ôð˜hð °ð ÀÈÄð ð ð ñ Ôðð* ØÔð°5¸¸b¼kÐ9IÔ3Jð Ètð ð ð ñ Ôñ „[ðð ð r   r   )rG   rJ   Údataclassesr   Útypingr   r   r   Ú%torch.distributed.checkpoint.metadatar   r   r	   Ú$torch.distributed.checkpoint.plannerr
   r   r   r   Útorch.futuresr   Ú__all__r   ÚABCr   r   r   r   r   ú<module>ra      sy  ðØ 
€
€
€
Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ Vðð ð ð ð ð ð ð ð ð ð ð ð !Ð  Ð  Ð  Ð  Ð  ð <Ð
;Ð
;€ð €$ÐÑÔðð ð ð ð ñ ô ñ ÔððJð Jð Jð Jð JC”Gñ Jô Jð JðZxð xð xð xð xC”Gñ xô xð xð xð xr   