Ë
    *êñi �  ã                   ó  — U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZm Z  d d
l!m"Z" d dl#Z#d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZCmDZDmEZE d dlFmGZG d dlHmIZI g d¢ZJdZKeLeMd<   dZNeeL   eMd<   e G d„ d«      «       ZOe G d„ d«      «       ZP G d„ d e«      ZQd!ZRd"eLfd#„ZS G d$„ d%e«      ZT G d&„ d'eT«      ZU G d(„ d)eT«      ZV G d*„ d+«      ZWd,e>d"eXfd-„ZYd.eXd/eZe>   d"eZeZe>      fd0„Z[d1eWd2ej¸                  d3ejº                  e#jH                  z  d4e>d5eLd6eQd"eEfd7„Z^d8ed9ej¾                  d:ej¾                  d;e=d1eWd<eXd=e`d>eXd6eQd"dfd?„Za G d@„ dAe«      Zb G dB„ dCeb«      Zc G dD„ dEeD«      Zd G dF„ dG«      Ze G dH„ dIeC«      Zf G dJ„ dKedeA«      Zgy)Lé    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	.metadataÚ_metadata_fnz1.0.0ÚCURRENT_DCP_VERSIONc                   óP   — e Zd ZU dZeed<   eed<   eed<   dZee   dz  ed<   d„ Z	y)Ú_StorageInfoz#This is the per entry storage info.Úrelative_pathÚoffsetÚlengthNÚtransform_descriptorsc                 óp   — | j                   j                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}S c c}}w ©N)Ú__dict__Úitems)ÚselfÚkÚvs      úi/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/torch/distributed/checkpoint/filesystem.pyÚ__getstate__z_StorageInfo.__getstate__S   s/   € Ø!%§¡×!4Ñ!4Ó!6×H™˜˜A¸!¹-��1‘ÓHÐHùÓHs   ž
2©2)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úintr<   r	   rE   © ó    rD   r8   r8   J   s/   … á-àÓØƒKØƒKØ26Ð˜8 C™=¨4Ñ/Ó6óIrN   r8   c                   ó   — e Zd ZU eed<   y)Ú_StoragePrefixÚprefixN)rF   rG   rH   rJ   rK   rM   rN   rD   rP   rP   W   s   … à„KrN   rP   c                   ó   — e Zd ZdZdZy)r4   Ú
torch_saveÚsafetensorsN)rF   rG   rH   Ú
TORCH_SAVEÚSAFETENSORSrM   rN   rD   r4   r4   \   s   „ Ø€JØ�KrN   r4   z.distcpÚreturnc                  ó<   — t        t        j                  «       «      S r>   )rJ   ÚuuidÚuuid4rM   rN   rD   Ú_generate_uuidr[   d   s   € ÜŒt�z‰z‹|ÓÐrN   c                   óv   — e Zd Zedededdfd„«       Zedd„«       Zedee	e
j                  ef      fd„«       Zy)	Ú_TensorLoaderÚsizeÚobjrW   Nc                  ó   — y r>   rM   ©rA   r^   r_   s      rD   Úaddz_TensorLoader.addi   ó   € àrN   c                  ó   — y r>   rM   ©rA   s    rD   Ústart_loadingz_TensorLoader.start_loadingm   rc   rN   c                  ó   — y r>   rM   re   s    rD   Úvaluesz_TensorLoader.valuesq   rc   rN   ©rW   N)rF   rG   rH   r   rL   Úobjectrb   rf   r   ÚtupleÚtorchr   rh   rM   rN   rD   r]   r]   h   sk   „ Øð˜ð  &ð ¨Tò ó ðð òó ðð ð˜  u§|¡|°VÐ';Ñ!<Ñ=ò ó ñrN   r]   c                   óh   — e Zd Zdeddfd„Zdededdfd„Zd
d„Zde	e
ej                  ef      fd	„Zy)Ú_SerialCpuLoaderÚresolve_funrW   Nc                 ó    — || _         g | _        y r>   )ro   r@   )rA   ro   s     rD   Ú__init__z_SerialCpuLoader.__init__w   s   € Ø&ˆÔØ/1ˆ�
rN   r^   r_   c                 ó>   — | j                   j                  ||f«       y r>   )r@   Úappendra   s      rD   rb   z_SerialCpuLoader.add{   s   € Ø�
‰
×Ñ˜4 ˜+Õ&rN   c                  ó   — y r>   rM   re   s    rD   rf   z_SerialCpuLoader.start_loading~   s   € ØrN   c              #   ó  K  — | j                   D ]u  \  }}| j                  |«      j                  «       }|j                  «       }|j	                  «       j                  «       |j                  k7  r|j                  «       }||f–— Œw y ­wr>   )r@   ro   ÚdetachÚcpuÚuntyped_storager^   ÚnbytesÚclone©rA   Ú_r_   Útensors       rD   rh   z_SerialCpuLoader.values�   sz   è ø€ Ø—j‘jò 		‰FˆAˆsØ×%Ñ% cÓ*×1Ñ1Ó3ˆFØ—Z‘Z“\ˆFØ×%Ñ%Ó'×,Ñ,Ó.°&·-±-Ò?àŸ™›�àØðó ñ		ùs   ‚BBri   )rF   rG   rH   r   rq   rL   rj   rb   rf   r   rk   rl   r   rh   rM   rN   rD   rn   rn   v   sS   „ ð2 Hð 2°ó 2ð'˜ð ' &ð '¨Tó 'óð
˜  u§|¡|°VÐ';Ñ!<Ñ=ô 
rN   rn   c            	       ó  — e Zd Z	 	 ddedej
                  dz  deddfd„Zede	fd„«       Z
deeej                  ef      fd„Zdd	„Zdeeej                  ef      fd
„Zdededdfd„Zdd„Zdeeej                  ef      fd„Zy)Ú_OverlappingCpuLoaderNro   ÚstreamÚinflight_threshholdrW   c                 ó8  — || _         g | _        || _        d| _        t	        j
                  «       | _        d| _        d| _        |r|j                  n	t        «       | _	        t        | j                  «      | _        t        t        j                  j                   |xs | j                  j#                  «       «      | _        | j$                  | j                  j#                  «       k7  r4| j$                  j'                  | j                  j#                  «       «       y y )Nr   F)ro   r@   r�   Úin_flight_dataÚcollectionsÚdequeÚcurrent_itemsÚidxÚstartedÚdevice_typer   r   Údevice_moduler   rl   ÚcudaÚStreamÚcurrent_streamr€   Úwait_stream)rA   ro   r€   r�   s       rD   rq   z_OverlappingCpuLoader.__init__�   sâ   € ð 'ˆÔØ/1ˆŒ
Ø#6ˆÔ ØˆÔÜ0;×0AÑ0AÓ0CˆÔØˆŒØˆŒá"(ˆF×ÒÔ.HÓ.Jð 	Ôô 0°×0@Ñ0@ÓAˆÔÜÜ�J‰J×Ñ˜vÒL¨×);Ñ);×)JÑ)JÓ)Ló
ˆŒð �;‰;˜$×,Ñ,×;Ñ;Ó=Ò=Ø�K‰K×#Ñ# D×$6Ñ$6×$EÑ$EÓ$GÕHð >rN   c                 óF   — | j                   t        | j                  «      k\  S r>   )r‡   Úlenr@   re   s    rD   Ú_donez_OverlappingCpuLoader._done¦   s   € à�x‰xœ3˜tŸz™z›?Ñ*Ð*rN   c                 ó   — g }| j                   | j                  k\  r| j                  j                  «        | j                   | j                  k\  r| j                  j                  «       }| xj                   |d   j                  «       |d   j                  «       z  z  c_         |j                  |«       | j                   | j                  k\  rŒ|S )Nr   )	rƒ   r�   r€   Úsynchronizer†   ÚpopleftÚnumelÚelement_sizers   )rA   ÚdrainedÚvals      rD   Ú_drainz_OverlappingCpuLoader._drainª   s©   € ØˆØ×Ñ $×":Ñ":Ò:Ø�K‰K×#Ñ#Ô%Ø×!Ñ! T×%=Ñ%=Ò=Ø×$Ñ$×,Ñ,Ó.ˆCØ×Ò 3 q¡6§<¡<£>°C¸±F×4GÑ4GÓ4IÑ#IÑIÕØ�N‰N˜3Ôð ×!Ñ! T×%=Ñ%=Ó=ð ˆrN   c                 ó   — | j                   j                  | j                  «      5  | j                  �s‡| j                  | j                  k  �rm| j
                  | j                     \  }}| xj                  dz  c_        | j                  |«      j                  «       }|j                  j                  | j                  k(  r|j                  dd¬«      }nn|j                  t        j                  d«      k(  rL|j                  «       j                  «       |j!                  «       |j"                  z  k7  r|j%                  «       }| j&                  j)                  ||f«       | xj                  |j!                  «       |j+                  «       z  z  c_        | j                  s| j                  | j                  k  r�Œmd d d «       y # 1 sw Y   y xY w)Né   rw   T)ÚdeviceÚnon_blocking)rŠ   r€   r‘   rƒ   r�   r@   r‡   ro   rv   rœ   Útyper‰   Útorl   rx   r^   r•   Úitemsizerz   r†   rs   r–   r{   s       rD   Ú_refillz_OverlappingCpuLoader._refill´   sc  € Ø×Ñ×&Ñ& t§{¡{Ó3ñ 	NØ—j“j T×%8Ñ%8¸4×;SÑ;SÓ%SØŸ™ D§H¡HÑ-‘��3Ø—’˜A‘•Ø×)Ñ)¨#Ó.×5Ñ5Ó7�Ø—=‘=×%Ñ%¨×)9Ñ)9Ò9Ø#ŸY™Y¨eÀ$˜YÓG‘FØ—]‘]¤e§l¡l°5Ó&9Ò9à×.Ñ.Ó0×5Ñ5Ó7Ø!Ÿ<™<›>¨F¯O©OÑ;ò<ð "(§¡£˜à×"Ñ"×)Ñ)àØðôð ×#Ò# v§|¡|£~¸×8KÑ8KÓ8MÑ'MÑMÕ#ð) —j’j T×%8Ñ%8¸4×;SÑ;SÔ%S÷	N÷ 	Nñ 	Nús   ¦FGÇGc                 ó¬   — | j                   st        d«      ‚t        | j                  «      dkD  r| j                  j                  «        | j                  S )Nz._finish called before all items were processedr   )r‘   ÚAssertionErrorr�   r†   r€   r“   re   s    rD   Ú_finishz_OverlappingCpuLoader._finishÌ   sD   € Ø�zŠzÜ Ð!QÓRÐRÜˆt×!Ñ!Ó" QÒ&Ø�K‰K×#Ñ#Ô%Ø×!Ñ!Ð!rN   r^   r_   c                 ól   — | j                   rt        d«      ‚| j                  j                  ||f«       y )Nz&cannot add items after loading started)rˆ   ÚRuntimeErrorr@   rs   ra   s      rD   rb   z_OverlappingCpuLoader.addÓ   s+   € Ø�<Š<ÜÐGÓHÐHØ�
‰
×Ñ˜4 ˜+Õ&rN   c                 óª   — | j                   ry d| _         | j                  j                  t        j                  d«      ¬«       | j                  «        y )NTr   ©Úkey)rˆ   r@   ÚsortÚoperatorÚ
itemgetterr¡   re   s    rD   rf   z#_OverlappingCpuLoader.start_loadingØ   s9   € Ø�<Š<ØØˆŒØ�
‰
�‰œH×/Ñ/°Ó2ˆÔ3Ø�‰�rN   c              #   óê   K  — | j                  «        | j                  s7| j                  «       }| j                  «        |E d {  –—†  | j                  sŒ7| j	                  «       E d {  –—†  y 7 Œ*7 Œ­wr>   )rf   r‘   r™   r¡   r¤   )rA   r—   s     rD   rh   z_OverlappingCpuLoader.valuesß   sY   è ø€ Ø×ÑÔØ—*’*Ø—k‘k“mˆGØ�L‰LŒNØ×Ðð —*“*ð
 —<‘<“>×!Ñ!ð øà!ús*   ‚AA3ÁA/ÁA3ÁA3Á)A1Á*A3Á1A3)Ni@B ri   )rF   rG   rH   r   rl   rŒ   rL   rq   ÚpropertyÚboolr‘   Úlistrk   r   rj   r™   r¡   r   r¤   rb   rf   r   rh   rM   rN   rD   r   r   Ž   sà   „ ð '+Ø#,ñ	IàðIð —‘˜tÑ#ðIð !ð	Ið
 
óIð. ð+�tò +ó ð+ð˜˜U 5§<¡<°Ð#7Ñ8Ñ9ó óNð0"˜ %¨¯©°fÐ(<Ñ"=Ñ>ó "ð'˜ð ' &ð '¨Tó 'ó
ð"˜  u§|¡|°VÐ';Ñ!<Ñ=ô "rN   r   c            	       ón   — e Zd ZdZ	 d	dee   dz  ddfd„Zdedej                  de
ee   ee   f   fd„Zy)
Ú_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Ú
extensionsrW   c                 ó&   — |€d| _         y|| _         y)a  
        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.
        NrM   )r´   )rA   r´   s     rD   rq   z!_StorageWriterTransforms.__init__ð   s   € ð !+Ð 2˜"ˆ�¸
ˆ�rN   Ú
write_itemÚ
raw_streamc                 ó"  —  G d„ dt         j                  «      }t        t        t            ||«      «      }| j
                  D ]  }|j                  |«      }Œ |t        | j
                  «      D �cg c]  }|j                  «       ‘Œ c}fS c c}w )Nc                   óN   — e Zd Zdej                  fd„Zdefd„Zdede	fd„Z
d„ Zy)	úE_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriterÚrawc                 ó   — || _         y r>   )r»   )rA   r»   s     rD   rq   zN_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__  s	   € Ø�•rN   rW   c                  ó   — y©NTrM   re   s    rD   Ú	writeablezO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeable	  s   € ØrN   Úbc                 ó8   — | j                   j                  |«      S r>   )r»   Úwrite)rA   rÀ   s     rD   rÂ   zK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.write  s   € Ø—x‘x—~‘~ aÓ(Ð(rN   c                 óX   — | j                  «        | j                  j                  «        y r>   )Úflushr»   re   s    rD   ÚclosezK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close  s   € Ø—
‘
”Ø—‘—‘Õ rN   N)rF   rG   rH   ÚioÚIOBaserq   r¯   r¿   r   rL   rÂ   rÅ   rM   rN   rD   ÚNoCloseWriterrº     s6   „ ð B§I¡Ió ð 4ó ð)˜vð )¨#ó )ó!rN   rÈ   )	rÆ   rÇ   r   r   Úbytesr´   Útransform_toÚreversedÚget_descriptor)rA   r¶   r·   rÈ   rÊ   Úexs         rD   Útransform_save_streamz._StorageWriterTransforms.transform_save_streamû   sw   € ô	!œBŸI™Iô 	!ô œBœu™I¡}°ZÓ'@ÓAˆà—/‘/ò 	9ˆBØŸ?™?¨<Ó8‰Lð	9ð ¼XÀdÇoÁoÓ=VÖW°r˜r×0Ñ0Õ2ÒWÐXÐXùÒWs   Á1Br>   )rF   rG   rH   rI   r	   r   rq   r(   rÆ   rÇ   rk   r   rÉ   r°   rJ   rÎ   rM   rN   rD   r²   r²   é   sh   „ ñð GKñ	CØ"Ð#;Ñ<¸tÑCð	Cà	ó	CðYØ#ðYØ13·±ðYà	ˆr�%‰y˜$˜s™)Ð#Ñ	$ôYrN   r²   Úitemc                 óø   — d}| j                   €t        d«      ‚| j                   j                  D ]  }||z  }Œ	 | j                   j                  j                  }|t
        j                  j                  |«      z  S )Nr›   z&WriteItem tensor_data must not be None)Útensor_datar£   r^   Ú
propertiesÚdtyperl   Ú_utilsÚ_element_size)rÏ   r^   ÚsrÓ   s       rD   Ú
_item_sizer×     sv   € Ø€DØ×ÑÐÜÐEÓFÐFà×Ñ×"Ñ"ò ˆØ�‰	‰ðð ×Ñ×'Ñ'×-Ñ-€EØ”%—,‘,×,Ñ,¨UÓ3Ñ3Ð3rN   Úbinsr@   c                 óŽ  — | dk(  r|gS |D �cg c]"  }|j                   t        j                  k(  sŒ!|‘Œ$ }}|D �cg c]"  }|j                   t        j                  k7  sŒ!|‘Œ$ }}t        | «      D �cg c]  }g ‘Œ }}t        | «      D �cg c]  }d‘Œ }}|j	                  t
        d¬«       t        |«      D ]  \  }}||| z     j                  |«       Œ |D ]X  }t        t        |«      t        j                  d«      ¬«      d   }	||	   j                  |«       ||	xx   t        |«      z  cc<   ŒZ |S c c}w c c}w c c}w c c}w )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
             rD   Ú_split_by_size_and_typerå   (  s3  € Øˆq‚yØˆwˆà!ÖF�b R§W¡W´×0EÑ0EÓ%EŠrÐF€GÐFØ"ÖG�r b§g¡g´×1FÑ1FÓ&F’ÐG€HÐGä27¸³+Ö%>¨Q¢bÐ%>€GÐ%>Ü$ T›{Ö+˜!’AÐ+€LÐ+à‡M�M”j¨$€MÔ/ä˜7Ó#ò %‰ˆˆ2Ø��D‘Ñ× Ñ  Õ$ð%ð ò ,ˆä”)˜LÓ)¬x×/BÑ/BÀ1Ó/EÔFÀqÑIˆØ�‰×Ñ˜BÔØ�SÓœZ¨›^Ñ+Ôð	,ð €Nùò# GùÚGùâ%>ùÚ+s!   �"D3°D3º"D8ÁD8Á0	D=Â	EÚ
transformsr€   Údatar¶   Ústorage_keyÚserialization_formatc           
      óX  — |j                  «       }| j                  ||«      \  }}|j                  t        j                  k(  rEt        |t        j                  «      st        d«      ‚|j                  |j                  «       «       n{t        |t        j                  «      st        d«      ‚|j                  t        j                  d«      k7  rt        d«      ‚|t        j                  k(  rt        j                   ||«       |j#                  «        |t        j                  k(  st        |t        j                  «      r|j                  «       |z
  }	n!|j%                  «       |j'                  «       z  }	t)        |«      dk(  rd n|}
t+        |j,                  |	t/        |||	|
¬«      ¬«      S )Nz/Data must be io.BytesIO for BYTE_IO write itemsz5Data must be torch.Tensor for non-BYTE_IO write itemsrw   zTensor must be on CPU devicer   )r<   )ÚindexÚsize_in_bytesÚstorage_data)ÚtellrÎ   rž   r)   rÛ   Ú
isinstancerÆ   ÚBytesIOr£   rÂ   Ú	getbufferrl   r   rœ   r4   rU   ÚsaverÅ   r•   r–   r�   r-   rë   r8   )ræ   r€   rç   r¶   rè   ré   r:   rÊ   r<   r;   Úinfo_transform_descriptorss              rD   Ú_write_itemrô   @  sk  € ð �[‰[‹]€Fà,6×,LÑ,LØ�Fó-Ñ)€\Ð(ð ‡�œ-×/Ñ/Ò/Ü˜$¤§
¡
Ô+Ü Ð!RÓSÐSØ×Ñ˜4Ÿ>™>Ó+Õ,ä˜$¤§¡Ô-Ü ØGóð ð �;‰;œ%Ÿ,™, uÓ-Ò-Ü Ð!?Ó@Ð@ØÔ#6×#AÑ#AÒAÜ�J‰J�t˜\Ô*à×ÑÔàÔ2×=Ñ=Ò=ÄØŒb�j‰jôBð —‘“ Ñ'‰à—‘“ × 1Ñ 1Ó 3Ñ3ˆô
 Ð)Ó*¨aÒ/‰Ð5Jð ô Ø×ÑØÜ!ØØØØ"<ô	
ô	ð 	rN   Úcreate_streamÚ
file_queueÚresult_queueÚplannerr�   Ú	use_fsyncÚthread_countc	                 ób  — 	 	 |j                  «       \  }	}
}t        j                  j                  «       }t	        t        |d «      }|dk(  rMt        j
                  j                  «       s|r-|j                  «       r|dkD  rt        |j                  |¬«      }nt        |j                  «      }|D �cg c]"  }|j                  t        j                  k7  sŒ!|‘Œ$ }}|D ]  }|j                  t        |«      |«       Œ |j                  «        |D �cg c]"  }|j                  t        j                  k(  sŒ!|‘Œ$ }}g } | |	d«      5 }|D ]2  }|j                  |«      }|j!                  t#        |||||
|«      «       Œ4 i }i }|j%                  «       D ]�  \  }}|j&                  st)        d«      ‚|j!                  t#        |||||
|«      «       |||j*                  j,                  <   d|j.                  j0                  j2                  i||j*                  j,                  <   Œ� |t4        j6                  k(  rUddlm} |j=                   ||t>        tA        jB                  |«      tD        tG        tH        «      tJ        tL        i¬«      «       |r$	 tO        jP                  |jS                  «       «       |j[                  «        d d d «       |j]                  |«       �ŒÖc c}w c c}w # tT        tV        f$ r tO        jX                  «        Y ŒZw xY w# 1 sw Y   ŒOxY w# t^        j`                  $ r Y y w xY w)	Nr›   r   )r�   ÚwbzTensor must be on CPUÚsaved_offsets)rò   )Úmetadata)1Ú
get_nowaitrl   Ú_CÚ_get_privateuse1_backend_nameÚgetattrr‹   Úis_availabler   Úresolve_datarn   rž   r)   rÛ   rb   r×   rf   rs   rô   rh   Úis_cpur£   rë   ÚfqnrÑ   ÚchunkÚoffsetsr4   rV   Úsafetensors.torchrò   rÂ   r   ÚjsonÚdumpsr   rJ   r   r   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_dictÚmetadata_dictr}   rò   s                             rD   Ú_write_files_from_queuer  w  s   € ð\ØØ2<×2GÑ2GÓ2IÑ/ˆI�{ Kô #(§(¡(×"HÑ"HÓ"JÐÜ '¬Ð/BÀDÓ IÐð  Ò!ä—J‘J×+Ñ+Ô-Ù)Ð.?×.LÑ.LÔ.Nà'¨!Ò+ä.Ø×(Ñ(Ø(;ô‘ô
 *Ø×(Ñ(ó�ð &1ÖU˜r°B·G±G¼}×?TÑ?TÓ4TšÐUˆHÐUØ&ò ?�
Ø—
‘
œ: jÓ1°:Õ>ð?à× Ñ Ô"à$/ÖT˜b°2·7±7¼m×>SÑ>SÓ3S’rÐTˆGÐTØˆMá˜y¨$Ó/ð 5°6Ø")ò �JØ"×/Ñ/°
Ó;�DØ!×(Ñ(Ü#Ø&Ø"Ø Ø&Ø'Ø0óõ	ðð !�Ø "�Ø*0¯-©-«/ò Ñ&�F˜JØ!Ÿ=š=Ü,Ð-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à—L‘LÙØ'ä 3´T·Z±ZÀÓ5NÜ /´´^Ó1DÜ *¬Lð&ôô	ñ ð"ÜŸ™ §¡£Ô1ð —‘”÷k5ðl ×Ñ˜]Ô+ñs ùò6 Vùò
 Uøôl +Ô,@ÐAò "ÜŸ™ž	ð"ú÷g5ð 5ûôn �;‰;ò Ùðúss   ‚B/L Â1"KÃKÃ8L Ä"KÄ3KÄ7L ÅELÊ#K#Ê.LÊ>%L Ë##L	ÌLÌL	Ì	LÌLÌL ÌL.Ì-L.c                   ó:  — e Zd Zeedeej                  z  dedee	j                  ddf   fd„«       «       Zedeej                  z  dedeej                  z  fd„«       Zedeej                  z  deej                  z  ddfd	„«       Zedeej                  z  deej                  z  fd
„«       Zedeej                  z  ddfd„«       Zeedeej                  z  defd„«       «       Zedeej                  z  defd„«       Zedeej                  z  ddfd„«       Zy)r3   ÚpathÚmoderW   Nc                  ó   — y r>   rM   )rA   r  r  s      rD   rõ   zFileSystemBase.create_streamâ  s   € ð ,/rN   Úsuffixc                  ó   — y r>   rM   ©rA   r  r!  s      rD   Úconcat_pathzFileSystemBase.concat_pathè  s   € ð  rN   Únew_pathc                  ó   — y r>   rM   ©rA   r  r%  s      rD   ÚrenamezFileSystemBase.renameí  s   € ØTWrN   c                  ó   — y r>   rM   ©rA   r  s     rD   Ú	init_pathzFileSystemBase.init_pathð  s   € ØGJrN   c                  ó   — y r>   rM   r*  s     rD   ÚmkdirzFileSystemBase.mkdiró  s   € Ø69rN   Úcheckpoint_idc                  ó   — y r>   rM   ©Úclsr.  s     rD   Úvalidate_checkpoint_idz%FileSystemBase.validate_checkpoint_idö  s   € àORrN   c                  ó   — y r>   rM   r*  s     rD   ÚexistszFileSystemBase.existsú  s   € Ø7:rN   c                  ó   — y r>   rM   r*  s     rD   Úrm_filezFileSystemBase.rm_fileý  s   € Ø8;rN   )rF   rG   rH   r
   r   rJ   r  ÚPathLiker   rÆ   rÇ   rõ   r$  r(  r+  r-  Úclassmethodr¯   r2  r4  r6  rM   rN   rD   r3   r3   á  sr  „ ØØð/Ø˜"Ÿ+™+Ñ%ð/Ø-0ð/à	�2—9‘9˜d DÐ(Ñ	)ò/ó ó ð/ð ð Ø˜"Ÿ+™+Ñ%ð Ø/2ð à	ˆr�{‰{Ñ	ò ó ð ð ØW˜3 §¡Ñ,ÐW¸¸b¿k¹kÑ8IÐWÈdÒWó ØWàØJ˜c B§K¡KÑ/ÐJ°C¸"¿+¹+Ñ4EÒJó ØJàØ9˜# §¡Ñ+Ð9°Ò9ó Ø9àØØR°3¸¿¹Ñ3DÐRÈÒRó ó àRàØ:˜3 §¡Ñ,Ð:°Ò:ó Ø:àØ;˜C "§+¡+Ñ-Ð;°$Ò;ó Ù;rN   r3   c            
       ó  — e Zd Zedeej                  z  dedeej                  ddf   fd„«       Z
deej                  z  dedeej                  z  fd„Zdeej                  z  deej                  z  fd„Zdeej                  z  d	eej                  z  ddfd
„Zdeej                  z  ddfd„Zedeej                  z  defd„«       Zdeej                  z  defd„Zdeej                  z  ddfd„Zdeej                  z  dee   fd„Zy)r2   r  r  rW   Nc              #   óÆ   K  — t        |t        «      st        |«      }|j                  |«      5 }t        t        j
                  |«      –— d d d «       y # 1 sw Y   y xY w­wr>   )rï   r   Úopenr   rÆ   rÇ   )rA   r  r  r€   s       rD   rõ   zFileSystem.create_stream  sM   è ø€ ô ˜$¤Ô%Ü˜“:ˆDØ�Y‰Y�t‹_ð 	* Ü”r—y‘y &Ó)Ò)÷	*÷ 	*ñ 	*üs   ‚-A!¯AÁ	A!ÁAÁA!r!  c                 óB   — t        |t        «      st        |«      }||z  S r>   ©rï   r   r#  s      rD   r$  zFileSystem.concat_path  s   € Ü˜$¤Ô%Ü˜“:ˆDØ�f‰}ÐrN   c                 ó<   — t        |t        «      st        |«      }|S r>   r=  r*  s     rD   r+  zFileSystem.init_path  s   € Ü˜$¤Ô%Ü˜“:ˆDØˆrN   r%  c                 óx   — t        |t        «      st        |«      }|j                  t        t        |«      «       y r>   )rï   r   r(  r   r'  s      rD   r(  zFileSystem.rename  s(   € Ü˜$¤Ô%Ü˜“:ˆDà�‰”Dœ˜xÓ(Õ)rN   c                 ó`   — t        |t        «      st        |«      }|j                  dd¬«       y )NT)ÚparentsÚexist_ok)rï   r   r-  r*  s     rD   r-  zFileSystem.mkdir  s%   € Ü˜$¤Ô%Ü˜“:ˆDØ�
‰
˜4¨$ˆ
Õ/rN   r.  c                 óö   — t        |t        «      rydt        |«      v ryt        |«      j                  D ]B  }|j	                  «       sŒt        j                  t        |«      t
        j                  «      sŒB y y)NTz://F)rï   r   rJ   rA  r4  r  ÚaccessÚW_OK)r1  r.  Úps      rD   r2  z!FileSystem.validate_checkpoint_id   s_   € ä�m¤TÔ*Øà”C˜Ó&Ñ&Øä�mÓ$×,Ñ,ò 	ˆAØ�x‰x�zœbŸi™i¬¨A«´·±Õ8Ùð	ð rN   c                 óX   — t        |t        «      st        |«      }|j                  «       S r>   )rï   r   r4  r*  s     rD   r4  zFileSystem.exists.  s!   € Ü˜$¤Ô%Ü˜“:ˆDØ�{‰{‹}ÐrN   c                 óZ   — t        |t        «      st        |«      }|j                  «        y r>   )rï   r   Úunlinkr*  s     rD   r6  zFileSystem.rm_file3  s   € Ü˜$¤Ô%Ü˜“:ˆDØ�‰�rN   c                 ó�   — t        |t        «      st        |«      }|j                  «       D �cg c]  }t        |«      ‘Œ c}S c c}w r>   )rï   r   ÚiterdirrJ   )rA   r  rF  s      rD   ÚlszFileSystem.ls8  s3   € Ü˜$¤Ô%Ü˜“:ˆDØ $§¡£Ö/˜1”�A•Ò/Ð/ùÒ/s   ®A)rF   rG   rH   r
   rJ   r  r7  r   rÆ   rÇ   rõ   r$  r+  r(  r-  r8  r¯   r2  r4  r6  r°   rL  rM   rN   rD   r2   r2     sa  „ Øð*Ø˜"Ÿ+™+Ñ%ð*Ø-0ð*à	�2—9‘9˜d DÐ(Ñ	)ò*ó ð*ð  b§k¡kÑ 1ð ¸3ð À3ÈÏÉÑCTó ð
˜c B§K¡KÑ/ð °C¸"¿+¹+Ñ4Eó ð
*˜3 §¡Ñ,ð *¸¸b¿k¹kÑ8Ið *Èdó *ð0˜# §¡Ñ+ð 0°ó 0ð
 ð°3¸¿¹Ñ3Dð Èò ó ðð˜3 §¡Ñ,ð °ó ð
˜C "§+¡+Ñ-ð °$ó ð
0�s˜RŸ[™[Ñ(ð 0¨T°#©Yô 0rN   r2   c                   ó2  ‡ — e Zd ZdZddddddej
                  fdeej                  z  de	de	d	e
d
e
de	dee   dz  dedededdfˆ fd„Zd'deej                  z  dz  ddfd„Zde	dededdfd„Zde	fd„Zdedefd„Zdee   dee   fd„Zdededeee      fd„Zdedej6                  deee      fd„Zded eee      ddfd!„Zdedz  fd"„Z d'd#e
dz  dej                  fd$„Z!e"deej                  z  fd%„«       Z#e$deej                  z  de	fd&„«       Z%ˆ xZ&S )(Ú_FileSystemWriteraa  
    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.

    Tr›   é€–˜ Nr  Úsingle_file_per_rankÚ
sync_filesrú   Úper_thread_copy_aheadÚ	overwriteÚ_extensionsré   ÚargsÚkwargsrW   c	                 ó.  •— t         ‰| �  «        t        «       | _        | j                  j	                  |«      | _        || _        || _        || _        || _	        t        «       | _        || _        t        |«      | _        || _        d| _        d| _        y)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)Úsuperrq   r2   Úfsr+  r  rP  rQ  rú   rR  r[   Úsave_idrS  r²   ræ   ré   ÚrankÚuse_collectives)rA   r  rP  rQ  rú   rR  rS  rT  ré   rU  rV  Ú	__class__s              €rD   rq   z_FileSystemWriter.__init__L  s‚   ø€ ô6 	‰ÑÔÜ“,ˆŒØ—G‘G×%Ñ% dÓ+ˆŒ	Ø$8ˆÔ!Ø$ˆŒØ(ˆÔØ%:ˆÔ"Ü%Ó'ˆŒØ"ˆŒÜ2°;Ó?ˆŒØ$8ˆÔ!Ø $ˆŒ	Ø%)ˆÕrN   r.  c                 óf   — |r | j                   j                  |«      | _        t        «       | _        y r>   )rY  r+  r  r[   rZ  ©rA   r.  s     rD   Úresetz_FileSystemWriter.resetu  s%   € ÙØŸ™×)Ñ)¨-Ó8ˆDŒIÜ%Ó'ˆ�rN   Úis_coordinatorc                 ó^   — |j                  d«      | _        |j                  dd«      | _        y )Nr[  r\  T)Úgetr[  r\  )rA   ra  rU  rV  s       rD   Úset_up_storage_writerz'_FileSystemWriter.set_up_storage_writerz  s(   € ð —J‘J˜vÓ&ˆŒ	Ø%Ÿz™zÐ*;¸TÓBˆÕrN   c                 óš   — | j                   r| j                  d ¬«      }n| j                  d¬«      }| j                  j                  |«      S )N)r[  r   )r\  Ú_get_metadata_pathrY  r4  )rA   Úmetadata_paths     rD   Ú_metadata_existsz"_FileSystemWriter._metadata_exists€  sF   € Ø×Òà ×3Ñ3¸Ð3Ó>‰Mð !×3Ñ3¸Ð3Ó;ˆMà�w‰w�~‰~˜mÓ,Ð,rN   Úplanc                 ó¬  — | j                   j                  | j                  «       | j                  «       rX| j                  r3t        j                  d| j                  › d| j                  ›d�d¬«       nt        d| j                  ›d�«      ‚| j                  �:| j                  s.t        j                  |t        d| j                  › d	�«      ¬
«      }|S )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.é   )Ú
stacklevelz-Checkpoint already exists and self.overwrite=ú.Ú__r|   ©rí   )rY  r-  r  rh  rS  ÚwarningsÚwarnr¦   r[  r\  ÚdataclassesÚreplacerP   ©rA   ri  s     rD   Úprepare_local_planz$_FileSystemWriter.prepare_local_plan‹  s¾   € Ø�‰�‰�d—i‘iÔ Ø× Ñ Ô"Ø�~Š~Ü—‘Ø9¸$¿)¹)¸ÐDhÐY]×YgÑYgÐXið jkð kð  !ö	ô #Ð%SÀDÇNÁNÐCTÐTUÐ#VÓWÐWà�9‰9Ð ¨×)=Ò)=Ü×&Ñ&Ø¤>°B°t·y±y°kÀÐ2CÓ#DôˆDð ˆrN   Úplansc                 ó¬   — t        |«      D ��cg c]7  \  }}|j                  €$t        j                  |t	        d|› d�«      ¬«      n|‘Œ9 }}}|S c c}}w )Nrn  r|   ro  )rÝ   rí   rr  rs  rP   )rA   rv  rä   ri  Ú	new_planss        rD   Úprepare_global_planz%_FileSystemWriter.prepare_global_planŸ  si   € ô
 % UÓ+÷	
ñ ��4ð × Ñ Ð(ô ×Ñ ´>ÀBÀqÀcÈÀ)Ó3LÕMàñð
ˆ	ñ 
ð Ðùó
s   �<Arø   c                 ó  ‡	‡
— |j                   Š
dŠ	ˆ	ˆ
fd„}t        j                  «       }| j                  rgt	        | j
                  |j                  «      D ]C  } |«       }| j                  j                  | j                  |«      }|j                  |||f«       ŒE nS|j                  D ]D  } |«       }| j                  j                  | j                  |«      }|j                  |||gf«       ŒF | j                  ||«      S )Nr   c                  ó>   •— ‰j                   › ‰› t        › �} ‰dz  Š| S )Nr›   )rQ   ÚDEFAULT_SUFFIX)r  Ú
file_countÚstorage_plans    €€rD   Úgen_filez._FileSystemWriter.write_data.<locals>.gen_file°  s,   ø€ à'×.Ñ.Ð/°
¨|¼NÐ;KÐLˆIØ˜!‰OˆJØÐrN   )rí   r  ÚQueuerP  rå   rú   r@   rY  r$  r  r  Ú_write_data)rA   ri  rø   r  rö   Úbucketr  r  rÏ   r}  r~  s            @@rD   Ú
write_dataz_FileSystemWriter.write_data¨  sä   ù€ ð
 (,×'8Ñ'8ˆØˆ
õ	ô #(§+¡+£-ˆ
Ø×$Ò$Ü1°$×2CÑ2CÀTÇZÁZÓPò :�Ù$›J�	Ø—w‘w×*Ñ*¨4¯9©9°iÓ@�Ø—‘  i°Ð8Õ9ñ:ð
 Ÿ
™
ò :�Ù$›J�	Ø—w‘w×*Ñ*¨4¯9©9°iÓ@�Ø—‘  i°$°Ð8Õ9ð:ð
 ×Ñ ¨Ó4Ð4rN   rö   c                 óø  — t        j                  «       }g }t        d| j                  «      D ]�  }t	        j
                  t        | j                  j                  |||| j                  | j                  | j                  | j                  | j                  f	¬«      }|j                  «        |j                  |«       Œ� t        | j                  j                  |||| j                  | j                  | j                  | j                  | j                  ¬«	       |D ]  }|j                  «        Œ g }	 	 ||j!                  «       z  }Œ# t         j"                  $ r  t%        «       }|j'                  |«       |cY S w xY w)Nr›   )ÚtargetrU  )	rõ   rö   r÷   rø   ræ   r�   rù   rú   ré   )r  r€  rÜ   rú   Ú	threadingÚThreadr  rY  rõ   ræ   rR  rQ  ré   Ústartrs   Újoinrÿ   r  r/   Ú
set_result)	rA   rø   rö   r÷   Úthreadsr|   ÚtÚresÚfuts	            rD   r�  z_FileSystemWriter._write_dataÄ  sS  € ô
 %*§K¡K£MˆàˆÜ�q˜$×+Ñ+Ó,ò 	ˆAÜ× Ñ Ü.à—G‘G×)Ñ)ØØ ØØ—O‘OØ×.Ñ.Ø—O‘OØ×%Ñ%Ø×-Ñ-ð
ôˆAð �G‰GŒIØ�N‰N˜1Õð!	ô$ 	 ØŸ'™'×/Ñ/Ø!Ø%ØØ—‘Ø $× :Ñ :Ø—o‘oØ×*Ñ*Ø!%×!:Ñ!:õ
	
ð ò 	ˆAØ�F‰F�Hð	ð ˆð	ØØ�|×.Ñ.Ó0Ñ0�ð øä�{‰{ò 	Ü-3«XˆCØ�N‰N˜3ÔØŠJð	ús   Ä1E Å0E9Å8E9rþ   Úresultsc                 ó8  — t        j                  |t        ¬«      }i }|D ]6  }|j                  |D �ci c]  }|j                  |j
                  “Œ c}«       Œ8 ||_        | j                  «       |_        | j                  s"| j                  �d| j                  › t        › d�nt        › d�}t        t        | j                  j                  | j                  |«      «      }| j                  j                  |d«      5 }t!        j"                  ||«       | j$                  r$	 t'        j(                  |j+                  «       «       d d d «       | j                  s(| j                  �| j3                  | j                  «      }	n| j3                  «       }	| j                  j5                  |	«      r| j                  j7                  |	«       | j                  j9                  ||	«       y c c}w # t,        t.        f$ r t'        j0                  «        Y ŒÉw xY w# 1 sw Y   ŒÎxY w)N)Úversionrn  z.tmprü   )rr  rs  r6   Úupdaterë   rí   Ústorage_metar\  r[  r5   r   r   rY  r$  r  rõ   ÚpickleÚdumprQ  r  r  r  r  r   r  rf  r4  r6  r(  )
rA   rþ   r�  Ú
storage_mdÚwr_listÚwrÚtmp_filenameÚtmp_pathÚmetadata_filerg  s
             rD   Úfinishz_FileSystemWriter.finishö  s®  € Ü×&Ñ& xÔ9LÔMˆàˆ
Øò 	MˆGØ×ÑÀ7ÖK¸R˜rŸx™x¨¯©Ñ8ÒKÕLð	Mà *ˆÔà $× 1Ñ 1Ó 3ˆÔð ×'Ò'¨D¯I©IÐ,Að �—‘�œL˜>¨Ñ.ä �> Ð&ð 	ô
 œ˜dŸg™g×1Ñ1°$·)±)¸\ÓJÓKˆØ�W‰W×"Ñ" 8¨TÓ2ð 	°mÜ�K‰K˜ -Ô0Ø�ŠðÜ—H‘H˜]×1Ñ1Ó3Ô4÷		ð ×#Ò#¨¯	©	Ð(=Ø ×3Ñ3°D·I±IÓ>‰Mà ×3Ñ3Ó5ˆMà�7‰7�>‰>˜-Ô(Ø�G‰G�O‰O˜MÔ*à�‰�‰�x Õ/ùò7 Løô 'Ô(<Ð=ò Ü—G‘G–Iðú÷	ð 	ús/   ²G"
Ã<#HÄ #G'Ç'#HÈ
HÈHÈHÈHc                 óD   — t        | j                  | j                  ¬«      S )N)r.  rZ  )r!   r.  rZ  re   s    rD   r“  z_FileSystemWriter.storage_meta  s   € Ü¨×);Ñ);ÀTÇ\Á\ÔRÐRrN   r[  c                 ó’   — |€t         › n
d|› t         › �}t        t        | j                  j	                  | j
                  |«      «      S ©Nrn  ©r5   r   r   rY  r$  r  ©rA   r[  Úfilenames      rD   rf  z$_FileSystemWriter._get_metadata_path  ó<   € Ø(,¨”l‘^¸B¸t¸fÄ\ÀNÐ:SˆÜ”D˜$Ÿ'™'×-Ñ-¨d¯i©i¸ÓBÓCÐCrN   c                 ó   — | j                   S )zT
        return the checkpoint_id that will be used to save the checkpoint.
        ©r  re   s    rD   r.  z_FileSystemWriter.checkpoint_id  ó   € ð
 �y‰yÐrN   c                 ó,   — t         j                  |«      S r>   ©r2   r2  r0  s     rD   r2  z(_FileSystemWriter.validate_checkpoint_id&  ó   € ä×0Ñ0°Ó?Ð?rN   r>   )'rF   rG   rH   rI   r4   rU   rJ   r  r7  r¯   rL   r	   r   r   rq   r`  rd  rh  r&   ru  r°   ry  r'   r/   r-   rƒ  r  r€  r�  r   rœ  r!   r“  rf  r®   r.  r8  r2  Ú__classcell__©r]  s   @rD   rN  rN  >  s4  ø„ ñð  &*ØØØ%/ØØAEØ4G×4RÑ4Rñ'*à�B—K‘KÑð'*ð #ð'*ð ð	'*ð
 ð'*ð  #ð'*ð ð'*ð Ð6Ñ7¸$Ñ>ð'*ð 2ð'*ð ð'*ð ð'*ð 
õ'*ñR( 3¨¯©Ñ#4°tÑ#;ð (Àtó (ð
CØ"ðCØ+.ðCØ:=ðCà	óCð	- $ó 	-ð xð °Hó ð(¨¨h©ð ¸DÀ¹Nó ð5àð5ð ð5ð 
��[Ñ!Ñ	"ó	5ð80àð0ð —K‘Kð0ð 
��[Ñ!Ñ	"ó	0ðd 0˜xð  0°$°t¸KÑ7HÑ2Ið  0Èdó  0ðDS˜k¨DÑ0ó SñD s¨T¡zð D¸R¿[¹[ó Dð ð˜s R§[¡[Ñ0ò ó ðð ð@°3¸¿¹Ñ3Dð @Èò @ó ô@rN   rN  c            	       óR   — e Zd ZdZd
dedz  ddfd„Zdedee   de	e
   de	e
   fd	„Zy)Ú_StorageReaderTransformsr³   NÚextension_registryrW   c                 ó6   — |€t        «       | _        y || _        y r>   )r   r®  )rA   r®  s     rD   rq   z!_StorageReaderTransforms.__init__2  s!   € à#5Ð#=ÔÓð 	ÕØCUð 	ÕrN   Ú	read_itemr<   r·   c                 ó’   — | j                   j                  |«      }|}|D ]$  }t        |t        «      sŒ|j	                  |«      }Œ& |S r>   )r®  Úfrom_descriptor_listrï   r   Útransform_from)rA   r°  r<   r·   r´   r³  rÍ   s          rD   Útransform_load_streamz._StorageReaderTransforms.transform_load_stream7  sT   € ð ×,Ñ,×AÑAÐBWÓXˆ
Ø#ˆØò 	CˆBÜ˜"Ô6Õ7Ø!#×!2Ñ!2°>Ó!B‘ð	Cð ÐrN   r>   )rF   rG   rH   rI   r   rq   r%   r	   rJ   r   rÉ   r´  rM   rN   rD   r­  r­  +  sW   „ ññ
Ð+<¸tÑ+Cð 
Ètó 
ð
àðð  (¨™}ðð �u‘Ið	ð
 
ˆE‰ôrN   r­  c            
       óž  ‡ — e Zd Z	 ddeej
                  z  dedz  ddfˆ fd„Zdede	e
   fd„Zddeej
                  z  dz  ddfd	„Zd
ededed   fd„Zddedz  dej
                  fd„Zdededefd„Zdededededdf
d„Zd
edefd„Zdee   dee   fd„Zedeej
                  z  fd„«       Zedeej
                  z  defd„«       Zˆ xZS )r1   Nr  Ú_extension_registryrW   c                 óè   •— t         ‰| �  «        t        «       | _        | j                  j	                  |«      | _        i | _        t        «       | _        t        |«      | _
        d | _        d| _        y r¾   )rX  rq   r2   rY  r+  r  rí   r[   Úload_idr­  ræ   r[  r\  )rA   r  r¶  r]  s      €rD   rq   zFileSystemReader.__init__F  s]   ø€ ô
 	‰ÑÔÜ“,ˆŒØ—G‘G×%Ñ% dÓ+ˆŒ	Ø,.ˆÔÜ%Ó'ˆŒÜ2Ð3FÓGˆŒØˆŒ	Ø#ˆÕrN   Úsinfoc                 ón   — t        t        t           t        ||j                  |j
                  «      «      S r>   )r   r   rÉ   r.   r:   r;   )rA   Úfiler¹  s      rD   Ú_slice_filezFileSystemReader._slice_fileT  s%   € Ü”B”u‘IÔ0°°u·|±|ÀUÇ\Á\ÓRÓSÐSrN   r.  c                 ót   — i | _         |r | j                  j                  |«      | _        t	        «       | _        y r>   )rí   rY  r+  r  r[   r¸  r_  s     rD   r`  zFileSystemReader.resetW  s-   € ØˆÔÙØŸ™×)Ñ)¨-Ó8ˆDŒIÜ%Ó'ˆ�rN   ri  rø   c                 ó´  — i }|j                   D ]H  }| j                  |j                     }|j                  }|j	                  |g «      j                  |«       ŒJ |j                  «       D �]B  \  }}| j                  j                  | j                  |«      }	| j                  j                  |	d«      5 }
|D �]ê  }| j                  |j                     }| j                  |
|«      }| j                  j                  ||j                  xs d|«      }|j                  t        j                   k(  rHt#        j$                  |j'                  d«      «      }|j)                  d«       |j+                  ||«       Œ¿|j-                  «       r|}n5t#        j$                  |j'                  d«      «      }|j)                  d«       t/        t0        t3        j4                  |dd¬«      «      }t7        ||j8                  |j:                  «      }|j=                  |«      j?                  «       }|jA                  «       |jA                  «       k7  r:tC        d|j                  › d	|jA                  «       › d
|jA                  «       › �«      ‚|jE                  |«       |jG                  ||«       �Œí 	 d d d «       �ŒE tI        «       }|jK                  d «       |S # 1 sw Y   �ŒmxY w)NÚrbrM   éÿÿÿÿr   rw   T)Úmap_locationÚweights_onlyzreq z mismatch sizes z vs )&r@   rí   Ústorage_indexr9   Ú
setdefaultrs   rY  r$  r  rõ   r¼  ræ   r´  r<   rž   r"   rÛ   rÆ   rð   ÚreadÚseekÚ
load_bytesÚseekabler   r   rl   Úloadr   Ústorage_offsetsÚlengthsÚresolve_tensorrv   r^   r£   Úcopy_Úcommit_tensorr/   rŠ  )rA   ri  rø   Úper_filer°  Úitem_mdr  r9   Úreqsr%  r€   ÚreqÚ
file_slicer³  Ú
read_bytesrÈ  r}   Útarget_tensorrŽ  s                      rD   Ú	read_datazFileSystemReader.read_data]  s—  € à.0ˆØŸ™ò 	<ˆIØ$(×$5Ñ$5°i×6MÑ6MÑ$NˆGØ×(Ñ(ˆDØ×Ñ  bÓ)×0Ñ0°Õ;ð	<ð
 $,§>¡>Ó#3ó .	BÑˆM˜4Ø—w‘w×*Ñ*¨4¯9©9°mÓDˆHØ—‘×&Ñ& x°Ó6ð ,B¸&àó *B�CØ"×/Ñ/°×0AÑ0AÑB�GØ!%×!1Ñ!1°&¸'Ó!B�JØ%)§_¡_×%JÑ%JØð  ×5Ñ5Ò;¸Ø"ó&�Nð —x‘x¤<×#7Ñ#7Ò7Ü%'§Z¡Z°×0CÑ0CÀBÓ0GÓ%H˜
Ø"Ÿ™¨Ô*Ø×*Ñ*¨3°
Õ;à)×2Ñ2Ô4Ø'5™Hô (*§z¡z°.×2EÑ2EÀbÓ2IÓ'J˜HØ$ŸM™M¨!Ô,ä!%Ü"Ü!ŸJ™JØ (Ø-2Ø-1ôó"˜ô "8Ø" C×$7Ñ$7¸¿¹ó"˜ð )0×(>Ñ(>¸sÓ(C×(JÑ(JÓ(L˜à(×-Ñ-Ó/°6·;±;³=Ò@Ü"0Ø"& s×'8Ñ'8Ð&9Ð9IÈ-×J\ÑJ\ÓJ^ÐI_Ð_cÐdj×doÑdoÓdqÐcrÐ só#ð ð &×+Ñ+¨FÔ3Ø×-Ñ-¨c°=ÖAñU*B÷,Bñ ,Bð.	Bô` “hˆØ�‰�tÔØˆ
÷a,Bñ ,Bús   Â3G1KËK	r[  c                 ó’   — |€t         › n
d|› t         › �}t        t        | j                  j	                  | j
                  |«      «      S rŸ  r   r¡  s      rD   rf  z#FileSystemReader._get_metadata_path™  r£  rN   rU  rV  c                 óD  — |j                  d«      }| j                  |«      }| j                  j                  |d«      5 }t	        j
                  |«      }d d d «       t        dd «      €t        «       |_        | j                  |j                  _	        |S # 1 sw Y   ŒBxY w)Nr[  r¿  r“  )
rc  rf  rY  rõ   r”  rÉ  r  r!   r“  r¸  )rA   rU  rV  r[  r  r›  rþ   s          rD   Úread_metadatazFileSystemReader.read_metadataž  s‹   € Ø�z‰z˜&Ó!ˆØ×&Ñ& tÓ,ˆØ�W‰W×"Ñ" 4¨Ó.ð 	2°-Ü—{‘{ =Ó1ˆH÷	2ô �8˜^¨TÓ2Ð:Ü$/£MˆHÔ!Ø(,¯©ˆ×ÑÔ%àˆ÷	2ð 	2ús   ¿BÂBrþ   ra  c                 ó®   — |j                   | _         |j                  d«      | _        |j                  dd«      | _        | j                   €t	        d«      ‚y )Nr[  r\  Tz)storage_data must not be None in metadata)rí   rc  r[  r\  r£   )rA   rþ   ra  rU  rV  s        rD   Úset_up_storage_readerz&FileSystemReader.set_up_storage_readerª  sS   € ð %×1Ñ1ˆÔØ—J‘J˜vÓ&ˆŒ	Ø%Ÿz™zÐ*;¸TÓBˆÔØ×ÑÐ$Ü Ð!LÓMÐMð %rN   c                 ó   — |S r>   rM   rt  s     rD   ru  z#FileSystemReader.prepare_local_plan³  s   € ØˆrN   rv  c                 ó   — |S r>   rM   )rA   rv  s     rD   ry  z$FileSystemReader.prepare_global_plan¶  s   € ØˆrN   c                 ó   — | j                   S )zT
        return the checkpoint_id that will be used to load the checkpoint.
        r¥  re   s    rD   r.  zFileSystemReader.checkpoint_id¹  r¦  rN   c                 ó,   — t         j                  |«      S r>   r¨  r0  s     rD   r2  z'FileSystemReader.validate_checkpoint_idÀ  r©  rN   r>   ) rF   rG   rH   rJ   r  r7  r   rq   r8   r   rÉ   r¼  r`  r#   r$   r/   rÖ  rL   rf  r   r   rÙ  r¯   rÛ  ru  r°   ry  r®   r.  r8  r2  rª  r«  s   @rD   r1   r1   E  s}  ø„ ð 9=ñ$à�B—K‘KÑð$ð /°Ñ5ð$ð 
õ	$ðT |ð T¸¸5¹	ó Tñ( 3¨¯©Ñ#4°tÑ#;ð (Àtó (ð:˜hð :°ð :ÀÈÁó :ñxD s¨T¡zð D¸R¿[¹[ó Dð

 3ð 
°#ð 
¸(ó 
ðNØ ðNØ26ðNØ?BðNØNQðNà	óNð xð °Hó ð¨¨h©ð ¸DÀ¹Nó ð ð˜s R§[¡[Ñ0ò ó ðð ð@°3¸¿¹Ñ3Dð @Èò @ó ô@rN   r1   c                   ó¨   ‡ — e Zd ZdZdddddddej
                  fdeej                  z  de	d	e	d
e
de
de	de	dee   dz  deddfd„Zdedefˆ fd„Zˆ xZS )r0   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›   rO  FNr  rP  rQ  rú   rR  Úcache_staged_state_dictrS  rT  ré   rW   c
                 ón   — t         j                  | ||||||||	¬«	       t        j                  | |¬«       y)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.
        )r  rP  rQ  rú   rR  rS  rT  ré   )rá  N)rN  rq   r*   )
rA   r  rP  rQ  rú   rR  rá  rS  rT  ré   s
             rD   rq   zFileSystemWriter.__init__Ô  sH   € ô: 	×"Ñ"ØØØ!5Ø!Ø%Ø"7ØØ#Ø!5ð 	#ô 
	
ô 	×$Ñ$ØØ$;ö	
rN   Ú
state_dictc                 ó0   •— d| _         t        ‰| �	  |«      S )zOverride of AsyncStager.stager   )rR  rX  Ústage)rA   rã  r]  s     €rD   rå  zFileSystemWriter.stage  s   ø€ ð &'ˆÔ"Ü‰w‰}˜ZÓ(Ð(rN   )rF   rG   rH   rI   r4   rU   rJ   r  r7  r¯   rL   r	   r   rq   r    rå  rª  r«  s   @rD   r0   r0   Å  s¼   ø„ ñð" &*ØØØ%/Ø(-ØØAEØ4G×4RÑ4Rñ+
à�B—K‘KÑð+
ð #ð+
ð ð	+
ð
 ð+
ð  #ð+
ð "&ð+
ð ð+
ð Ð6Ñ7¸$Ñ>ð+
ð 2ð+
ð 
ó+
ðZ) ð )°O÷ )ñ )rN   r0   )hr„   rr  rÆ   r
  r«   r  r”  r  r†  rY   rp  Úabcr   r   Úcollections.abcr   r   r   r   r	   Ú
contextlibr
   r   Úenumr   r   Úpathlibr   Útypingr   r   r   r   Útyping_extensionsr   rl   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__r5   rJ   rK   r6   r8   rP   r4   r|  r[   r]   rn   r   r²   rL   r×   r°   rå   rÇ   rð   rô   r€  r¯   r  r3   r2   rN  r­  r1   r0   rM   rN   rD   ú<module>rø     s£  ðä Û Û 	Û Û Û 	Û Û Û Û Û ß #ß MÕ MÝ %Ý !Ý Ý #Ý ß 'Ó 'õ %ã Ý ß GÝ B÷÷õ ÷ YÑ X÷	÷ 	ó 	õ E÷ñ õ
 AÝ  ò€ð  €ˆcÓ à")Ð �U˜3‘ZÓ )ð ÷	Ið 	Ió ð	Ið ÷ð ó ðô ˜$ô  ð
 €ð˜ó ô�Cô ô�}ô ô0X"˜Mô X"÷v0Yñ 0Yðf	4�Yð 	4 3ó 	4ð #ð ¨d°9©oð À$ÀtÈIÁÑBWó ð04Ø(ð4à�I‰Ið4ð �*‰*�u—|‘|Ñ
#ð4ð ð	4ð
 ð4ð .ð4ð ó4ðngØðgà—‘ðgð —+‘+ðgð ð	gð
 )ðgð ðgð ðgð ðgð .ðgð 
ógôT<�Sô <ô@:0�ô :0ôzj@˜ô j@÷Zñ ô4}@�}ô }@ô@A)Ð(Ð*=õ A)rN   