+
    &j                     R  a  R= ta0 t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHtHt ^ RIHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHtH t H!t! ^ R
I"H#t# ^ RI$t$^ RI$H%t% ^ RI&H't'H(t( ^ RI)H*t* ^ RI+H,t,H-t- ^ RI.H/t/H0t0H1t1H2t2H3t3 ^ RI4H5t5H6t6H7t7 ^ RI8H9t9H:t:H;t;H<t<H=t=H>t>H?t?H@t@ ^ RIAHBtB ^ RICHDtDHEtEHFtF ^ RIGHHtH ^ RIIHJtJ . R>OtKRtL] ^ k RtM] ^k ] ! R R4      4       tN] ! R R 4      4       tO ! R! R]4      tPR"tQR# R$ ltR ! R% R&]4      tS ! R' R(]S4      tT ! R) R*]S4      tU ! R+ R,4      tVR- R. ltWR/ R0 ltXR1 R2 ltYR3 R4 ltZ ! R5 R]4      t[ ! R6 R][4      t\ ! R7 R8]E4      t] ! R9 R:4      t^ ! R; R]D4      t_ ! R< R]]]B4      t`R# )?    N)ABCabstractmethod)Callable	GeneratorIterableIteratorSequence)contextmanager)	dataclass)Enum)UnsupportedOperation)Path)AnycastFinalIO)Buffer)Tensor)_get_available_device_type_get_device_module)narrow_tensor_by_index)ExtensionRegistryStreamTransformExtension)CUSTOM_METADATA_KEYDCP_VERSION_KEY
FORMAT_KEYFORMAT_VALUEHF_DCP_VERSION)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SerializationFormatz	.metadataz1.0.0c                   :   a  ] tR t^Jt o RtRtR tV 3R ltRtV t	R# )_StorageInfoz#This is the per entry storage info.Nc                v    V P                   P                  4        UUu/ uF  w  rVf   K  WbK  	  upp# u uppi N)__dict__items)selfkvs   &  /Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/torch/distributed/checkpoint/filesystem.py__getstate___StorageInfo.__getstate__S   s1    !%!4!4!6H!6!!6HHHs   55c                h   < V ^8  d   Qh/ S[ ;R&   S[;R&   S[;R&   S[S[ ,          R,          ;R&   # )   relative_pathoffsetlengthNtransform_descriptors)strintr	   )format__classdict__s   "r>   __annotate___StorageInfo.__annotate__J   s@      	 
 K  K  $C=4/6      )
__name__
__module____qualname____firstlineno____doc__rF   r?   __annotate_func____static_attributes____classdictcell__rJ   s   @r>   r6   r6   J   s     -
 37I  rM   r6   c                   ,   a  ] tR t^Wt o V 3R ltRtV tR# )_StoragePrefixc                &   < V ^8  d   Qh/ S[ ;R&   # )rB   prefixrG   )rI   rJ   s   "r>   rK   _StoragePrefix.__annotate__W   s     K rM   rN   N)rO   rP   rQ   rR   rT   rU   rV   rW   s   @r>   rY   rY   W   s      rM   rY   c                       ] tR t^\tRtRtRtR# )r4   
torch_savesafetensorsrN   N)rO   rP   rQ   rR   
TORCH_SAVESAFETENSORSrU   rN   rM   r>   r4   r4   \   s    JKrM   z.distcpc                $    V ^8  d   QhR\         /# rB   returnr\   )rI   s   "r>   rK   rK   d   s       rM   c                  >    \        \        P                  ! 4       4      # r8   )rG   uuiduuid4rN   rM   r>   _generate_uuidri   d   s    tzz|rM   c                   t   a  ] tR t^ht o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )	_TensorLoaderc                *   < V ^8  d   QhRS[ RS[RR/# rB   sizeobjre   NrH   object)rI   rJ   s   "r>   rK   _TensorLoader.__annotate__j   s"       & T rM   c                    R # r8   rN   r;   rn   ro   s   &&&r>   add_TensorLoader.addi       rM   c                   < V ^8  d   QhRR/# rB   re   NrN   )rI   rJ   s   "r>   rK   rr   n         t rM   c                    R # r8   rN   r;   s   &r>   start_loading_TensorLoader.start_loadingm   rw   rM   c                Z   < V ^8  d   QhRS[ S[S[P                  S[3,          ,          /# rd   r   tupletorchr   rq   )rI   rJ   s   "r>   rK   rr   r   s'      u||V';!<= rM   c                    R # r8   rN   r|   s   &r>   values_TensorLoader.valuesq   rw   rM   rN   N)
rO   rP   rQ   rR   r   ru   r}   r   rU   rV   rW   s   @r>   rk   rk   h   s?          rM   rk   c                   h   a  ] tR t^vt o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltR	tV t	R
# )_SerialCpuLoaderc                $   < V ^8  d   QhRS[ RR/# )rB   resolve_funre   N)r   )rI   rJ   s   "r>   rK   _SerialCpuLoader.__annotate__w   s     2 2H 2 2rM   c                     Wn         . V n        R # r8   )r   r:   )r;   r   s   &&r>   __init___SerialCpuLoader.__init__w   s    &/1
rM   c                *   < V ^8  d   QhRS[ RS[RR/# rm   rp   )rI   rJ   s   "r>   rK   r   {   s"     ' ' '& 'T 'rM   c                >    V P                   P                  W34       R # r8   )r:   appendrt   s   &&&r>   ru   _SerialCpuLoader.add{   s    

4+&rM   c                   < V ^8  d   QhRR/# ry   rN   )rI   rJ   s   "r>   rK   r   ~   rz   rM   c                    R # r8   rN   r|   s   &r>   r}   _SerialCpuLoader.start_loading~   s    rM   c                Z   < V ^8  d   QhRS[ S[S[P                  S[3,          ,          /# rd   r   )rI   rJ   s   "r>   rK   r      s'     
 
u||V';!<= 
rM   c              #    "   V P                    Fw  w  rV P                  V4      P                  4       pVP                  4       pVP	                  4       P                  4       VP                  8w  d   VP                  4       pVV3x  Ky  	  R # 5ir8   )r:   r   detachcpuuntyped_storagern   nbytescloner;   _ro   tensors   &   r>   r   _SerialCpuLoader.values   sr     jjFA%%c*113FZZ\F%%',,.&--?  !s   B
B)r:   r   N)
rO   rP   rQ   rR   r   ru   r}   r   rU   rV   rW   s   @r>   r   r   v   s-     2 2' ' 
 
rM   r   c                      a  ] tR t^t o RV 3R lR llt]V 3R lR l4       tV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltRtV tR# )_OverlappingCpuLoaderNc                R   < V ^8  d   QhRS[ RS[P                  R,          RS[RR/# )rB   r   streamNinflight_threshholdre   )r   r   StreamrH   )rI   rJ   s   "r>   rK   "_OverlappingCpuLoader.__annotate__   sB     I II t#I !	I
 
IrM   c                V   Wn         . V n        W0n        ^ V n        \        P
                  ! 4       V n        ^ V n        RV n        V'       d   VP                  M	\        4       V n	        \        V P                  4      V n        \        \        P                  P                   T;'       g    V P                  P#                  4       4      V n        V P$                  V P                  P#                  4       8w  d6   V P$                  P'                  V P                  P#                  4       4       R# R# )r   FN)r   r:   r   in_flight_datacollectionsdequecurrent_itemsidxstarteddevice_typer   r   device_moduler   r   cudar   current_streamr   wait_stream)r;   r   r   r   s   &&&&r>   r   _OverlappingCpuLoader.__init__   s     '/1
#6 0;0A0A0C"(F.H.J 	 00@0@AJJvLL););)J)J)L
 ;;$,,;;==KK##D$6$6$E$E$GH >rM   c                    < V ^8  d   QhRS[ /# rd   bool)rI   rJ   s   "r>   rK   r      s     + +t +rM   c                F    V P                   \        V P                  4      8  # r8   )r   lenr:   r|   s   &r>   _done_OverlappingCpuLoader._done   s    xx3tzz?**rM   c                Z   < V ^8  d   QhRS[ S[S[P                  S[3,          ,          /# rd   )listr   r   r   rq   )rI   rJ   s   "r>   rK   r      s'      U5<<#789 rM   c                   . pV P                   V P                  8  d   V P                  P                  4        V P                   V P                  8  dx   V P                  P                  4       pV ;P                   V^ ,          P                  4       V^ ,          P                  4       ,          ,          un         VP                  V4       K  V# )r   )	r   r   r   synchronizer   popleftnumelelement_sizer   )r;   drainedvals   &  r>   _drain_OverlappingCpuLoader._drain   s    $":"::KK##%!!T%=%==$$,,.C3q6<<>CF4G4G4I#IINN3rM   c                   < V ^8  d   QhRR/# ry   rN   )rI   rJ   s   "r>   rK   r      s     N N NrM   c                   V P                   P                  V P                  4      ;_uu_ 4        V P                  '       Eg   V P                  V P                  8  Edd   V P
                  V P                  ,          w  rV ;P                  ^,          un        V P                  V4      P                  4       pVP                  P                  V P                  8X  d   VP                  RRR7      pMwVP                  \        P                  ! R4      8X  dS   VP                  4       P                  4       VP!                  4       VP"                  ,          8w  d   VP%                  4       pV P&                  P)                  VV34       V ;P                  VP!                  4       VP+                  4       ,          ,          un        EK  RRR4       R#   + '       g   i     R# ; i)   r   T)devicenon_blockingN)r   r   r   r   r   r:   r   r   r   r   typer   tor   r   rn   r   itemsizer   r   r   r   r   s   &   r>   _refill_OverlappingCpuLoader._refill   sC   &&t{{3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##+ 4333s   GE?GG	c                Z   < V ^8  d   QhRS[ S[S[P                  S[3,          ,          /# rd   )r   r   r   r   rq   )rI   rJ   s   "r>   rK   r      s'     " "%f(<"=> "rM   c                    V P                   '       g   \        R 4      h\        V P                  4      ^ 8  d   V P                  P                  4        V P                  # )z._finish called before all items were processed)r   AssertionErrorr   r   r   r   r|   s   &r>   _finish_OverlappingCpuLoader._finish   sF    zzz !QRRt!!"Q&KK##%!!!rM   c                *   < V ^8  d   QhRS[ RS[RR/# rm   rp   )rI   rJ   s   "r>   rK   r      s"     ' ' '& 'T 'rM   c                x    V P                   '       d   \        R 4      hV P                  P                  W34       R# )z&cannot add items after loading startedN)r   RuntimeErrorr:   r   rt   s   &&&r>   ru   _OverlappingCpuLoader.add   s+    <<<GHH

4+&rM   c                   < V ^8  d   QhRR/# ry   rN   )rI   rJ   s   "r>   rK   r      s      t rM   c                    V P                   '       d   R # RV n         V P                  P                  \        P                  ! ^ 4      R7       V P                  4        R # )NTkey)r   r:   sortoperator
itemgetterr   r|   s   &r>   r}   #_OverlappingCpuLoader.start_loading   s;    <<<

H//23rM   c                Z   < V ^8  d   QhRS[ S[S[P                  S[3,          ,          /# rd   r   )rI   rJ   s   "r>   rK   r      s'     " "u||V';!<= "rM   c              #     "   V P                  4        V P                  '       g-   V P                  4       pV P                  4        T R j  xL
  K>  V P	                  4        R j  xL
  R #  L  L5ir8   )r}   r   r   r   r   )r;   r   s   & r>   r   _OverlappingCpuLoader.values   sN     ***kkmGLLN<<>!! !s(   "A/%A/
A+A/$A-%A/-A/)
r   r   r   r   r   r   r:   r   r   r   )Ni@B )rO   rP   rQ   rR   r   propertyr   r   r   r   ru   r}   r   rU   rV   rW   s   @r>   r   r      sc     I I. + + N N0" "' '
 " "rM   r   c                   L   a  ] tR t^t o RtRV 3R lR lltV 3R lR ltRtV tR# )	_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.
Nc                B   < V ^8  d   QhRS[ S[,          R,          RR/# )rB   
extensionsNre   )r	   r   )rI   rJ   s   "r>   rK   %_StorageWriterTransforms.__annotate__   s,     	C 	C"#;<tC	C		CrM   c                .    Vf
   RV n         R# TV n         R# )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.
NrN   r   )r;   r   s   &&r>   r   !_StorageWriterTransforms.__init__   s     !+ 2"
rM   c          	      v   < V ^8  d   QhRS[ RS[P                  RS[S[S[,          S[S[,          3,          /# )rB   
write_item
raw_streamre   )r(   ioIOBaser   r   bytesr   rG   )rI   rJ   s   "r>   rK   r      s@     Y Y#Y13Y	r%y$s)#	$YrM   c                0    ! R  R\         P                  4      p\        \        \        ,          V! V4      4      pV P
                   F  pVP                  V4      pK  	  T\        V P
                  4       Uu. uF  qUP                  4       NK  	  up3# u upi )c                   \   a  ] tR tRt o V 3R lR ltV 3R lR ltV 3R lR ltR tR	tV t	R
# )E_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriteri  c                4   < V ^8  d   QhRS[ P                  /# )rB   raw)r   r   )rI   rJ   s   "r>   rK   R_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__annotate__  s      BII rM   c                    Wn         R # r8   r   )r;   r   s   &&r>   r   N_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__  s    rM   c                    < V ^8  d   QhRS[ /# rd   r   )rI   rJ   s   "r>   rK   r   	  s      4 rM   c                    R # )TrN   r|   s   &r>   	writeableO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeable	  s    rM   c                &   < V ^8  d   QhRS[ RS[/# )rB   bre   )r   rH   )rI   rJ   s   "r>   rK   r     s     ) )v )# )rM   c                8    V P                   P                  V4      # r8   )r   write)r;   r  s   &&r>   r  K_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.write  s    xx~~a((rM   c                Z    V P                  4        V P                  P                  4        R # r8   )flushr   r|   s   &r>   closeK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close  s    

 rM   r   N)
rO   rP   rQ   rR   r   r   r  r  rU   rV   rW   s   @r>   NoCloseWriterr     s-       ) )! !rM   r
  )	r   r   r   r   r   r   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   7Br   r8   )	rO   rP   rQ   rR   rS   r   r  rU   rV   rW   s   @r>   r   r      s"     	C 	CY YrM   r   c                0    V ^8  d   QhR\         R\        /# )rB   itemre   )r(   rH   )rI   s   "r>   rK   rK     s     	4 	4Y 	43 	4rM   c                    ^pV P                   f   \        R4      hV P                   P                   F  pW,          pK  	  V P                   P                  P                  pV\
        P                  P                  V4      ,          # )r   z&WriteItem tensor_data must not be None)tensor_datar   rn   
propertiesdtyper   _utils_element_size)r  rn   sr  s   &   r>   
_item_sizer    so    DEFF""	 # ''--E%,,,,U333rM   c                ~    V ^8  d   QhR\         R\        \        ,          R\        \        \        ,          ,          /# )rB   binsr:   re   )rH   r   r(   )rI   s   "r>   rK   rK   (  s.      # d9o $tIBW rM   c                    V ^8X  d   V.# V Uu. uF%  q"P                   \        P                  8X  g   K#  VNK'  	  ppV Uu. uF%  q"P                   \        P                  8w  g   K#  VNK'  	  pp\        V 4       Uu. uF  p. NK  	  pp\        V 4       Uu. uF  p^ NK  	  ppVP	                  \
        RR7       \        V4       F#  w  rWhV ,          ,          P                  V4       K%  	  V Fh  p\        \        V4      \        P                  ! ^4      R7      ^ ,          p	Wi,          P                  V4       Wy;;,          \        V4      ,          uu&   Kj  	  V# u upi u upi u upi u upi )r   T)r   reverser   )r   r)   BYTE_IOranger   r  	enumerater   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%ErrEG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"    EE  E%E:E$E)c                    V ^8  d   QhR\         R\        P                  R\        P                  \        P
                  ,          R\        R\        R\        R\        /# )rB   
transformsr   datar   storage_keyserialization_formatre   )
r   r   r   BytesIOr   r   r(   rG   r4   r-   )rI   s   "r>   rK   rK   @  s_     4 4(4II4 **u||
#4 	4
 4 .4 4rM   c                    VP                  4       pV P                  W14      w  rxVP                  \        P                  8X  dL   \        V\        P                  4      '       g   \        R 4      hVP                  VP                  4       4       M\        V\        P                  4      '       g   \        R4      hVP                  \        P                  ! R4      8w  d   \        R4      hV\        P                  8X  d   \        P                   ! W'4       VP#                  4        V\        P                  8X  g!   \        V\        P                  4      '       d   VP                  4       V,
          p	M%VP%                  4       VP'                  4       ,          p	\)        V4      ^ 8X  d   RMTp
\+        VP,                  V	\/        VVV	V
R7      R7      # )z/Data must be io.BytesIO for BYTE_IO write itemsz5Data must be torch.Tensor for non-BYTE_IO write itemsr   zTensor must be on CPU deviceN)rF   )indexsize_in_bytesstorage_data)tellr  r   r)   r  
isinstancer   r/  r   r  	getbufferr   r   r   r4   ra   saver  r   r   r   r-   r1  r6   )r+  r   r,  r   r-  r.  rD   r  rF   rE   info_transform_descriptorss   &&&&&&     r>   _write_itemr9  @  sp    [[]F,6,L,L-)\ -///$

++ !RSS4>>+,$-- G  ;;%,,u-- !?@@#6#A#AAJJt*2===bjjB B ' 1 1 33
 )*a/5J  !"<	
	 	rM   c                    V ^8  d   QhR\         R\        P                  R\        P                  R\        R\        R\
        R\        R\
        R	\        R
R/
# )rB   create_stream
file_queueresult_queueplannerr+  r   	use_fsyncthread_countr.  re   N)r   queueQueuer'   r   rH   r   r4   )rI   s   "r>   rK   rK   w  s     g ggg ++g 	g
 )g g g g .g 
grM   c	                      VP                  4       w  rp\        P                  P                  4       p\	        \        VR4      pV^8X  db   \        P
                  P                  4       '       g   V'       d6   VP                  4       '       d    V^ 8  d   \        VP                  VR7      pM\        VP                  4      pV Uu. uF%  qP                  \        P                  8w  g   K#  VNK'  	  ppV F  pVP                  \        V4      V4       K   	  VP                  4        V Uu. uF%  qP                  \        P                  8X  g   K#  VNK'  	  pp. pV ! V	R4      ;_uu_ 4       pV F3  pVP                  V4      pVP!                  \#        VVVVV
V4      4       K5  	  / p/ pVP%                  4        F  w  ppVP&                  '       g   \)        R4      hVP!                  \#        VVVVV
V4      4       VVVP*                  P,                  &   RVP.                  P0                  P2                  /VVP*                  P,                  &   K  	  V\4        P6                  8X  dW   ^ RIHp VP=                  V! V\>        \@        PB                  ! V4      \D        \G        \H        4      \J        \L        /R7      4       V'       d&    \N        PP                  ! VPS                  4       4       VP[                  4        RRR4       VP]                  V4       EK  u upi u upi   \T        \V        3 d    \N        PX                  ! 4         L^i ; i  + '       g   i     LZ; i  \^        P`                   d     R# i ; i)TN)r   wbzTensor must be on CPUsaved_offsets)r7  )metadata)1
get_nowaitr   _C_get_privateuse1_backend_namegetattrr   is_availabler   resolve_datar   r   r)   r  ru   r  r}   r   r9  r   is_cpur   r1  fqnr  chunkoffsetsr4   rb   safetensors.torchr7  r  r   jsondumpsr   rG   r   r   r   osfsyncfilenoAttributeErrorr   syncr  putrA  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_dictmetadata_dictr   r7  s   &&&&&&&&&                 r>   _write_files_from_queuerc  w  s   \2<2G2G2I/IK #((("H"H"J '/BD I !JJ++--).?.L.L.N.N'!+.(((;
 *(( &1U[rGG}?T?T4T[HU&


:j1:> '  "$/TKb77m>S>S3SrrKGTMy$//6")J"//
;D!((#&" &'0	 #* ! "*0--/&FJ!===,-DEE!((#&""&'0	 9?K
 0 0 4 45')?)?)E)E)M)M;M*"2"2"6"67 +:$ (+>+J+JJ6LL' 3TZZ5N /^1D *L&	 "1 k 0l ]+} V
 Ul +,@A "	"g 0/n ;; s   A-M 0M 8M 8M  L+L1:M + LLM +EM$L)M9&M &MMMMM	M M76M7c                     a  ] tR tRt o ]]V 3R lR l4       4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR	 l4       t	]V 3R
 lR l4       t
]]V 3R lR l4       4       t]V 3R lR l4       t]V 3R lR l4       tRtV tR# )r3   i  c          	      z   < V ^8  d   QhRS[ S[P                  ,          RS[ RS[S[P
                  RR3,          /# rB   pathmodere   NrG   rT  PathLiker   r   r   )rI   rJ   s   "r>   rK   FileSystemBase.__annotate__  s>     / /"++%/-0/	299dD(	)/rM   c                    R # r8   rN   )r;   rg  rh  s   &&&r>   r;  FileSystemBase.create_stream  s     ,/rM   c                t   < V ^8  d   QhRS[ S[P                  ,          RS[ RS[ S[P                  ,          /# rB   rg  suffixre   rG   rT  rj  )rI   rJ   s   "r>   rK   rk    s7        "++% /2 	r{{	 rM   c                    R # r8   rN   r;   rg  rp  s   &&&r>   concat_pathFileSystemBase.concat_path  s      rM   c                r   < V ^8  d   QhRS[ S[P                  ,          RS[ S[P                  ,          RR/# rB   rg  new_pathre   Nrq  )rI   rJ   s   "r>   rK   rk    s*    WW3,Wbkk8IWdWrM   c                    R # r8   rN   r;   rg  rx  s   &&&r>   renameFileSystemBase.rename  s    TWrM   c                n   < V ^8  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# rB   rg  re   rq  )rI   rJ   s   "r>   rK   rk    s%    JJcBKK/JC"++4EJrM   c                    R # r8   rN   r;   rg  s   &&r>   	init_pathFileSystemBase.init_path  s    GJrM   c                H   < V ^8  d   QhRS[ S[P                  ,          RR/# rB   rg  re   Nrq  )rI   rJ   s   "r>   rK   rk    s    99#+99rM   c                    R # r8   rN   r  s   &&r>   mkdirFileSystemBase.mkdir  s    69rM   c                J   < V ^8  d   QhRS[ S[P                  ,          RS[/# rB   checkpoint_idre   rG   rT  rj  r   )rI   rJ   s   "r>   rK   rk    s    RR33DRRrM   c                    R # r8   rN   clsr  s   &&r>   validate_checkpoint_id%FileSystemBase.validate_checkpoint_id  s    ORrM   c                J   < V ^8  d   QhRS[ S[P                  ,          RS[/# r~  r  )rI   rJ   s   "r>   rK   rk    s    ::3,::rM   c                    R # r8   rN   r  s   &&r>   existsFileSystemBase.exists  s    7:rM   c                H   < V ^8  d   QhRS[ S[P                  ,          RR/# r  rq  )rI   rJ   s   "r>   rK   rk    s    ;;C"++-;$;rM   c                    R # r8   rN   r  s   &&r>   rm_fileFileSystemBase.rm_file  s    8;rM   rN   N)rO   rP   rQ   rR   r
   r   r;  rt  r{  r  r  classmethodr  r  r  rU   rV   rW   s   @r>   r3   r3     s     /  /     W WJ J9 9R  R: :; ;rM   c                      a  ] tR tRt o ]V 3R lR l4       tV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	]
V 3R lR l4       tV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )r2   i  c          	      z   < V ^8  d   QhRS[ S[P                  ,          RS[ RS[S[P
                  RR3,          /# rf  ri  )rI   rJ   s   "r>   rK   FileSystem.__annotate__  s>     * *"++%*-0*	299dD(	)*rM   c              #     "   \        V\        4      '       g   \        V4      pVP                  V4      ;_uu_ 4       p\        \        P
                  V4      x  R R R 4       R #   + '       g   i     R # ; i5ir8   )r5  r   openr   r   r   )r;   rg  rh  r   s   &&& r>   r;  FileSystem.create_stream  sH      $%%:DYYt__ryy&)) ___s   ;A8A$
A8$A5	/	A8c                t   < V ^8  d   QhRS[ S[P                  ,          RS[ RS[ S[P                  ,          /# ro  rq  )rI   rJ   s   "r>   rK   r    s4      bkk 1 3 3CT rM   c                T    \        V\        4      '       g   \        V4      pW,          # r8   r5  r   rs  s   &&&r>   rt  FileSystem.concat_path  s     $%%:D}rM   c                n   < V ^8  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# r~  rq  )rI   rJ   s   "r>   rK   r    s-      cBKK/ C"++4E rM   c                H    \        V\        4      '       g   \        V4      pV# r8   r  r  s   &&r>   r  FileSystem.init_path  s    $%%:DrM   c                r   < V ^8  d   QhRS[ S[P                  ,          RS[ S[P                  ,          RR/# rw  rq  )rI   rJ   s   "r>   rK   r    s4     * *3, *bkk8I *d *rM   c                    \        V\        4      '       g   \        V4      pVP                  \        \        V4      4       R # r8   )r5  r   r{  r   rz  s   &&&r>   r{  FileSystem.rename  s+    $%%:DDx()rM   c                H   < V ^8  d   QhRS[ S[P                  ,          RR/# r  rq  )rI   rJ   s   "r>   rK   r    s$     0 0#+ 0 0rM   c                n    \        V\        4      '       g   \        V4      pVP                  R R R7       R# )T)parentsexist_okN)r5  r   r  r  s   &&r>   r  FileSystem.mkdir  s(    $%%:D

4$
/rM   c                J   < V ^8  d   QhRS[ S[P                  ,          RS[/# r  r  )rI   rJ   s   "r>   rK   r  !  s$      33D  rM   c                0   \        V\        4      '       d   R # R\        V4      9   d   R# \        V4      P                   FR  pVP	                  4       '       g   K  \
        P                  ! \        V4      \
        P                  4      '       g   KQ   R # 	  R# )Tz://F)r5  r   rG   r  r  rT  accessW_OK)r  r  ps   && r>   r  !FileSystem.validate_checkpoint_id   sb    mT**C&&m$,,AxxzzbiiA88 - rM   c                J   < V ^8  d   QhRS[ S[P                  ,          RS[/# r~  r  )rI   rJ   s   "r>   rK   r  .  s$      3,  rM   c                d    \        V\        4      '       g   \        V4      pVP                  4       # r8   )r5  r   r  r  s   &&r>   r  FileSystem.exists.  s$    $%%:D{{}rM   c                H   < V ^8  d   QhRS[ S[P                  ,          RR/# r  rq  )rI   rJ   s   "r>   rK   r  3  s$      C"++- $ rM   c                h    \        V\        4      '       g   \        V4      pVP                  4        R # r8   )r5  r   unlinkr  s   &&r>   r  FileSystem.rm_file3  s!    $%%:DrM   c                Z   < V ^8  d   QhRS[ S[P                  ,          RS[S[ ,          /# r~  )rG   rT  rj  r   )rI   rJ   s   "r>   rK   r  8  s(     0 0sR[[( 0T#Y 0rM   c                    \        V\        4      '       g   \        V4      pVP                  4        Uu. uF  p\        V4      NK  	  up# u upi r8   )r5  r   iterdirrG   )r;   rg  r  s   && r>   lsFileSystem.ls8  s:    $%%:D $/1A///s   ArN   N)rO   rP   rQ   rR   r
   r;  rt  r  r{  r  r  r  r  r  r  rU   rV   rW   s   @r>   r2   r2     sq     * * 
 
* *0 0
   
 
0 0rM   c                   \  a a ] tR tRt oRtRR^RRR]P                  3V3R lV 3R llltR!V3R lR	 lltV3R
 lR lt	V3R lR lt
V3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltR!V3R lR llt]V3R lR l4       t]V3R lR l4       tR tVtV ;t# )"_FileSystemWriteri>  aE  
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.

T逖 Nc                   < V ^8  d   QhRS[ S[P                  ,          RS[RS[RS[RS[RS[RS[S[,          R,          R	S[R
S[RS[RR/# )rB   rg  single_file_per_rank
sync_filesr@  per_thread_copy_ahead	overwrite_extensionsNr.  argskwargsre   )	rG   rT  rj  r   rH   r	   r   r4   r   )rI   rJ   s   "r>   rK   _FileSystemWriter.__annotate__L  s     '* '*BKK'* #'* 	'*
 '*  #'* '* 67$>'* 2'* '* '* 
'*rM   c	                $  < \         SV `  4        \        4       V n        V P                  P	                  V4      V n        W n        W0n        W@n        WPn	        \        4       V n        W`n        \        V4      V n        Wn        RV n        RV n        R# )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.
NT)superr   r2   fsr  rg  r  r  r@  r  ri   save_idr  r   r+  r.  rankuse_collectives)r;   rg  r  r  r@  r  r  r  r.  r  r  	__class__s   &&&&&&&&&*,r>   r   _FileSystemWriter.__init__L  sv    6 	,GG%%d+	$8!$(%:"%'"2;?$8! $	%)rM   c                V   < V ^8  d   QhRS[ S[P                  ,          R,          RR/# rB   r  Nre   rq  )rI   rJ   s   "r>   rK   r  u  s)     ( (3#4t#; (t (rM   c                t    V'       d!   V P                   P                  V4      V n        \        4       V n        R # r8   )r  r  rg  ri   r  r;   r  s   &&r>   reset_FileSystemWriter.resetu  s%    ))-8DI%'rM   c                0   < V ^8  d   QhRS[ RS[RS[RR/# )rB   is_coordinatorr  r  re   N)r   r   )rI   rJ   s   "r>   rK   r  z  s3     C C"C+.C:=C	CrM   c                `    VP                  R 4      V n        VP                  RR4      V n        R# )r  r  TN)getr  r  )r;   r  r  r  s   &&*,r>   set_up_storage_writer'_FileSystemWriter.set_up_storage_writerz  s(     JJv&	%zz*;TBrM   c                    < V ^8  d   QhRS[ /# rd   r   )rI   rJ   s   "r>   rK   r    s     	- 	-$ 	-rM   c                    V P                   '       d   V P                  R R7      pMV P                  ^ R7      pV P                  P                  V4      # )N)r  )r  _get_metadata_pathr  r  )r;   metadata_paths   & r>   _metadata_exists"_FileSystemWriter._metadata_exists  sI     333>M !333;Mww~~m,,rM   c                &   < V ^8  d   QhRS[ RS[ /# rB   planre   )r&   )rI   rJ   s   "r>   rK   r    s      x H rM   c                   V P                   P                  V P                  4       V P                  4       '       db   V P                  '       d6   \
        P                  ! R V P                   RV P                  : R2^R7       M\        RV P                  : R24      hV P                  eB   V P                  '       g0   \        P                  ! V\        RV P                   R24      R7      pV# )	z#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.)
stacklevelz-Checkpoint already exists and self.overwrite=.__r   r3  )r  r  rg  r  r  warningswarnr   r  r  dataclassesreplacerY   r;   r  s   &&r>   prepare_local_plan$_FileSystemWriter.prepare_local_plan  s    dii   ""~~~9$))DhY]YgYgXi jk k  !	 #%SDNNCTTU#VWW99 )=)=)=&&>Btyyk2C#DD rM   c                F   < V ^8  d   QhRS[ S[,          RS[ S[,          /# rB   plansre   )r   r&   )rI   rJ   s   "r>   rK   r    s#      h DN rM   c                    \        V4       UUu. uF:  w  r#VP                  f&   \        P                  ! V\	        RV R24      R7      MTNK<  	  pppV# u uppi )Nr  r   r  )r!  r3  r  r  rY   )r;   r  r(  r  	new_planss   &&   r>   prepare_global_plan%_FileSystemWriter.prepare_global_plan  sl    
 %U+	
 ,   ( >Bqc)3LM ,	 	 
 
s   A Ac                L   < V ^8  d   QhRS[ RS[RS[S[S[,          ,          /# )rB   r  r>  re   )r&   r'   r/   r   r-   )rI   rJ   s   "r>   rK   r    s3     5 55 5 
[!	"	5rM   c                  a	a
 VP                   o
^ o	V	V
3R lp\        P                  ! 4       pV P                  '       di   \	        V P
                  VP                  4       FC  pV! 4       pV P                  P                  V P                  V4      pVP                  WvV34       KE  	  MTVP                   FD  pV! 4       pV P                  P                  V P                  V4      pVP                  WvV.34       KF  	  V P                  W$4      # )r   c                  F   < SP                    S \         2p S^,          oV # )r   )r[   DEFAULT_SUFFIX)r[  
file_countstorage_plans    r>   gen_file._FileSystemWriter.write_data.<locals>.gen_file  s,    '../
|N;KLI!OJrM   )r3  rA  rB  r  r)  r@  r:   r  rt  rg  rY  _write_data)r;   r  r>  r  r<  bucketr[  rg  r  r  r  s   &&&      @@r>   
write_data_FileSystemWriter.write_data  s    
 (,'8'8
	 #(++-
$$$1$2C2CTZZP$J	ww**499i@89 Q
 

$J	ww**499i@$89 #
 44rM   c                `   < V ^8  d   QhRS[ RS[P                  RS[S[S[,          ,          /# )rB   r>  r<  re   )r'   rA  rB  r/   r   r-   )rI   rJ   s   "r>   rK   r    s7     0 00 KK0 
[!	"	0rM   c                   \         P                  ! 4       p. p\        ^V P                  4       F  p\        P
                  ! \        V P                  P                  VVVV P                  V P                  V P                  V P                  V P                  3	R7      pVP                  4        VP                  V4       K  	  \        V P                  P                  VVVV P                  V P                  V P                  V P                  V P                  R7	       V F  pVP                  4        K  	  . p  WsP!                  4       ,          pK    \         P"                   d!    \%        4       pTP'                  T4       Tu # i ; i)r   )targetr  )	r;  r<  r=  r>  r+  r   r?  r@  r.  )rA  rB  r   r@  	threadingThreadrc  r  r;  r+  r  r  r.  startr   joinrG  rZ  r/   
set_result)	r;   r>  r<  r=  threadsr   tresfuts	   &&&      r>   r  _FileSystemWriter._write_data  sB   
 %*KKMq$++,A  .GG)) OO..OO%%--
A GGINN1! -$ 	 ''//!% $ : :oo**!%!:!:
	
 AFFH  	..00{{ 	-3XCNN3J	s   7E 2FFc                J   < V ^8  d   QhRS[ RS[S[S[,          ,          RR/# )rB   rF  resultsre   N)r   r   r-   )rI   rJ   s   "r>   rK   r    s,      0  0x  0$tK7H2I  0d  0rM   c                z   \         Vn        / pV F8  pTP                  V Uu/ uF  qUP                  VP                  bK  	  up4       K:  	  W1n        V P                  4       Vn        V P                  '       g%   V P                  e   RV P                   \         R2M\         R2p\        \        V P                  P                  V P                  V4      4      pV P                  P                  VR4      ;_uu_ 4       p\        P                   ! W4       V P"                  '       d&    \$        P&                  ! VP)                  4       4       R R R 4       V P                  '       g+   V P                  e   V P1                  V P                  4      p	MV P1                  4       p	V P                  P3                  V	4      '       d   V P                  P5                  V	4       V P                  P7                  Wy4       R # u upi   \*        \,        3 d    \$        P.                  ! 4         Li ; i  + '       g   i     L; i)Nr  z.tmprD  )CURRENT_DCP_VERSIONversionupdater1  r3  storage_metar  r  _metadata_fnr   r   r  rt  rg  r;  pickledumpr  rT  rU  rV  rW  r   rX  r  r  r  r{  )
r;   rF  r  
storage_mdwr_listwrtmp_filenametmp_pathmetadata_filer  s
   &&&       r>   finish_FileSystemWriter.finish  s   .
G7K7Rxx87KL  * $ 1 1 3 '''DII,A L>. >& 	
 dgg11$))\JKWW""8T22mKK0HH]1134	 3 ###		(= 33DII>M 335M77>>-((GGOOM*x/7 L '(<= GGI 32s/   G9
>)H*($G>>&H'$H*&H''H**H:	c                .   < V ^8  d   QhRS[ R,          /# ry   )r!   )rI   rJ   s   "r>   rK   r    s     S SkD0 SrM   c                D    \        V P                  V P                  R 7      # ))r  r  )r!   r  r  r|   s   &r>   r  _FileSystemWriter.storage_meta  s    ););T\\RRrM   c                H   < V ^8  d   QhRS[ R,          RS[P                  /# rB   r  Nre   rH   rT  rj  )rI   rJ   s   "r>   rK   r    '     D DsTz DR[[ DrM   c                    Vf   \          M
RV \          2p\        \        V P                  P	                  V P
                  V4      4      # Nr  r  r   r   r  rt  rg  r;   r  filenames   && r>   r  $_FileSystemWriter._get_metadata_path  <    (,l^Btf\N:SD$''--diiBCCrM   c                D   < V ^8  d   QhRS[ S[P                  ,          /# rd   rq  )rI   rJ   s   "r>   rK   r           sR[[0 rM   c                    V P                   # )zD
return the checkpoint_id that will be used to save the checkpoint.
rg  r|   s   &r>   r  _FileSystemWriter.checkpoint_id      
 yyrM   c                J   < V ^8  d   QhRS[ S[P                  ,          RS[/# r  r  )rI   rJ   s   "r>   rK   r  '  (     @ @33D @ @rM   c                ,    \         P                  V4      # r8   r2   r  r  s   &&r>   r  (_FileSystemWriter.validate_checkpoint_id&      00??rM   )r  r  rg  r  r  r  r.  r  r  r@  r+  r  r8   )rO   rP   rQ   rR   rS   r4   ra   r   r  r  r  r  r  r  r  r&  r  r  r   r  r  r  rU   rV   __classcell__r  rJ   s   @@r>   r  r  >  s       &*%/AE4G4R4R'* '*R( (
C C	- 	- ( 5 580 0d 0  0DS SD D   @ @ @rM   r  c                   L   a  ] tR tRt o RtR	V 3R lR lltV 3R lR ltRtV tR# )
_StorageReaderTransformsi+  r   Nc                2   < V ^8  d   QhRS[ R,          RR/# )rB   extension_registryNre   )r   )rI   rJ   s   "r>   rK   %_StorageReaderTransforms.__annotate__2  s!     
 
+<t+C 
t 
rM   c                >    Vf   \        4       V n        R # TV n        R # r8   )r   rG  )r;   rG  s   &&r>   r   !_StorageReaderTransforms.__init__2  s!    #5#= 	CU 	rM   c          	      b   < V ^8  d   QhRS[ RS[S[,          RS[S[,          RS[S[,          /# )rB   	read_itemrF   r   re   )r%   r	   rG   r   r   )rI   rJ   s   "r>   rK   rH  7  s?        (} uI	
 
ErM   c                    V P                   P                  V4      pTpV F,  p\        V\        4      '       g   K  VP	                  V4      pK.  	  V# r8   )rG  from_descriptor_listr5  r   transform_from)r;   rL  rF   r   r   rO  r  s   &&&&   r>   transform_load_stream._StorageReaderTransforms.transform_load_stream7  sP     ,,AABWX
#B"677!#!2!2>!B  rM   )rG  r8   )	rO   rP   rQ   rR   rS   r   rP  rU   rV   rW   s   @r>   rE  rE  +  s     
 

 rM   rE  c                     a a ] tR tRt oRV3R lV 3R llltV3R lR ltRV3R lR lltV3R lR	 ltRV3R
 lR lltV3R lR lt	V3R lR lt
V3R lR ltV3R lR lt]V3R lR l4       t]V3R lR l4       tRtVtV ;t# )r1   iE  c                \   < V ^8  d   QhRS[ S[P                  ,          RS[R,          RR/# )rB   rg  _extension_registryNre   )rG   rT  rj  r   )rI   rJ   s   "r>   rK   FileSystemReader.__annotate__F  s7     $ $BKK$ /5$ 
	$rM   c                   < \         SV `  4        \        4       V n        V P                  P	                  V4      V n        / V n        \        4       V n        \        V4      V n
        R V n        RV n        R # )NT)r  r   r2   r  r  rg  r3  ri   load_idrE  r+  r  r  )r;   rg  rT  r  s   &&&r>   r   FileSystemReader.__init__F  s]    
 	,GG%%d+	,.%'23FG	#rM   c                6   < V ^8  d   QhRS[ RS[S[,          /# )rB   sinfore   )r6   r   r   )rI   rJ   s   "r>   rK   rU  T  s#     T T| T5	 TrM   c                t    \        \        \        ,          \        WP                  VP
                  4      4      # r8   )r   r   r   r.   rD   rE   )r;   filerZ  s   &&&r>   _slice_fileFileSystemReader._slice_fileT  s#    BuI0||U\\RSSrM   c                V   < V ^8  d   QhRS[ S[P                  ,          R,          RR/# r  rq  )rI   rJ   s   "r>   rK   rU  W  s)     ( (3#4t#; (t (rM   c                    / V n         V'       d!   V P                  P                  V4      V n        \	        4       V n        R # r8   )r3  r  r  rg  ri   rW  r  s   &&r>   r  FileSystemReader.resetW  s-    ))-8DI%'rM   c                :   < V ^8  d   QhRS[ RS[RS[R,          /# )rB   r  r>  re   N)r#   r$   r/   )rI   rJ   s   "r>   rK   rU  ]  s&     : :h : : :rM   c                   / pVP                    FM  pV P                  VP                  ,          pVP                  pVP	                  V. 4      P                  V4       KO  	  VP                  4        EFa  w  rxV P                  P                  V P                  V4      p	V P                  P                  V	R 4      ;_uu_ 4       p
V EF  pV P                  VP                  ,          pV P                  W4      pV P                  P                  TVP                  ;'       g    RV4      pVP                  \        P                   8X  dJ   \"        P$                  ! VP'                  R	4      4      pVP)                  ^ 4       VP+                  W4       K  VP-                  4       '       d   TpM6\"        P$                  ! VP'                  R	4      4      pVP)                  ^ 4       \/        \0        \2        P4                  ! VRRR7      4      p\7        VVP8                  VP:                  4      pVP=                  V4      P?                  4       pVPA                  4       VPA                  4       8w  d;   \C        RVP                   RVPA                  4        RVPA                  4        24      hVPE                  V4       VPG                  VV4       EK  	  RRR4       EKd  	  \I        4       pVPK                  R4       V#   + '       g   i     EK  ; i)
rbr   T)map_locationweights_onlyzreq z mismatch sizes z vs NrN   )&r:   r3  storage_indexrC   
setdefaultr   r  rt  rg  r;  r]  r+  rP  rF   r   r"   r  r   r/  readseek
load_bytesseekabler   r   r   loadr   storage_offsetslengthsresolve_tensorr   rn   r   copy_commit_tensorr/   r  )r;   r  r>  per_filerL  item_mdrg  rC   reqsrx  r   req
file_slicerO  
read_bytesrm  r   target_tensorr  s   &&&                r>   	read_dataFileSystemReader.read_data]  s|   .0I$($5$5i6M6M$NG((Db)00; $
 $,>>#3Mww**499mDH&&x6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(--/6;;=@"0"&s'8'8&99I-J\J\J^I__cdjdododqcr s#  &++F3--c=AU   76 $4` ht
a 766s    AK3BK3$D%K33Lc                H   < V ^8  d   QhRS[ R,          RS[P                  /# r,  r-  )rI   rJ   s   "r>   rK   rU    r.  rM   c                    Vf   \          M
RV \          2p\        \        V P                  P	                  V P
                  V4      4      # r0  r1  r2  s   && r>   r  #FileSystemReader._get_metadata_path  r5  rM   c                ,   < V ^8  d   QhRS[ RS[ RS[/# )rB   r  r  re   )r   r   )rI   rJ   s   "r>   rK   rU    s"     
 
3 
# 
( 
rM   c                h   VP                  R 4      pV P                  V4      pV P                  P                  VR4      ;_uu_ 4       p\        P
                  ! V4      pRRR4       \        XRR4      f   \        4       Vn        V P                  VP                  n	        V#   + '       g   i     LK; i)r  rd  Nr  )
r  r  r  r;  r  rn  rJ  r!   r  rW  )r;   r  r  r  rg  r%  rF  s   &*,    r>   read_metadataFileSystemReader.read_metadata  s    zz&!&&t,WW""4..-{{=1H / 8^T2:$/MH!(,% /.s   B!!B1	c          
      6   < V ^8  d   QhRS[ RS[RS[RS[RR/# )rB   rF  r  r  r  re   N)r   r   r   )rI   rJ   s   "r>   rK   rU    s<     N N N26N?BNNQN	NrM   c                    VP                   V n         VP                  R 4      V n        VP                  RR4      V n        V P                   f   \	        R4      hR# )r  r  TNz)storage_data must not be None in metadata)r3  r  r  r  r   )r;   rF  r  r  r  s   &&&*,r>   set_up_storage_reader&FileSystemReader.set_up_storage_reader  sS     %11JJv&	%zz*;TB$ !LMM %rM   c                &   < V ^8  d   QhRS[ RS[ /# r  )r#   )rI   rJ   s   "r>   rK   rU    s      x H rM   c                    V# r8   rN   r  s   &&r>   r  #FileSystemReader.prepare_local_plan  s    rM   c                F   < V ^8  d   QhRS[ S[,          RS[ S[,          /# r  )r   r#   )rI   rJ   s   "r>   rK   rU    s#      h DN rM   c                    V# r8   rN   )r;   r  s   &&r>   r  $FileSystemReader.prepare_global_plan  s    rM   c                D   < V ^8  d   QhRS[ S[P                  ,          /# rd   rq  )rI   rJ   s   "r>   rK   rU    r7  rM   c                    V P                   # )zD
return the checkpoint_id that will be used to load the checkpoint.
r9  r|   s   &r>   r  FileSystemReader.checkpoint_id  r;  rM   c                J   < V ^8  d   QhRS[ S[P                  ,          RS[/# r  r  )rI   rJ   s   "r>   rK   rU    r=  rM   c                ,    \         P                  V4      # r8   r?  r  s   &&r>   r  'FileSystemReader.validate_checkpoint_id  rA  rM   )r  rW  rg  r  r3  r+  r  r8   )rO   rP   rQ   rR   r   r]  r  r{  r  r  r  r  r  r   r  r  r  rU   rV   rB  rC  s   @@r>   r1   r1   E  s     $ $T T( (: :xD D

 
N N     @ @ @rM   c                   |   a a ] tR tRt oRtRR^RRRR]P                  3V3R lR lltV3R	 lV 3R
 lltRt	Vt
V ;t# )r0   i  a  
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 global `.metadata` file with the serialized metadata if rank coordination is enabled.
a rank local `__{rank}.metadata` file with the serialized metadata if rank coordination is NOT enabled.

Tr  FNc                   < V ^8  d   QhRS[ S[P                  ,          RS[RS[RS[RS[RS[RS[RS[S[,          R	,          R
S[RR	/
# )rB   rg  r  r  r@  r  cache_staged_state_dictr  r  Nr.  re   )rG   rT  rj  r   rH   r	   r   r4   )rI   rJ   s   "r>   rK   FileSystemWriter.__annotate__  s     +
 +
BKK+
 #+
 	+

 +
  #+
 "&+
 +
 67$>+
 2+
 
+
rM   c
                r    \         P                  V VVVVVVVV	R7	       \        P                  ! V VR7       R# )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 reused 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.
)rg  r  r  r@  r  r  r  r.  )r  N)r  r   r*   )
r;   rg  r  r  r@  r  r  r  r  r.  s
   &&&&&&&&&&r>   r   FileSystemWriter.__init__  sH    : 	""!5!%"7#!5 	# 
	
 	$$$;	
rM   c                &   < V ^8  d   QhRS[ RS[ /# )rB   
state_dictre   )r    )rI   rJ   s   "r>   rK   r    s     ) ) )O )rM   c                0   < ^ V n         \        SV `	  V4      # )zOverride of AsyncStager.stage)r  r  stage)r;   r  r  s   &&r>   r  FileSystemWriter.stage  s     &'"w}Z((rM   )r  )rO   rP   rQ   rR   rS   r4   ra   r   r  rU   rV   rB  rC  s   @@r>   r0   r0     sD     " &*%/(-AE4G4R4R+
 +
Z) ) )rM   c                ~    V ^8  d   Qh/ ^ \         9   d
   \        ;R&   ^\         9   d   \        \        ,          ;R&   # )rB   r  r  )__conditional_annotations__rG   r   )rI   s   "r>   rK   rK      s4      F   c G J * )U3Z )K rM   )r0   r1   r2   r3   r4   )br  r   r  r   rR  r   rT  r  rA  r  rg   r  abcr   r   collections.abcr   r   r   r   r	   
contextlibr
   r   enumr   r   pathlibr   typingr   r   r   r   typing_extensionsr   r   r   torch._utilsr   r   torch.distributed._shard._utilsr   'torch.distributed.checkpoint._extensionr   r   &torch.distributed.checkpoint._hf_utilsr   r   r   r   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__r  r  r6   rY   r4   r   ri   rk   r   r   r   r  r)  r9  rc  r3   r2   r  rE  r1   r0   rK   )r  s   @r>   <module>r     s      	   	      # M M % !  #  ' ' %   G B  Y X	 	 	 E 
 A     ")  ) 	I 	I 	I    $  
 C } 0X"M X"v0Y 0Yf	404ngT<S <@:0 :0zj@ j@Z 4}@} }@@A)(*= A)rM   