
    Ph"              	          U d dl mZmZ d dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ dd	lmZmZmZmZmZmZ dd
lmZmZmZmZmZmZ ddlmZmZ dgZee    e!d<   dejD                  defdZ#dedefdZ$dededefdZ%de dedefdZ&de dededefdZ'de dejD                  defdZ(de defdZ)d Z*d Z+de dedee   dee   fdZ,d edefd!Z-de d"edee   fd#Z.dedefd$Z/de d%ed&edee   fd'Z0y)(    )AnyListN)ShardMetadata)ShardedTensor)TensorProperties)DTensor)%compute_local_shape_and_global_offset   )BytesStorageMetadataChunkStorageMetadataMetadataIndexSTATE_DICT_TYPESTORAGE_TYPESTensorStorageMetadata)LoadItemTypeReadItemSavePlanTensorWriteData	WriteItemWriteItemType)"_check_shard_metadata_pair_overlap+_shards_get_overlap_region_wrt_saved_tensor create_read_items_for_chunk_list__all__tensorreturnc           	          t        t        j                  dgt        | j	                               z        | j	                               S )Nr   offsetssizes)r   torchSizelensize)r   s    wC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/distributed/checkpoint/planner_helpers.py_create_chunk_from_tensorr&   %   s5    

A3V[[]!334FKKM     shard_mdc                     t        t        j                  | j                        t        j                  | j                              S Nr   )r   r!   r"   shard_offsetsshard_sizes)r(   s    r%   _chunk_for_shardr-   +   s3    

8112jj--. r'   sharded_tensorc                     t        t        |      | j                         j                  | j                         j                        S )Nchunk
propertiesr$   )r   r-   metadatatensor_propertiesr$   )r.   r(   s     r%   _sharded_tensor_metadatar5   2   s=     x(!**,>>$$&++ r'   fqnc                    t        |j                  |j                  |j                        \  }}t	        j
                  |      t	        j
                  |      }}t        t        | |      t        j                  t        t        ||      t        j                  |j                               |j                                     S )Nr   r0   indextypetensor_data)r	   shapedevice_mesh
placementsr!   r"   r   r   r   SHARDr   r   r   create_from_tensorto_localr$   )r6   r   r    r   s       r%   _create_write_items_for_dtensorrB   <   s    :f((&*;*;NE7 ZZ&

7(;7EC)  #&
 (::6??;LM
 r'   c                     t        j                  |j                        }t        t	        | |      t
        j                  t        ||            S )Nr8   )r!   r"   r+   r   r   r   r?   r5   )r6   r.   r(   r   s       r%   _create_write_item_for_shardrD   Q   sB     jj//0GC)  ,^XF r'   c                 :   t        j                  dgt        |j                               z        }t	        t        | |      t        j                  t        t        ||j                               t        j                  |      |j                                     S )Nr   r   r0   r8   )r!   r"   r#   r$   r   r   r   TENSORr   r   r   r@   )r6   r   r   s      r%   _create_write_item_for_tensorrG   \   sq    jj!s6;;=112GC)!!#&wfkkmL'::6B
 r'   bytesc                 J    t        t        |       t        j                        S )N)r9   r:   )r   r   r   BYTE_IO)r6   rH   s     r%   _create_write_item_for_bytesiorK   i   s     C "" r'   c           
          t        t        j                  | t        j                  |f      |t        j                  |f      t        j                  |f            S N)r:   
dest_indexdest_offsetsstorage_indexstorage_offsetslengths)r   r   rJ   r!   r"   rN   dest_offsetrP   storage_offsetlengths        r%   _create_read_item_for_byteiorW   p   sK     !!ZZ/#

N#45

F9% r'   c           
          t        t        j                  | t        j                  |      |t        j                  |      t        j                  |            S rM   )r   r   rF   r!   r"   rN   rO   rP   rQ   rR   s        r%   _create_read_item_for_tensorrZ   }   sD       ZZ-#

?3

7# r'   checkpoint_mdlocal_chunksc                    g }t        |      D ]  \  }}t        |j                        D ]  \  }}t        ||      sg }g }	g }
t        ||      D ]:  \  }}}}|j	                  |       |	j	                  |       |
j	                  |       < |j	                  t        t        | |j                  |      |	t        | |j                  |      ||
               |S )aW  
    Create a list of ``ReadItem`` based on the checkpoint and local chunks.

    This applies the resharding algorithm and computes the reads needed
    to satisfy ``local_chunks`` with a checkpoint described by ``checkpoint_md``.

    Args:
        fqn (str) : The state_dict FQN to pass to ``ReadItem``.
        checkpoint_md (TensorStorageMetadata): metadata for a given tensor
            from a checkpoint.
        local_chunks (List[ChunkStorageMetadata]): Local chunks that needs to be
            loaded.

    Returns:
        A list of ``ReadItem`` that will satisfy all input chunks.
    )saved_shardcurrent_shardrY   )	enumeratechunksr   r   appendrZ   r   r   )r6   r[   r\   
read_itemsidxshardstorage_idx
storage_mdrQ   rO   rR   dimoffset_for_saved_tensoroffset_for_current_tensorrV   s                  r%   r   r      s    * J-
U'01E1E'F#K5eZH OLG =&e')  &&'>?##$=>v& ,,S%--E!-"/Z5G5G"U$3#' (G .: r'   
state_dictc           	         g }| j                         D ]  \  }}t        |t              r|j                  t	        ||             2t        |t
              r<|j                         j                  D ]  }|j                  t        |||               ~t        |t        j                        r|j                  t        ||             |j                  t        ||              t        |      S N)items
isinstancer   rb   rB   r   r3   shards_metadatarD   r!   TensorrG   rK   r   )rk   requestsr6   objr(   s        r%   "_create_default_metadata_only_planrt      s    H$$&Sc7#OO;CEF]+LLN:: <S#x PQ ;U\\*OO9#sCDOO:3DE ' Hr'   objectc                 4   t        |t              rt        | |      gS t        |t              r3|j	                         D cg c]  }t        | ||j                         c}S t        |t        j                        rt        | |      gS t        | |      gS c c}w rm   )ro   r   rB   r   local_shardsrD   r3   r!   rq   rG   rK   )r6   ru   re   s      r%   _create_write_itemsrx      s    &'"/V<==	FM	*  ,,.
. )fennE.
 	
 
FELL	)-c6:;;.sF;<<
s    Bc                     t        | j                  | j                  | j                        \  }}t	        j
                  |      t	        j
                  |      }}t        ||      S r*   )r	   r<   r=   r>   r!   r"   r   )r   r    r   s      r%   _create_chunk_from_dtensorrz      sW    :f((&*;*;NE7 ZZ&

7(;7E r'   mdrs   c                    t        |t              st        |t              rt        |      g}nt        |t              r1|j                         D cg c]  }t        |j                         }}nEt        |t        j                        rt        |      g}nt        d|  ddt        |       z         t        | ||      S t        t        |       dt        |       dd      gS c c}w )Nz Invalid checkpoint metadata for z, z(expected BytesStorageMetadata but found r   rS   )ro   r   r   rz   r   rw   r-   r3   r!   rq   r&   
ValueErrorr:   r   rW   r   )r6   r{   rs   r\   re   s        r%   _create_read_itemsr~      s    b./c7#6s;<L]+>A>N>N>P>PU 0>P   U\\*5c:;L23%r:<T"XJGH  0RFF )(-+C0 
 	
s   C$)1typingr   r   r!   !torch.distributed._shard.metadatar   'torch.distributed._shard.sharded_tensorr   0torch.distributed._shard.sharded_tensor.metadatar   torch.distributed._tensorr    torch.distributed._tensor._utilsr	   r3   r   r   r   r   r   r   plannerr   r   r   r   r   r   
reshardingr   r   r   str__annotations__rq   r&   r-   r5   rB   rD   rG   rK   rW   rZ   r   rt   rx   rz   r~    r'   r%   <module>r      s      ; A M - R  
 99c 9ell 7K } 1E !-: g ) *	+7D
s 
ELL 
Y 
 C 

4	4(4 +,4 
(^	4n? x =S =# =$y/ =w 3G 
C 
] 
 
h 
r'   