
    [Th                        % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJr  S SKJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJrJr  S S	KJ r   S SK!r!S S
K!J"r"  S SK#J$r$J%r%  S SK&J'r'  S SK(J)r)J*r*  S SK+J,r,J-r-J.r.  S SK/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7  S SK8J9r9  S SK:J;r;J<r<J=r=  S SK>J?r?  S SK@JArA  / SQrBSrC\D\ES'   \ " S S5      5       rF\ " S S5      5       rGSrHS\D4S jrI " S S\5      rJ " S  S!\J5      rK " S" S#\J5      rL " S$ S%5      rMS&\6S\N4S' jrOS(\NS)\P\6   S\P\P\6      4S* jrQ SFS+\MS,\R                  S-\\R                  \!RD                  4   S.\6S/\DS0\TS\=4S1 jjrUS2\S3\R                  S4\R                  S5\5S+\MS6\NS7\TS8\NS0\TSS4S9 jrW " S: S;\5      rX " S< S=\X5      rY " S> S?\<5      rZ " S@ SA5      r[ " SB SC\;5      r\ " SD SE\Z\95      r]g)G    N)ABCabstractmethod)	GeneratorIterableIteratorSequence)contextmanager)	dataclass)UnsupportedOperation)Path)AnyCallablecastIOOptionalUnion)Buffer)Tensor)_get_available_device_type_get_device_module)narrow_tensor_by_index)ExtensionRegistryStreamTransformExtension)MetadataSTATE_DICT_TYPEStorageMeta)LoadItemTypeLoadPlanLoadPlannerReadItemSavePlanSavePlanner	WriteItemWriteItemType)BlockingAsyncStager)StorageReaderStorageWriterWriteResult)_create_file_view)Future)FileSystemWriterFileSystemReader
FileSystemFileSystemBase	.metadata_metadata_fnc                   X    \ rS rSr% Sr\\S'   \\S'   \\S'   Sr\	\
\      \S'   S rS	rg)
_StorageInfo9   z#This is the per entry storage info.relative_pathoffsetlengthNtransform_descriptorsc                 v    U R                   R                  5        VVs0 s H  u  pUc  M
  X_M     snn$ s  snnf N)__dict__items)selfkvs      _/var/www/auris/envauris/lib/python3.13/site-packages/torch/distributed/checkpoint/filesystem.py__getstate___StorageInfo.__getstate__B   s1    !%!4!4!6H!6!!6HHHs   	55 )__name__
__module____qualname____firstlineno____doc__str__annotations__intr7   r   r   r@   __static_attributes__rB       r?   r2   r2   9   s/    -KK598HSM29IrL   r2   c                        \ rS rSr% \\S'   Srg)_StoragePrefixF   prefixrB   N)rC   rD   rE   rF   rH   rI   rK   rB   rL   r?   rN   rN   F   s    KrL   rN   z.distcpreturnc                  >    [        [        R                  " 5       5      $ r9   )rH   uuiduuid4rB   rL   r?   _generate_uuidrU   N   s    tzz|rL   c                       \ rS rSr\S\S\SS4S j5       r\S
S j5       r\S\	\
\R                  \4      4S j5       rS	rg)_TensorLoaderR   sizeobjrQ   Nc                     g r9   rB   r<   rY   rZ   s      r?   add_TensorLoader.addS       rL   c                     g r9   rB   r<   s    r?   start_loading_TensorLoader.start_loadingW   r_   rL   c                     g r9   rB   ra   s    r?   values_TensorLoader.values[   r_   rL   rB   rQ   N)rC   rD   rE   rF   r   rJ   objectr]   rb   r   tupletorchr   re   rK   rB   rL   r?   rW   rW   R   sk     & T     u||V';!<=  rL   rW   c                   x    \ rS rSrS\SS4S jrS\S\SS4S jrSS	 jr	S\
\\R                  \4      4S
 jrSrg)_SerialCpuLoader`   resolve_funrQ   Nc                     Xl         / U l        g r9   )rn   r;   )r<   rn   s     r?   __init___SerialCpuLoader.__init__a   s    &/1
rL   rY   rZ   c                 <    U R                   R                  X45        g r9   )r;   appendr\   s      r?   r]   _SerialCpuLoader.adde   s    

4+&rL   c                     g r9   rB   ra   s    r?   rb   _SerialCpuLoader.start_loadingh       rL   c              #      #    U R                    Hz  u  pU R                  U5      R                  5       nUR                  5       nUR	                  5       R                  5       UR                  5       :w  a  UR                  5       nUU4v   M|     g 7fr9   )r;   rn   detachcpustoragerY   numelcloner<   _rZ   tensors       r?   re   _SerialCpuLoader.valuesk   sr     jjFA%%c*113FZZ\F~~$$&&,,.8  !s   BB)r;   rn   rg   )rC   rD   rE   rF   r   rp   rJ   rh   r]   rb   r   ri   rj   r   re   rK   rB   rL   r?   rl   rl   `   sS    2H 2 2' '& 'T '	u||V';!<= 	rL   rl   c            	       (   \ rS rSr  SS\S\\R                     S\SS4S jjr	\
S\4S j5       rS\\\R                  \4      4S	 jrSS
 jrS\\\R                  \4      4S jrS\S\SS4S jrSS jrS\\\R                  \4      4S jrSrg)_OverlappingCpuLoaderw   Nrn   streaminflight_threshholdrQ   c                 L   Xl         / U l        X0l        SU l        [        R
                  " 5       U l        SU l        SU l        U(       a  UR                  O	[        5       U l	        [        U R                  5      U l        [        [        R                  R                   U=(       d    U R                  R#                  5       5      U l        U R$                  U R                  R#                  5       :w  a4  U R$                  R'                  U R                  R#                  5       5        g g )Nr   F)rn   r;   r   in_flight_datacollectionsdequecurrent_itemsidxstarteddevice_typer   r   device_moduler   rj   cudaStreamcurrent_streamr   wait_stream)r<   rn   r   r   s       r?   rp   _OverlappingCpuLoader.__init__x   s     '/1
#6 0;0A0A0C"(F.H.J 	 00@0@AJJvL););)J)J)L
 ;;$,,;;==KK##D$6$6$E$E$GH >rL   c                 F    U R                   [        U R                  5      :  $ r9   )r   lenr;   ra   s    r?   _done_OverlappingCpuLoader._done   s    xx3tzz?**rL   c                    / nU R                   U R                  :  a  U R                  R                  5         U R                   U R                  :  a  U R                  R                  5       nU =R                   US   R                  5       US   R                  5       -  -  sl         UR                  U5        U R                   U R                  :  a  M  U$ Nr   )	r   r   r   synchronizer   popleftr|   element_sizers   )r<   drainedvals      r?   _drain_OverlappingCpuLoader._drain   s    $":"::KK##%!!T%=%==$$,,.C3q6<<>CF4G4G4I#IINN3 !!T%=%== rL   c                    U R                   R                  U R                  5         U R                  (       Gd  U R                  U R                  :  Gat  U R
                  U R                     u  pU =R                  S-  sl        U R                  U5      R                  5       nUR                  R                  U R                  :X  a  UR                  SSS9nOqUR                  [        R                  " S5      :X  aM  UR                  5       R                  5       UR!                  5       UR"                  -  :w  a  UR%                  5       nU R&                  R)                  UU45        U =R                  UR!                  5       UR+                  5       -  -  sl        U R                  (       d  U R                  U R                  :  a  GMt  S S S 5        g ! , (       d  f       g = f)N   rz   T)devicenon_blocking)r   r   r   r   r   r;   r   rn   ry   r   typer   torj   untyped_storagerY   r|   itemsizer}   r   rs   r   r~   s       r?   _refill_OverlappingCpuLoader._refill   sV   &&t{{3jjjT%8%84;S;S%SDHH-A))#.557==%%)9)99#YYe$YGF]]ell5&99..0557!<<>FOO;< "("")) ##v||~8K8K8M'MM#) jjT%8%84;S;S%S 433s   FG
Gc                     U R                   (       d   e[        U R                  5      S:  a  U R                  R	                  5         U R                  $ r   )r   r   r   r   r   ra   s    r?   _finish_OverlappingCpuLoader._finish   s=    zzzt!!"Q&KK##%!!!rL   rY   rZ   c                 t    U R                   (       a  [        S5      eU R                  R                  X45        g )Nz&cannot add items after loading started)r   RuntimeErrorr;   rs   r\   s      r?   r]   _OverlappingCpuLoader.add   s)    <<GHH

4+&rL   c                     U R                   (       a  g SU l         U R                  R                  [        R                  " S5      S9  U R                  5         g )NTr   key)r   r;   sortoperator
itemgetterr   ra   s    r?   rb   #_OverlappingCpuLoader.start_loading   s9    <<

H//23rL   c              #      #    U R                  5         U R                  (       d=  U R                  5       nU R                  5         U S h  vN   U R                  (       d  M=  U R	                  5        S h  vN   g  N0 N7fr9   )rb   r   r   r   r   )r<   r   s     r?   re   _OverlappingCpuLoader.values   sY     **kkmGLLN ***
 <<>!! !s*   AA>	A:
A>!A>4A<5A><A>)
r   r   r   r   r   r   r;   rn   r   r   )Ni@B rg   )rC   rD   rE   rF   r   r   rj   r   rJ   rp   propertyboolr   listri   r   rh   r   r   r   r   r]   rb   r   re   rK   rB   rL   r?   r   r   w   s     *.#,	II &I !	I
 
I. +t + +U5<<#789 N0"%f(<"=> "' '& 'T '
"u||V';!<= "rL   r   c            	       |    \ rS rSrSr SS\\\      SS4S jjrS\	S\
R                  S\\\   \\   4   4S	 jrS
rg)_StorageWriterTransforms   
This is experimental, and will likely move elsewhere in the
future.  It lives here to minimize changes while we are still
learning and gathering feedback.
N
extensionsrQ   c                 (    Uc  SU l         gUU l         g)z
If the extensions arg is None, this means the implementation
should provide whatever defaults it chooses.  An empty
sequence indicates no extensions should be used.  At this
time, the default extensions sequence is empty.
NrB   r   )r<   r   s     r?   rp   !_StorageWriterTransforms.__init__   s     !+ 2"
rL   
write_item
raw_streamc                 *    " S S[         R                  5      n[        [        [           U" U5      5      nU R
                   H  nUR                  U5      nM     U[        U R
                  5       Vs/ s H  oUR                  5       PM     sn4$ s  snf )Nc                   \    \ rS rSrS\R
                  4S jrS\4S jrS\	S\
4S jrS rS	rg
)E_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter   rawc                     Xl         g r9   r   )r<   r   s     r?   rp   N_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__   s    rL   rQ   c                     g)NTrB   ra   s    r?   	writeableO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeable   s    rL   bc                 8    U R                   R                  U5      $ r9   )r   write)r<   r   s     r?   r   K_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.write   s    xx~~a((rL   c                 X    U R                  5         U R                  R                  5         g r9   )flushr   ra   s    r?   closeK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close   s    

 rL   r   N)rC   rD   rE   rF   ioIOBaserp   r   r   r   rJ   r   r   rK   rB   rL   r?   NoCloseWriterr      s6    BII 4 )v )# )!rL   r   )	r   r   r   r   bytesr   transform_toreversedget_descriptor)r<   r   r   r   r   exs         r?   transform_save_stream._StorageWriterTransforms.transform_save_stream   sv    	!BII 	! BuI}Z'@A//B??<8L " Xdoo=VW=Vr002=VWXXWs   3Br   r9   )rC   rD   rE   rF   rG   r   r   r   rp   r#   r   r   ri   r   r   r   rH   r   rK   rB   rL   r?   r   r      sh     JN	C"8,D#EF	C		CY#Y13Y	r%y$s)#	$YrL   r   itemc                     SnU R                   c   eU R                   R                   H  nX-  nM	     U R                   R                  R                  nU[        R
                  R                  U5      -  $ Nr   )tensor_datarY   
propertiesdtyperj   _utils_element_size)r   rY   sr   s       r?   
_item_sizer     si    D'''""	 # ''--E%,,,,U333rL   binsr;   c                    U S:X  a  U/$ U Vs/ s H$  o"R                   [        R                  :X  d  M"  UPM&     nnU Vs/ s H$  o"R                   [        R                  :w  d  M"  UPM&     nn[        U 5       Vs/ s H  n/ PM     nn[        U 5       Vs/ s H  nSPM     nnUR	                  [
        SS9  [        U5       H  u  pXhU -     R                  U5        M     U HU  n[        [        U5      [        R                  " S5      S9S   n	Xi   R                  U5        Xy==   [        U5      -  ss'   MW     U$ s  snf s  snf s  snf s  snf )Nr   r   T)r   reverser   )r   r$   BYTE_IOranger   r   	enumeraters   minr   r   )
r   r;   wibytes_wtensor_wr   bucketsbucket_sizesir   s
             r?   _split_by_size_and_typer     s!   qyw!FEbWW0E0E%ErEGF"GUrgg1F1F&FUHG27+%>+Qb+G%>$T{+{!A{L+MMj$M/7#D  $ $ )L)x/B/B1/EFqIBZ^+	  N# GG%>+s!   !D=D=!E$E9EE
transformsr   datar   storage_keysafe_tensorsc                    UR                  5       nU R                  X15      u  pxUR                  [        R                  :X  aA  [        U[        R                  5      (       d   eUR                  UR                  5       5        Od[        U[        R                  5      (       d   eUR                  [        R                  " S5      :X  d   eU(       d  [        R                  " X'5        UR                  5         U(       a  [        U[        R                  5      (       a  UR                  5       U-
  n	O!UR                  5       UR!                  5       -  n	[#        U5      S:X  a  S OUn
[%        UR&                  U	[)        UUU	U
S9S9$ )Nrz   r   )r7   )indexsize_in_bytesstorage_data)tellr   r   r$   r   
isinstancer   BytesIOr   	getbufferrj   r   r   saver   r|   r   r   r(   r  r2   )r   r   r   r   r   r   r5   r   r7   r6   info_transform_descriptorss              r?   _write_itemr  '  s7    [[]F,6,L,L-)\ -///$

++++4>>+,$----{{ell51111JJt*:dBJJ77' 1 1 33
 )*a/5J  !"<	
	 	rL   create_stream
file_queueresult_queueplannerr   	use_fsyncthread_countc	                      UR                  5       u  pn[        R                  R                  5       n[	        [        US 5      nUS:X  aZ  [        R
                  R                  5       (       d  U(       a0  UR                  5       (       a  US:  a  [        UR                  US9nO[        UR                  5      nU Vs/ s H$  oR                  [        R                  :w  d  M"  UPM&     nnU H  nUR                  [        U5      U5        M      UR                  5         U Vs/ s H$  oR                  [        R                  :X  d  M"  UPM&     nn/ nU " U	S5       nU H3  nUR                  U5      nUR!                  [#        UUUUU
U5      5        M5     0 nUR%                  5        HQ  u  nnUR&                  (       d   eUR!                  [#        UUUUU
U5      5        UUUR(                  R*                  '   MS     U(       a  SSKJn  UR1                  U" U5      5        U(       a%   [2        R4                  " UR7                  5       5        UR?                  5         S S S 5        URA                  U5        GMu  s  snf s  snf ! [8        [:        4 a    [2        R<                  " 5          N]f = f! , (       d  f       NW= f! [B        RD                   a     g f = f)Nr   r   )r   wb)r	  )#
get_nowaitrj   _C_get_privateuse1_backend_namegetattrr   is_availabler   resolve_datarl   r   r$   r   r]   r   rb   rs   r  re   is_cpur  fqnsafetensors.torchr	  r   osfsyncfilenoAttributeErrorr   syncr   putqueueEmpty)r  r  r  r  r   r   r  r  r   	file_namer   write_itemscustom_backend_namecustom_device_modloaderr   r   r   r   write_resultsr   r   tensor_dictr   r	  s                            r?   _write_files_from_queuer,  W  s{   N2<2G2G2I/IK #((("H"H"J '/BD I !JJ++--).?.L.L.N.N'!+.(((;
 *(( &1U[rGG}?T?T4T[HU&


:j1:> '  "$/TKb77m>S>S3SrKGTMy$/6")J"//
;D!((#&" &'(	 #* !*0--/&FJ!==(=!((#&""&'(	 9?K
 0 0 4 45 +:  6LLk!23"1 O 0P ]+W 6 V
 UP +,@A "	"K 0/R ;; ss   B<J> >!I8#I8):J> #!I=I=J> CJ-($JJ-&J> %J*'J-)J**J--
J;7J> >KKc                   ~   \ rS rSr\\S\\\R                  4   S\S\
\R                  SS4   4S j5       5       r\S\\\R                  4   S\S\\\R                  4   4S j5       r\S\\\R                  4   S	\\\R                  4   SS4S
 j5       r\S\\\R                  4   S\\\R                  4   4S j5       r\S\\\R                  4   SS4S j5       r\\S\\\R                  4   S\4S j5       5       r\S\\\R                  4   S\4S j5       r\S\\\R                  4   SS4S j5       rSrg)r.   i  pathmoderQ   Nc                     g r9   rB   )r<   r.  r/  s      r?   r  FileSystemBase.create_stream  s     ,/rL   suffixc                     g r9   rB   r<   r.  r2  s      r?   concat_pathFileSystemBase.concat_path  s     #&rL   new_pathc                     g r9   rB   r<   r.  r7  s      r?   renameFileSystemBase.rename  s     rL   c                     g r9   rB   r<   r.  s     r?   	init_pathFileSystemBase.init_path  s    SVrL   c                     g r9   rB   r=  s     r?   mkdirFileSystemBase.mkdir  s    <?rL   checkpoint_idc                     g r9   rB   clsrC  s     r?   validate_checkpoint_id%FileSystemBase.validate_checkpoint_id  s    UXrL   c                     g r9   rB   r=  s     r?   existsFileSystemBase.exists  s    =@rL   c                     g r9   rB   r=  s     r?   rm_fileFileSystemBase.rm_file  s    >ArL   rB   )rC   rD   rE   rF   r	   r   r   rH   r  PathLiker   r   r   r  r5  r:  r>  rA  classmethodr   rG  rJ  rM  rK   rB   rL   r?   r.   r.     s   /#r{{*+/36/	299dD(	)/  / &#r{{*+&58&	sBKK	 & & #r{{*+7<S"++=M7N	  VeC$45V%R[[@P:QV V?%R[[ 01?d? ?X5bkk9I3JXtX  X@5bkk!12@t@ @AE#r{{"23AA ArL   r.   c            
       .   \ rS rSr\S\\\R                  4   S\S\	\
R                  SS4   4S j5       rS\\\R                  4   S\S\\\R                  4   4S jrS\\\R                  4   S\\\R                  4   4S	 jrS\\\R                  4   S
\\\R                  4   SS4S jrS\\\R                  4   SS4S jr\S\\\R                  4   S\4S j5       rS\\\R                  4   S\4S jrS\\\R                  4   SS4S jrSrg)r-   i  r.  r/  rQ   Nc              #      #    [        U[        5      (       d  [        U5      nUR                  U5       n[        [        R
                  U5      v   S S S 5        g ! , (       d  f       g = f7fr9   )r  r   openr   r   r   )r<   r.  r/  r   s       r?   r  FileSystem.create_stream  sD      $%%:DYYt_ryy&)) __s   2A+A	A+
A($A+r2  c                 J    [        U[        5      (       d  [        U5      nX-  $ r9   r  r   r4  s      r?   r5  FileSystem.concat_path  s"     $%%:D}rL   c                 F    [        U[        5      (       d  [        U5      nU$ r9   rV  r=  s     r?   r>  FileSystem.init_path  s    $%%:DrL   r7  c                     [        U[        5      (       d  [        U5      nUR                  [        [        U5      5        g r9   )r  r   r:  r   r9  s      r?   r:  FileSystem.rename  s-     $%%:DDx()rL   c                 d    [        U[        5      (       d  [        U5      nUR                  SSS9  g )NT)parentsexist_ok)r  r   rA  r=  s     r?   rA  FileSystem.mkdir  s(    $%%:D

4$
/rL   rC  c                     [        U[        5      (       a  gS[        U5      ;   a  g[        U5      R                   HO  nUR	                  5       (       d  M  [
        R                  " [        U5      [
        R                  5      (       d  MO    g   g)NTz://F)r  r   rH   r]  rJ  r  accessW_OK)rF  rC  ps      r?   rG  !FileSystem.validate_checkpoint_id  sb    mT**C&&m$,,AxxzzbiiA88 - rL   c                 b    [        U[        5      (       d  [        U5      nUR                  5       $ r9   )r  r   rJ  r=  s     r?   rJ  FileSystem.exists  s$    $%%:D{{}rL   c                 d    [        U[        5      (       d  [        U5      nUR                  5         g r9   )r  r   unlinkr=  s     r?   rM  FileSystem.rm_file  s!    $%%:DrL   rB   )rC   rD   rE   rF   r	   r   rH   r  rO  r   r   r   r  r5  r>  r:  rA  rP  r   rG  rJ  rM  rK   rB   rL   r?   r-   r-     s~   *#r{{*+*36*	299dD(	)* *#r{{*+58	sBKK	 eC$45 %R[[@P:Q 
*#r{{*+*7<S"++=M7N*	*0%R[[ 01 0d 0
 5bkk9I3J t  5bkk!12 t 
E#r{{"23  rL   r-   c                   H  ^  \ rS rSrSr      S$S\\\R                  4   S\	S\	S\
S\
S	\	S
\\\      S\S\SS4U 4S jjjrS%S\\\R                  S4   SS4S jjrS\	SS4S jrS\S\4S jrS\\   S\\   4S jrS\S\S\\\      4S jr S&S\S\R6                  S\	S\\\      4S jjrS\S\\\      SS4S jrS\\   4S jr \!S\\\R                  4   4S  j5       r"\!S\\\R                  4   4S! j5       r#\$S\\\R                  4   S\	4S" j5       r%S#r&U =r'$ )'_FileSystemWriteri  E  
Basic implementation of StorageWriter using file IO.

This implementation makes the following assumptions and simplifications:

* The checkpoint path is an empty or non-existing directory.
* File creation is atomic

The checkpoint consist of one file per write request plus
a `.metadata` file with the serialized metadata.

Nr.  single_file_per_rank
sync_filesr  per_thread_copy_ahead	overwrite_extensionsargskwargsrQ   c                    > [         T
U ]  5         [        5       U l        U R                  R	                  U5      U l        X l        X0l        X@l        XPl	        [        5       U l        X`l        [        U5      U l        g)a  
Initialize the writer pointing to `path`.

Args:
    path: directory where the checkpoint will be written to.
    single_file_per_rank: Produce one file per rank instead of one file per tensor/blob. Default to True.
    sync_files : force files to be synced to permanent storage. Default to True.
    thread_count: Number of IO threads to use to write. Default to 1.
    per_thread_copy_ahead: How many bytes to copy from the GPU ahead of saving then. Default 10Mb.
    overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.
    _extensions: Extensions to apply to output streams (EXPERIMENTAL)

N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
N)superrp   r-   fsr>  r.  rm  rn  r  ro  rU   save_idrp  r   r   )r<   r.  rm  rn  r  ro  rp  rq  rr  rs  	__class__s             r?   rp   _FileSystemWriter.__init__  sa    4 	,GG%%d+	$8!$(%:"%'"2;?rL   rC  c                 p    U(       a   U R                   R                  U5      U l        [        5       U l        g r9   )rv  r>  r.  rU   rw  r<   rC  s     r?   reset_FileSystemWriter.resetD  s%    ))-8DI%'rL   is_coordinatorc                     g r9   rB   )r<   r~  s     r?   set_up_storage_writer'_FileSystemWriter.set_up_storage_writerI  rw   rL   planc                 b   U R                   R                  U R                  5        U R                   R                  U R                  5      (       a_  U R
                  (       a4  [        R                  " SU R                   SU R
                  < S35        U$ [        SU R
                  < S35      eU$ )Nz#Detected an existing checkpoint in z#, overwriting since self.overwrite=z. Past version 2.5 of PyTorch, `overwrite` will default to False. Set this variable to True to maintain this functionality or False to raise when an existing checkpoint is found.z-Checkpoint already exists and self.overwrite=.)	rv  rA  r.  rJ  metadata_pathrp  warningswarnr   r<   r  s     r?   prepare_local_plan$_FileSystemWriter.prepare_local_planL  s    dii 77>>$,,--~~9$:L:L9MMqbfbpbpar sk k  #%SDNNCTTU#VWWrL   plansc                     [        U5       VVs/ s H'  u  p#[        R                  " U[        SU S35      S9PM)     nnnU$ s  snnf )N__r   r  )r   dataclassesreplacerN   )r<   r  r   r  	new_planss        r?   prepare_global_plan%_FileSystemWriter.prepare_global_planZ  sR     %U+
+ >Bqc)3LM+ 	 
 	
s   .Ar  c                   ^	^
 UR                   m
Sm	U	U
4S jn[        R                  " 5       nU R                  (       ah  [	        U R
                  UR                  5       HC  nU" 5       nU R                  R                  U R                  U5      nUR                  XvU45        ME     OTUR                   HD  nU" 5       nU R                  R                  U R                  U5      nUR                  XvU/45        MF     U R                  X$5      $ )Nr   c                  >   > TR                    T [         3n TS-  mU $ r   )rP   DEFAULT_SUFFIX)r%  
file_countstorage_plans    r?   gen_file._FileSystemWriter.write_data.<locals>.gen_filei  s,    '../
|N;KLI!OJrL   )r  r#  Queuerm  r   r  r;   rv  r5  r.  r"  _write_data)r<   r  r  r  r  bucketr%  r.  r   r  r  s            @@r?   
write_data_FileSystemWriter.write_dataa  s    
 (,'8'8
	 #(++-
$$1$2C2CTZZP$J	ww**499i@89 Q
 

$J	ww**499i@$89 #
 44rL   r  r   c                    [         R                  " 5       n/ n[        SU R                  5       H  n[        R
                  " [        U R                  R                  UUUU R                  U R                  U R                  U R                  U4	S9nUR                  5         UR                  U5        M     [        U R                  R                  UUUU R                  U R                  U R                  U R                  US9	  U H  nUR                  5         M     / n  XR                  5       -  nM  ! [         R                    a     [#        5       n	U	R%                  U5        U	s $ f = f)Nr   )targetrr  )	r  r  r  r  r   r   r  r  r   )r#  r  r   r  	threadingThreadr,  rv  r  r   ro  rn  startrs   joinr  r$  r*   
set_result)
r<   r  r  r   r  threadsr   tresfuts
             r?   r  _FileSystemWriter._write_data}  s;    %*KKMq$++,A  .GG)) OO..OO%% 
A GGINN1! -$ 	 ''//!% $ : :oo**%
	
 AFFH  	..00 {{ 	-3XCNN3J	s   D2 21E&%E&metadataresultsc                 ~   0 nU H9  nUR                  U Vs0 s H  oUR                  UR                  _M     sn5        M;     X1l        U R                  5       Ul        [	        [
        U R                  R                  U R                  [         S35      5      nU R                  R                  US5       n[        R                  " X5        U R                  (       a%   [        R                  " UR!                  5       5        S S S 5        U R                  R)                  U R*                  5      (       a%  U R                  R-                  U R*                  5        U R                  R/                  X`R*                  5        g s  snf ! ["        [$        4 a    [        R&                  " 5          Nf = f! , (       d  f       N= f)Nz.tmpr  )updater  r  storage_metar   r   rv  r5  r.  r0   r  pickledumprn  r  r  r  r   r   r!  rJ  r  rM  r:  )r<   r  r  
storage_mdwr_listwrtmp_pathmetadata_files           r?   finish_FileSystemWriter.finish  s6   
G7K7Rxx87KL  * $ 1 1 3dgg11$))~T=RSTWW""8T2mKK0HH]1134	 3 77>>$,,--GGOOD../x!3!34% L '(<= GGI 32s/    E>
4(F.$F%F+(F.*F++F..
F<c                 >    [        U R                  U R                  S9$ )N)rC  rw  )r   rC  rw  ra   s    r?   r  _FileSystemWriter.storage_meta  s    ););T\\RRrL   c                 r    [        [        U R                  R                  U R                  [
        5      5      $ r9   )r   r   rv  r5  r.  r0   ra   s    r?   r  _FileSystemWriter.metadata_path  s$    D$''--diiFGGrL   c                     U R                   $ )zD
return the checkpoint_id that will be used to save the checkpoint.
r.  ra   s    r?   rC  _FileSystemWriter.checkpoint_id      
 yyrL   c                 ,    [         R                  U5      $ r9   r-   rG  rE  s     r?   rG  (_FileSystemWriter.validate_checkpoint_id      00??rL   )	rv  rp  r.  ro  rw  rm  rn  r  r   )TTr   逖 TNr9   F)(rC   rD   rE   rF   rG   r   rH   r  rO  r   rJ   r   r   r   r   rp   r|  r  r!   r  r   r  r"   r*   r(   r  r#  r  r  r   r  r   r  r   r  rC  rP  rG  rK   __classcell__rx  s   @r?   rk  rk    s=     &*%/DH#@C$%#@ ##@ 	#@
 #@  ##@ #@ h'?@A#@ #@ #@ 
#@ #@J(5bkk4)?#@ (D (
D T x H h DN 55 5 
[!	"	5@ #	11 KK1 	1
 
[!	"1f5x 5$tK7H2I 5d 5.Sh{3 S HuS"++%56 H H uS"++%56   @5bkk9I3J @t @ @rL   rk  c            	       `    \ rS rSrSrSS\\   SS4S jjrS\S\	\
   S	\\   S\\   4S
 jrSrg)_StorageReaderTransformsi  r   Nextension_registryrQ   c                 8    Uc  [        5       U l        g UU l        g r9   )r   r  )r<   r  s     r?   rp   !_StorageReaderTransforms.__init__  s!    #5#= 	CU 	rL   	read_itemr7   r   c                     U R                   R                  U5      nUnU H+  n[        U[        5      (       d  M  UR	                  U5      nM-     U$ r9   )r  from_descriptor_listr  r   transform_from)r<   r  r7   r   r   r  r   s          r?   transform_load_stream._StorageReaderTransforms.transform_load_stream  sP     ,,AABWX
#B"677!#!2!2>!B  rL   )r  r9   )rC   rD   rE   rF   rG   r   r   rp   r    r   rH   r   r   r  rK   rB   rL   r?   r  r    sX    
84E+F 
RV 

  (} uI	
 
ErL   r  c                     ^  \ rS rSr SS\\\R                  4   S\\	   SS4U 4S jjjr
S\S\\   4S jrSS	\\\R                  S4   SS4S
 jjrS\S\S\S   4S jrS\4S jrS\S\SS4S jrS\S\4S jrS\\   S\\   4S jr\S\\\R                  4   4S j5       r\S	\\\R                  4   S\4S j5       rSrU =r $ )r,   i  Nr.  _extension_registryrQ   c                    > [         TU ]  5         [        5       U l        U R                  R	                  U5      U l        0 U l        [        5       U l        [        U5      U l
        g r9   )ru  rp   r-   rv  r>  r.  r  rU   load_idr  r   )r<   r.  r  rx  s      r?   rp   FileSystemReader.__init__  sN    
 	,GG%%d+	,.%'23FGrL   sinfoc                 l    [        [        [           [        XR                  UR
                  5      5      $ r9   )r   r   r   r)   r5   r6   )r<   filer  s      r?   _slice_fileFileSystemReader._slice_file  s#    BuI0||U\\RSSrL   rC  c                 ~    0 U l         U(       a   U R                  R                  U5      U l        [	        5       U l        g r9   )r  rv  r>  r.  rU   r  r{  s     r?   r|  FileSystemReader.reset  s-    ))-8DI%'rL   r  r  c                    0 nUR                    HI  nU R                  UR                     nUR                  nUR	                  U/ 5      R                  U5        MK     UR                  5        GHJ  u  pxU R                  R                  U R                  U5      n	U R                  R                  U	S5       n
U GH  nU R                  UR                     nU R                  X5      nU R                  R                  UUR                  =(       d    SU5      nUR                  [        R                   :X  aI  ["        R$                  " UR'                  S5      5      nUR)                  S5        UR+                  X5        M  UR-                  5       (       a  UnO6["        R$                  " UR'                  S5      5      nUR)                  S5        [/        [0        [2        R4                  " USSS95      n[7        UUR8                  UR:                  5      nUR=                  U5      R?                  5       nURA                  5       URA                  5       :X  d6   SUR                   S	URA                  5        S
URA                  5        35       eURC                  U5        URE                  UU5        GM     S S S 5        GMM     [G        5       nURI                  S 5        U$ ! , (       d  f       GM|  = f)NrbrB   r   rz   T)map_locationweights_onlyzreq z mismatch sizes z vs )%r;   r  storage_indexr4   
setdefaultrs   rv  r5  r.  r  r  r   r  r7   r   r   r   r   r  readseek
load_bytesseekabler   r   rj   loadr   storage_offsetslengthsresolve_tensorry   rY   copy_commit_tensorr*   r  )r<   r  r  per_filer  item_mdr.  r4   reqsr7  r   req
file_slicer  
read_bytesr  r   target_tensorr  s                      r?   	read_dataFileSystemReader.read_data
  ss   .0I$($5$5i6M6M$NG((Db)00; $
 $,>>#3Mww**499mDH&&x6&C"//0A0ABG!%!1!1&!BJ%)__%J%J  55;"&N xx<#7#77%'ZZ0C0CB0G%H
"***3;)2244'5H (*zz.2E2Eb2I'JH$MM!,!%"!JJ (-2-1" "8"C$7$7" )0(>(>s(C(J(J(L,113v{{}D "3#4#4"55EmFXFXFZE[[_`f`k`k`m_noD &++F3--c=AS   76 $4^ ht
_ 76s   4G:K
K(	c                 Z   U R                   R                  U R                  S5      nU R                   R                  US5       n[        R
                  " U5      nS S S 5        [        WSS 5      c  [        5       Ul        U R                  UR                  l	        U$ ! , (       d  f       NH= f)Nr/   r  r  )
rv  r5  r.  r  r  r  r  r   r  r  )r<   r.  r  r  s       r?   read_metadataFileSystemReader.read_metadataF  s    ww""499k:WW""4.-{{=1H / 8^T2:$/MH!(,% /.s   B
B*r  r~  c                 D    UR                   U l         U R                   c   eg r9   r  )r<   r  r~  s      r?   set_up_storage_reader&FileSystemReader.set_up_storage_readerQ  s"    $11  ,,,rL   c                     U$ r9   rB   r  s     r?   r  #FileSystemReader.prepare_local_planU  s    rL   r  c                     U$ r9   rB   )r<   r  s     r?   r  $FileSystemReader.prepare_global_planX  s    rL   c                     U R                   $ )zD
return the checkpoint_id that will be used to load the checkpoint.
r  ra   s    r?   rC  FileSystemReader.checkpoint_id[  r  rL   c                 ,    [         R                  U5      $ r9   r  rE  s     r?   rG  'FileSystemReader.validate_checkpoint_idb  r  rL   )rv  r  r.  r  r   r9   )!rC   rD   rE   rF   r   rH   r  rO  r   r   rp   r2   r   r   r  r|  r   r   r*   r  r   r  r   r  r  r   r  r   rC  rP  rG  rK   r  r  s   @r?   r,   r,     sV    <@
HC$%
H &&78
H 
	
H 
HT| T5	 T(5bkk4)?#@ (D (9h 9 9 9x	x 	-h - -QU -x H h DN  uS"++%56   @5bkk9I3J @t @ @rL   r,   c                      ^  \ rS rSrSr       SS\\\R                  4   S\	S\	S\
S\
S	\	S
\	S\\\      SS4S jjrS\S\4U 4S jjrSrU =r$ )r+   ig  rl  Nr.  rm  rn  r  ro  cache_staged_state_dictrp  rq  rQ   c	                 b    [         R                  U UUUUUUUS9  [        R                  " U US9  g)a+  
Initialize the writer pointing to `path`.

Args:
    path: directory where the checkpoint will be written to.
    single_file_per_rank: Produce one file per rank instead of one file per tensor/blob. Default to True.
    sync_files : force files to be synced to permanent storage. Default to True.
    thread_count: Number of IO threads to use to write. Default to 1.
    per_thread_copy_ahead: How many bytes to copy from the GPU ahead of saving then. Default 10Mb.
    cache_staged_state_dict: Whether to cache the staged state_dict. This option decreases staging latency
        at the cost of increases memory usage. Additionally, if this parameter is set to True, it's the expectation
        that the stager is maintained and re-used for multiple dcp.async_save calls. Default to False.
    overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.
    _extensions: Extensions to apply to output streams (EXPERIMENTAL)

N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
)r.  rm  rn  r  ro  rp  rq  )r
  N)rk  rp   r%   )	r<   r.  rm  rn  r  ro  r
  rp  rq  s	            r?   rp   FileSystemWriter.__init__u  sE    8 	""!5!%"7# 	# 		
 	$$$;	
rL   
state_dictc                 0   > SU l         [        TU ]	  U5      $ )zOverride of AsyncStager.stager   )ro  ru  stage)r<   r  rx  s     r?   r  FileSystemWriter.stage  s     &'"w}Z((rL   )ro  )TTr   r  FTN)rC   rD   rE   rF   rG   r   rH   r  rO  r   rJ   r   r   r   rp   r   r  rK   r  r  s   @r?   r+   r+   g  s      &*%/(-DH)
C$%)
 #)
 	)

 )
  #)
 "&)
 )
 h'?@A)
 
)
V) )O ) )rL   r+   r  )^r   r  r   r   r  r  r#  r  rS   r  abcr   r   collections.abcr   r   r   r   
contextlibr	   r
   r   pathlibr   typingr   r   r   r   r   r   typing_extensionsr   rj   r   torch._utilsr   r   torch.distributed._shard._utilsr   'torch.distributed.checkpoint._extensionr   r   %torch.distributed.checkpoint.metadatar   r   r   $torch.distributed.checkpoint.plannerr   r   r   r    r!   r"   r#   r$   $torch.distributed.checkpoint.stagingr%   $torch.distributed.checkpoint.storager&   r'   r(   "torch.distributed.checkpoint.utilsr)   torch.futuresr*   __all__r0   rH   rI   r2   rN   r  rU   rW   rl   r   r   rJ   r   r   r   r   r  r   r  r  r,  r.   r-   rk  r  r,   r+   rB   rL   r?   <module>r!     s     	  	      # C C % ! #  ; ; %   G B Y X	 	 	 E 
 A   Sc  	I 	I 	I     C } .W"M W"t0Y 0Yf4Y 43 4# d9o $tIBW < -(-II- 

ELL(
)- 	-
 - - -`YYY ++Y 	Y
 )Y Y Y Y Y 
YxBS BD9 9xF@ F@R 4p@} p@f>)(*= >)rL   