Ë
    óÍ:j�…  ã                   ó  — 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 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZm Z m!Z! d d
l"m#Z# 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/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZF d dlGmHZH d dlImJZJ g d¢ZKdZLeMeNd<   e G d„ d«      «       ZOe G d„ d«      «       ZP G d„ de«      ZQdZRd eMf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d.„Z[d/eWd0ej¸                  d1e!ejº                  e$jJ                  f   d2e?d3eMd4eQd eFfd5„Z^d6ed7ej¾                  d8ej¾                  d9e>d/eWd:eXd;e`d<eXd4eQd dfd=„Za G d>„ d?e«      Zb G d@„ dAeb«      Zc G dB„ dCeE«      Zd G dD„ dE«      Ze G dF„ dGeD«      Zf G dH„ dIedeB«      Zgy)Jé    N)ÚABCÚabstractmethod)Ú	GeneratorÚIterableÚIteratorÚSequence)Úcontextmanager)Ú	dataclass)ÚEnum)ÚUnsupportedOperation)ÚPath)ÚAnyÚCallableÚcastÚIOÚOptionalÚUnion)Ú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ÚSerializationFormatú	.metadataÚ_metadata_fnc                   óP   — e Zd ZU dZeed<   eed<   eed<   dZee	e      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      ú|/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/distributed/checkpoint/filesystem.pyÚ__getstate__z_StorageInfo.__getstate__Q   s/   € Ø!%§¡×!4Ñ!4Ó!6×H™˜˜A¸!¹-��1‘ÓHÐHùÓHs   ž
2©2)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úintr=   r   r   rF   © ó    rE   r9   r9   H   s/   … á-àÓØƒKØƒKØ59Ð˜8 H¨S¡MÑ2Ó9óIrO   r9   c                   ó   — e Zd ZU eed<   y)Ú_StoragePrefixÚprefixN)rG   rH   rI   rK   rL   rN   rO   rE   rQ   rQ   U   s   … à„KrO   rQ   c                   ó   — e Zd ZdZdZy)r5   Ú
torch_saveÚsafetensorsN)rG   rH   rI   Ú
TORCH_SAVEÚSAFETENSORSrN   rO   rE   r5   r5   Z   s   „ Ø€JØ�KrO   r5   z.distcpÚreturnc                  ó<   — t        t        j                  «       «      S r?   )rK   ÚuuidÚuuid4rN   rO   rE   Ú_generate_uuidr\   b   s   € ÜŒt�z‰z‹|ÓÐrO   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ÚobjrX   Nc                  ó   — y r?   rN   ©rB   r_   r`   s      rE   Úaddz_TensorLoader.addg   ó   € àrO   c                  ó   — y r?   rN   ©rB   s    rE   Ústart_loadingz_TensorLoader.start_loadingk   rd   rO   c                  ó   — y r?   rN   rf   s    rE   Úvaluesz_TensorLoader.valueso   rd   rO   ©rX   N)rG   rH   rI   r   rM   Úobjectrc   rg   r   ÚtupleÚtorchr   ri   rN   rO   rE   r^   r^   f   sk   „ Øð˜ð  &ð ¨Tò ó ðð òó ðð ð˜  u§|¡|°VÐ';Ñ!<Ñ=ò ó ñrO   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_funrX   Nc                 ó    — || _         g | _        y r?   )rp   rA   )rB   rp   s     rE   Ú__init__z_SerialCpuLoader.__init__u   s   € Ø&ˆÔØ/1ˆ�
rO   r_   r`   c                 ó>   — | j                   j                  ||f«       y r?   )rA   Úappendrb   s      rE   rc   z_SerialCpuLoader.addy   s   € Ø�
‰
×Ñ˜4 ˜+Õ&rO   c                  ó   — y r?   rN   rf   s    rE   rg   z_SerialCpuLoader.start_loading|   ó   € ØrO   c              #   ó  K  — | j                   D ]y  \  }}| j                  |«      j                  «       }|j                  «       }|j	                  «       j                  «       |j                  «       k7  r|j                  «       }||f–— Œ{ y ­wr?   )rA   rp   ÚdetachÚcpuÚstorager_   ÚnumelÚclone©rB   Ú_r`   Útensors       rE   ri   z_SerialCpuLoader.values   sz   è ø€ Ø—j‘jò 	‰FˆAˆsØ×%Ñ% cÓ*×1Ñ1Ó3ˆFØ—Z‘Z“\ˆFØ�~‰~Ó×$Ñ$Ó&¨&¯,©,«.Ò8ØŸ™›�àØðó ñ	ùs   ‚B
Brj   )rG   rH   rI   r   rr   rM   rk   rc   rg   r   rl   rm   r   ri   rN   rO   rE   ro   ro   t   sS   „ ð2 Hð 2°ó 2ð'˜ð ' &ð '¨Tó 'óð	˜  u§|¡|°VÐ';Ñ!<Ñ=ô 	rO   ro   c            	       ó  — e Zd Z	 	 ddedeej                     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)Ú_OverlappingCpuLoaderNrp   ÚstreamÚinflight_threshholdrX   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)rp   rA   rƒ   Úin_flight_dataÚcollectionsÚdequeÚcurrent_itemsÚidxÚstartedÚdevice_typer   r   Údevice_moduler   rm   ÚcudaÚStreamÚcurrent_streamr‚   Úwait_stream)rB   rp   r‚   rƒ   s       rE   rr   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ð >rO   c                 óF   — | j                   t        | j                  «      k\  S r?   )r‰   ÚlenrA   rf   s    rE   Ú_donez_OverlappingCpuLoader._done£   s   € à�x‰xœ3˜tŸz™z›?Ñ*Ð*rO   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ˆ   Úpopleftr{   Úelement_sizert   )rB   ÚdrainedÚvals      rE   Ú_drainz_OverlappingCpuLoader._drain§   s©   € ØˆØ×Ñ $×":Ñ":Ò:Ø�K‰K×#Ñ#Ô%Ø×!Ñ! T×%=Ñ%=Ò=Ø×$Ñ$×,Ñ,Ó.ˆCØ×Ò 3 q¡6§<¡<£>°C¸±F×4GÑ4GÓ4IÑ#IÑIÕØ�N‰N˜3Ôð ×!Ñ! T×%=Ñ%=Ó=ð ˆrO   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é   ry   T)ÚdeviceÚnon_blocking)rŒ   r‚   r“   r…   rƒ   rA   r‰   rp   rx   rž   Útyper‹   Útorm   Úuntyped_storager_   r{   Úitemsizer|   rˆ   rt   r˜   r}   s       rE   Ú_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J ‚t        | j                  «      dkD  r| j                  j	                  «        | j                  S r•   )r“   r’   rˆ   r‚   r–   rf   s    rE   Ú_finishz_OverlappingCpuLoader._finishÉ   s=   € Ø�zŠzÐˆzÜˆt×!Ñ!Ó" QÒ&Ø�K‰K×#Ñ#Ô%Ø×!Ñ!Ð!rO   r_   r`   c                 ól   — | j                   rt        d«      ‚| j                  j                  ||f«       y )Nz&cannot add items after loading started)rŠ   ÚRuntimeErrorrA   rt   rb   s      rE   rc   z_OverlappingCpuLoader.addÏ   s+   € Ø�<Š<ÜÐGÓHÐHØ�
‰
×Ñ˜4 ˜+Õ&rO   c                 óª   — | j                   ry d| _         | j                  j                  t        j                  d«      ¬«       | j                  «        y )NTr   ©Úkey)rŠ   rA   ÚsortÚoperatorÚ
itemgetterr¤   rf   s    rE   rg   z#_OverlappingCpuLoader.start_loadingÔ   s9   € Ø�<Š<ØØˆŒØ�
‰
�‰œH×/Ñ/°Ó2ˆÔ3Ø�‰�rO   c              #   óê   K  — | j                  «        | j                  s7| j                  «       }| j                  «        |E d {  –—†  | j                  sŒ7| j	                  «       E d {  –—†  y 7 Œ*7 Œ­wr?   )rg   r“   r›   r¤   r¦   )rB   r™   s     rE   ri   z_OverlappingCpuLoader.valuesÛ   sY   è ø€ Ø×ÑÔØ—*’*Ø—k‘k“mˆGØ�L‰LŒNØ×Ðð —*“*ð
 —<‘<“>×!Ñ!ð øà!ús*   ‚AA3ÁA/ÁA3ÁA3Á)A1Á*A3Á1A3)Ni@B rj   )rG   rH   rI   r   r   rm   rŽ   rM   rr   ÚpropertyÚboolr“   Úlistrl   r   rk   r›   r¤   r   r¦   rc   rg   r   ri   rN   rO   rE   r�   r�   ‹   sà   „ ð *.Ø#,ñ	IàðIð ˜Ÿ™Ñ&ðIð !ð	Ið
 
óIð. ð+�tò +ó ð+ð˜˜U 5§<¡<°Ð#7Ñ8Ñ9ó óNð0"˜ %¨¯©°fÐ(<Ñ"=Ñ>ó "ð'˜ð ' &ð '¨Tó 'ó
ð"˜  u§|¡|°VÐ';Ñ!<Ñ=ô "rO   r�   c            	       ón   — e Zd ZdZ	 d	deee      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Ú
extensionsrX   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.
        NrN   )r¶   )rB   r¶   s     rE   rr   z!_StorageWriterTransforms.__init__ì   s   € ð !+Ð 2˜"ˆ�¸
ˆ�rO   Ú
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½   )rB   r½   s     rE   rr   zN_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__  s	   € Ø�•rO   rX   c                  ó   — y)NTrN   rf   s    rE   Ú	writeablezO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeable  s   € ØrO   Úbc                 ó8   — | j                   j                  |«      S r?   )r½   Úwrite)rB   rÁ   s     rE   rÃ   zK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.write  s   € Ø—x‘x—~‘~ aÓ(Ð(rO   c                 óX   — | j                  «        | j                  j                  «        y r?   )Úflushr½   rf   s    rE   ÚclosezK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close  s   € Ø—
‘
”Ø—‘—‘Õ rO   N)rG   rH   rI   ÚioÚIOBaserr   r±   rÀ   r   rM   rÃ   rÆ   rN   rO   rE   ÚNoCloseWriterr¼     s6   „ ð B§I¡Ió ð 4ó ð)˜vð )¨#ó )ó!rO   rÉ   )	rÇ   rÈ   r   r   Úbytesr¶   Útransform_toÚreversedÚget_descriptor)rB   r¸   r¹   rÉ   rË   Úexs         rE   Ú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?   )rG   rH   rI   rJ   r   r   r   rr   r)   rÇ   rÈ   rl   r   rÊ   r²   rK   rÏ   rN   rO   rE   r´   r´   å   sh   „ ñð JNñ	CØ" 8Ð,DÑ#EÑFð	Cà	ó	CðYØ#ðYØ13·±ðYà	ˆr�%‰y˜$˜s™)Ð#Ñ	$ôYrO   r´   Úitemc                 óæ   — d}| j                   €J ‚| j                   j                  D ]  }||z  }Œ	 | j                   j                  j                  }|t        j
                  j                  |«      z  S ©Nr�   )Útensor_datar_   Ú
propertiesÚdtyperm   Ú_utilsÚ_element_size)rÐ   r_   ÚsrÕ   s       rE   Ú
_item_sizerÙ     sp   € Ø€DØ×ÑÐ'Ð'Ð'à×Ñ×"Ñ"ò ˆØ�‰	‰ðð ×Ñ×'Ñ'×-Ñ-€EØ”%—,‘,×,Ñ,¨UÓ3Ñ3Ð3rO   ÚbinsrA   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Ù   Ú	enumeratert   Úminr­   r®   )
rÚ   rA   ÚwiÚbytes_wÚtensor_wr~   ÚbucketsÚbucket_sizesÚir‰   s
             rE   Ú_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           
      ó"  — |j                  «       }| j                  ||«      \  }}|j                  t        j                  k(  r<t        |t        j                  «      sJ ‚|j                  |j                  «       «       nit        |t        j                  «      sJ ‚|j                  t        j                  d«      k(  sJ ‚|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 )Nry   r   )r=   )ÚindexÚsize_in_bytesÚstorage_data)ÚtellrÏ   r    r*   rÝ   Ú
isinstancerÇ   ÚBytesIOrÃ   Ú	getbufferrm   r   rž   r5   rV   ÚsaverÆ   r{   r˜   r’   r.   rí   r9   )rè   r‚   ré   r¸   rê   rë   r;   rË   r=   r<   Úinfo_transform_descriptorss              rE   Ú_write_itemrö   ;  sS  € ð �[‰[‹]€Fà,6×,LÑ,LØ�Fó-Ñ)€\Ð(ð ‡�œ-×/Ñ/Ò/Ü˜$¤§
¡
Ô+Ð+Ð+Ø×Ñ˜4Ÿ>™>Ó+Õ,ä˜$¤§¡Ô-Ð-Ð-Ø�{‰{œeŸl™l¨5Ó1Ò1Ð1Ð1ØÔ#6×#AÑ#AÒAÜ�J‰J�t˜\Ô*à×ÑÔàÔ2×=Ñ=Ò=ÄØŒb�j‰jôBð —‘“ Ñ'‰à—‘“ × 1Ñ 1Ó 3Ñ3ˆô
 Ð)Ó*¨aÒ/‰Ð5Jð ô Ø×ÑØÜ!ØØØØ"<ô	
ô	ð 	rO   Úcreate_streamÚ
file_queueÚresult_queueÚplannerrƒ   Ú	use_fsyncÚthread_countc	                 óP  — 	 	 |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J ‚|j!                  t#        |||||
|«      «       |||j(                  j*                  <   d|j,                  j.                  j0                  i||j(                  j*                  <   Œ† |t2        j4                  k(  rUddlm} |j;                   ||t<        t?        j@                  |«      tB        tE        tF        «      tH        tJ        i¬«      «       |r$	 tM        jN                  |jQ                  «       «       |jY                  «        d d d «       |j[                  |«       �ŒÍc c}w c c}w # tR        tT        f$ r tM        jV                  «        Y ŒZw xY w# 1 sw Y   ŒOxY w# t\        j^                  $ r Y y w xY w)Nr�   r   )rƒ   ÚwbÚsaved_offsets)rô   )Úmetadata)0Ú
get_nowaitrm   Ú_CÚ_get_privateuse1_backend_nameÚgetattrr�   Úis_availabler�   Úresolve_dataro   r    r*   rÝ   rc   rÙ   rg   rt   rö   ri   Úis_cpurí   ÚfqnrÓ   ÚchunkÚoffsetsr5   rW   Úsafetensors.torchrô   rÃ   r   ÚjsonÚdumpsr   rK   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                             rE   Ú_write_files_from_queuer  m  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¨$Ó/ð 4°6Ø")ò �JØ"×/Ñ/°
Ó;�DØ!×(Ñ(Ü#Ø&Ø"Ø Ø&Ø'Ø0óõ	ðð !�Ø "�Ø*0¯-©-«/ò Ñ&�F˜JØ!Ÿ=š=Ð(˜=Ø!×(Ñ(Ü#Ø&Ø"Ø"Ø&Ø'Ø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ð —‘”÷i4ðj ×Ñ˜]Ô+ñq ùò6 Vùò
 Uøôj +Ô,@ÐAò "ÜŸ™ž	ð"ú÷e4ð 4ûôl �;‰;ò Ùðúss   ‚B/L Â1"KÃKÃ8L Ä"KÄ3KÄ7L ÅD=LÊ#KÊ%LÊ5%L Ë#L Ë=LË?L Ì LÌLÌL ÌL%Ì$L%c                   óf  — e Zd Zeedeeej                  f   dede	e
j                  ddf   fd„«       «       Zedeeej                  f   dedeeej                  f   fd„«       Zedeeej                  f   deeej                  f   ddfd	„«       Zedeeej                  f   deeej                  f   fd
„«       Zedeeej                  f   ddfd„«       Zeedeeej                  f   defd„«       «       Zedeeej                  f   defd„«       Zedeeej                  f   ddfd„«       Zy)r4   ÚpathÚmoderX   Nc                  ó   — y r?   rN   )rB   r   r!  s      rE   r÷   zFileSystemBase.create_stream×  s   € ð ,/rO   Úsuffixc                  ó   — y r?   rN   ©rB   r   r#  s      rE   Úconcat_pathzFileSystemBase.concat_pathÝ  s   € ð #&rO   Únew_pathc                  ó   — y r?   rN   ©rB   r   r'  s      rE   ÚrenamezFileSystemBase.renameâ  s   € ð rO   c                  ó   — y r?   rN   ©rB   r   s     rE   Ú	init_pathzFileSystemBase.init_pathç  s   € ØSVrO   c                  ó   — y r?   rN   r,  s     rE   ÚmkdirzFileSystemBase.mkdirê  s   € Ø<?rO   Úcheckpoint_idc                  ó   — y r?   rN   ©Úclsr0  s     rE   Úvalidate_checkpoint_idz%FileSystemBase.validate_checkpoint_idí  s   € àUXrO   c                  ó   — y r?   rN   r,  s     rE   ÚexistszFileSystemBase.existsñ  s   € Ø=@rO   c                  ó   — y r?   rN   r,  s     rE   Úrm_filezFileSystemBase.rm_fileô  s   € Ø>ArO   )rG   rH   rI   r	   r   r   rK   r  ÚPathLiker   rÇ   rÈ   r÷   r&  r*  r-  r/  Úclassmethodr±   r4  r6  r8  rN   rO   rE   r4   r4   Ö  s¸  „ ØØð/Ø˜#˜rŸ{™{Ð*Ñ+ð/Ø36ð/à	�2—9‘9˜d DÐ(Ñ	)ò/ó ó ð/ð ð&Ø˜#˜rŸ{™{Ð*Ñ+ð&Ø58ð&à	ˆs�B—K‘KÐÑ	 ò&ó ð&ð ðØ˜#˜rŸ{™{Ð*Ñ+ðØ7<¸SÀ"Ç+Á+Ð=MÑ7Nðà	òó ðð ØV˜e C¨¯©Ð$4Ñ5ÐV¸%ÀÀRÇ[Á[Ð@PÑ:QÒVó ØVàØ?˜%  R§[¡[Ð 0Ñ1Ð?°dÒ?ó Ø?àØØX°5¸¸b¿k¹kÐ9IÑ3JÐXÈtÒXó ó àXàØ@˜5  b§k¡kÐ!1Ñ2Ð@°tÒ@ó Ø@àØA˜E # r§{¡{Ð"2Ñ3ÐA¸ÒAó ÙArO   r4   c            
       óJ  — e Zd Zedeeej                  f   dedee	j                  ddf   fd„«       Zdeeej                  f   dedeeej                  f   fd„Zdeeej                  f   deeej                  f   fd„Zdeeej                  f   d	eeej                  f   ddfd
„Zdeeej                  f   ddfd„Zedeeej                  f   defd„«       Zdeeej                  f   defd„Zdeeej                  f   ddfd„Zdeeej                  f   dee   fd„Zy)r3   r   r!  rX   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È   )rB   r   r!  r‚   s       rE   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      rE   r&  zFileSystem.concat_path  s!   € ô ˜$¤Ô%Ü˜“:ˆDØ�f‰}ÐrO   c                 ó<   — t        |t        «      st        |«      }|S r?   r?  r,  s     rE   r-  zFileSystem.init_path	  s   € Ü˜$¤Ô%Ü˜“:ˆDØˆrO   r'  c                 óx   — t        |t        «      st        |«      }|j                  t        t        |«      «       y r?   )rñ   r   r*  r   r)  s      rE   r*  zFileSystem.rename  s*   € ô ˜$¤Ô%Ü˜“:ˆDà�‰”Dœ˜xÓ(Õ)rO   c                 ó`   — t        |t        «      st        |«      }|j                  dd¬«       y )NT)ÚparentsÚexist_ok)rñ   r   r/  r,  s     rE   r/  zFileSystem.mkdir  s%   € Ü˜$¤Ô%Ü˜“:ˆDØ�
‰
˜4¨$ˆ
Õ/rO   r0  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   rK   rC  r6  r  ÚaccessÚW_OK)r3  r0  Úps      rE   r4  z!FileSystem.validate_checkpoint_id  s_   € ä�m¤TÔ*Øà”C˜Ó&Ñ&Øä�mÓ$×,Ñ,ò 	ˆAØ�x‰x�zœbŸi™i¬¨A«´·±Õ8Ùð	ð rO   c                 óX   — t        |t        «      st        |«      }|j                  «       S r?   )rñ   r   r6  r,  s     rE   r6  zFileSystem.exists)  s!   € Ü˜$¤Ô%Ü˜“:ˆDØ�{‰{‹}ÐrO   c                 óZ   — t        |t        «      st        |«      }|j                  «        y r?   )rñ   r   Úunlinkr,  s     rE   r8  zFileSystem.rm_file.  s   € Ü˜$¤Ô%Ü˜“:ˆDØ�‰�rO   c                 ó�   — t        |t        «      st        |«      }|j                  «       D �cg c]  }t        |«      ‘Œ c}S c c}w r?   )rñ   r   ÚiterdirrK   )rB   r   rH  s      rE   ÚlszFileSystem.ls3  s3   € Ü˜$¤Ô%Ü˜“:ˆDØ $§¡£Ö/˜1”�A•Ò/Ð/ùÒ/s   ®A)rG   rH   rI   r	   r   rK   r  r9  r   rÇ   rÈ   r÷   r&  r-  r*  r/  r:  r±   r4  r6  r8  r²   rN  rN   rO   rE   r3   r3   ø  s£  „ Øð*Ø˜#˜rŸ{™{Ð*Ñ+ð*Ø36ð*à	�2—9‘9˜d DÐ(Ñ	)ò*ó ð*ðØ˜#˜rŸ{™{Ð*Ñ+ðØ58ðà	ˆs�B—K‘KÐÑ	 óð˜e C¨¯©Ð$4Ñ5ð ¸%ÀÀRÇ[Á[Ð@PÑ:Qó ð
*Ø˜#˜rŸ{™{Ð*Ñ+ð*Ø7<¸SÀ"Ç+Á+Ð=MÑ7Nð*à	ó*ð0˜%  R§[¡[Ð 0Ñ1ð 0°dó 0ð
 ð°5¸¸b¿k¹kÐ9IÑ3Jð Ètò ó ðð˜5  b§k¡kÐ!1Ñ2ð °tó ð
˜E # r§{¡{Ð"2Ñ3ð ¸ó ð
0�u˜S "§+¡+Ð-Ñ.ð 0°4¸±9ô 0rO   r3   c                   ó2  ‡ — e Zd ZdZddddddej
                  fdeeej                  f   de
de
d	ed
ede
deee      dedededdfˆ fd„Zd%deeej                  df   ddfd„Zde
dd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j8                  deee      fd„Zdedeee      ddfd „Zdee    fd!„Z!e"deeej                  f   fd"„«       Z#e"deeej                  f   fd#„«       Z$e%deeej                  f   de
fd$„«       Z&ˆ xZ'S )&Ú_FileSystemWriterá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 `.metadata` file with the serialized metadata.

    Tr�   é€–˜ Nr   Úsingle_file_per_rankÚ
sync_filesrü   Úper_thread_copy_aheadÚ	overwriteÚ_extensionsrë   ÚargsÚkwargsrX   c	                 ó  •— t         ‰| �  «        t        «       | _        | j                  j	                  |«      | _        || _        || _        || _        || _	        t        «       | _        || _        t        |«      | _        || _        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.
        N)Úsuperrr   r3   Úfsr-  r   rS  rT  rü   rU  r\   Úsave_idrV  r´   rè   rë   )rB   r   rS  rT  rü   rU  rV  rW  rë   rX  rY  Ú	__class__s              €rE   rr   z_FileSystemWriter.__init__G  ss   ø€ ô6 	‰ÑÔÜ“,ˆŒØ—G‘G×%Ñ% dÓ+ˆŒ	Ø$8ˆÔ!Ø$ˆŒØ(ˆÔØ%:ˆÔ"Ü%Ó'ˆŒØ"ˆŒÜ2°;Ó?ˆŒØ$8ˆÕ!rO   r0  c                 óf   — |r | j                   j                  |«      | _        t        «       | _        y r?   )r\  r-  r   r\   r]  ©rB   r0  s     rE   Úresetz_FileSystemWriter.resetn  s%   € ÙØŸ™×)Ñ)¨-Ó8ˆDŒIÜ%Ó'ˆ�rO   Úis_coordinatorc                  ó   — y r?   rN   )rB   rb  s     rE   Úset_up_storage_writerz'_FileSystemWriter.set_up_storage_writers  rv   rO   Úplanc                 óH  — | j                   j                  | j                  «       | j                   j                  | j                  «      rW| j
                  r2t        j                  d| j                  › d| j
                  ›d�«       |S 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.z-Checkpoint already exists and self.overwrite=ú.)	r\  r/  r   r6  Úmetadata_pathrV  ÚwarningsÚwarnr¨   ©rB   re  s     rE   Úprepare_local_planz$_FileSystemWriter.prepare_local_planv  s’   € Ø�‰�‰�d—i‘iÔ Ø�7‰7�>‰>˜$×,Ñ,Ô-Ø�~Š~Ü—‘Ø9¸$×:LÑ:LÐ9MÐMqÐbf×bpÑbpÐarð skð kôð ˆô #Ð%SÀDÇNÁNÐCTÐTUÐ#VÓWÐWàˆrO   Úplansc                 ó�   — t        |«      D ��cg c])  \  }}t        j                  |t        d|› d�«      ¬«      ‘Œ+ }}}|S c c}}w )NÚ__r~   ©rï   )rß   ÚdataclassesÚreplacerQ   )rB   rm  ræ   re  Ú	new_planss        rE   Úprepare_global_planz%_FileSystemWriter.prepare_global_plan„  sQ   € ô % 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 rÒ   )rR   ÚDEFAULT_SUFFIX)r  Ú
file_countÚstorage_plans    €€rE   Úgen_filez._FileSystemWriter.write_data.<locals>.gen_file“  s,   ø€ à'×.Ñ.Ð/°
¨|¼NÐ;KÐLˆIØ˜!‰OˆJØÐrO   )rï   r  ÚQueuerS  rç   rü   rA   r\  r&  r   r  Ú_write_data)rB   re  rú   rz  rø   Úbucketr  r   rÐ   rx  ry  s            @@rE   Ú
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Ð4rO   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�   )ÚtargetrX  )	r÷   rø   rù   rú   rè   rƒ   rû   rü   rë   )r  r{  rÞ   rü   Ú	threadingÚThreadr  r\  r÷   rè   rU  rT  rë   Ústartrt   Újoinr  r  r0   Ú
set_result)	rB   rú   rø   rù   Úthreadsr~   ÚtÚresÚfuts	            rE   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                 óV  — i }|D ]6  }|j                  |D �ci c]  }|j                  |j                  “Œ c}«       Œ8 ||_        | j                  «       |_        t	        t
        | j                  j                  | j                  t        › d�«      «      }| j                  j                  |d«      5 }t        j                  ||«       | j                  r$	 t        j                  |j!                  «       «       d d d «       | j                  j)                  | j*                  «      r%| j                  j-                  | j*                  «       | j                  j/                  || j*                  «       y c c}w # t"        t$        f$ r t        j&                  «        Y Œ£w xY w# 1 sw Y   Œ¨xY w)Nz.tmprþ   )Úupdaterí   rï   Ústorage_metar   r   r\  r&  r   r7   r÷   ÚpickleÚdumprT  r  r  r  r  r   r  r6  rh  r8  r*  )rB   r   rŠ  Ú
storage_mdÚwr_listÚwrÚtmp_pathÚmetadata_files           rE   Úfinishz_FileSystemWriter.finishÙ  sE  € Øˆ
Øò 	MˆGØ×ÑÀ7ÖK¸R˜rŸx™x¨¯©Ñ8ÒKÕLð	Mà *ˆÔà $× 1Ñ 1Ó 3ˆÔäœ˜dŸg™g×1Ñ1°$·)±)Ä¸~ÈTÐ=RÓSÓTˆØ�W‰W×"Ñ" 8¨TÓ2ð 	°mÜ�K‰K˜ -Ô0Ø�ŠðÜ—H‘H˜]×1Ñ1Ó3Ô4÷		ð �7‰7�>‰>˜$×,Ñ,Ô-Ø�G‰G�O‰O˜D×.Ñ.Ô/à�‰�‰�x ×!3Ñ!3Õ4ùò% Løô 'Ô(<Ð=ò Ü—G‘G–Iðú÷	ð 	ús/   —E1
Â1#FÃ#E6Å6#FÆFÆFÆFÆF(c                 óD   — t        | j                  | j                  ¬«      S )N)r0  r]  )r"   r0  r]  rf   s    rE   r�  z_FileSystemWriter.storage_metað  s   € Ü¨×);Ñ);ÀTÇ\Á\ÔRÐRrO   c                 ór   — t        t        | j                  j                  | j                  t
        «      «      S r?   )r   r   r\  r&  r   r7   rf   s    rE   rh  z_FileSystemWriter.metadata_pathó  s$   € ä”D˜$Ÿ'™'×-Ñ-¨d¯i©i¼ÓFÓGÐGrO   c                 ó   — | j                   S )zT
        return the checkpoint_id that will be used to save the checkpoint.
        ©r   rf   s    rE   r0  z_FileSystemWriter.checkpoint_id÷  ó   € ð
 �y‰yÐrO   c                 ó,   — t         j                  |«      S r?   ©r3   r4  r2  s     rE   r4  z(_FileSystemWriter.validate_checkpoint_idþ  ó   € ä×0Ñ0°Ó?Ð?rO   r?   )(rG   rH   rI   rJ   r5   rV   r   rK   r  r9  r±   rM   r   r   r   r   rr   ra  rd  r'   rl  r²   rt  r(   r0   r.   r~  r  r{  r|  r    r•  r"   r�  r°   rh  r0  r:  r4  Ú__classcell__©r^  s   @rE   rP  rP  9  s/  ø„ ñð  &*ØØØ%/ØØDHØ4G×4RÑ4Rñ%9à�C˜Ÿ™Ð$Ñ%ð%9ð #ð%9ð ð	%9ð
 ð%9ð  #ð%9ð ð%9ð ˜hÐ'?Ñ@ÑAð%9ð 2ð%9ð ð%9ð ð%9ð 
õ%9ñN( 5¨¨b¯k©k¸4Ð)?Ñ#@ð (ÈDó (ð
°Dð ¸Tó ð xð °Hó ð¨¨h©ð ¸DÀ¹Nó ð5àð5ð ð5ð 
��[Ñ!Ñ	"ó	5ð80àð0ð —K‘Kð0ð 
��[Ñ!Ñ	"ó	0ðd5˜xð 5°$°t¸KÑ7HÑ2Ið 5Èdó 5ð.S˜h {Ñ3ó Sð ðH˜u S¨"¯+©+Ð%5Ñ6ò Hó ðHð ð˜u S¨"¯+©+Ð%5Ñ6ò ó ðð ð@°5¸¸b¿k¹kÐ9IÑ3Jð @Ètò @ó ô@rO   rP  c            	       óR   — e Zd ZdZd
dee   ddfd„Zdedee	   de
e   de
e   fd	„Zy)Ú_StorageReaderTransformsrµ   NÚextension_registryrX   c                 ó6   — |€t        «       | _        y || _        y r?   )r   r¢  )rB   r¢  s     rE   rr   z!_StorageReaderTransforms.__init__
  s!   € à#5Ð#=ÔÓð 	ÕØCUð 	ÕrO   Ú	read_itemr=   r¹   c                 ó’   — | j                   j                  |«      }|}|D ]$  }t        |t        «      sŒ|j	                  |«      }Œ& |S r?   )r¢  Úfrom_descriptor_listrñ   r   Útransform_from)rB   r¤  r=   r¹   r¶   r§  rÎ   s          rE   Útransform_load_streamz._StorageReaderTransforms.transform_load_stream  sT   € ð ×,Ñ,×AÑAÐBWÓXˆ
Ø#ˆØò 	CˆBÜ˜"Ô6Õ7Ø!#×!2Ñ!2°>Ó!B‘ð	Cð ÐrO   r?   )rG   rH   rI   rJ   r   r   rr   r&   r   rK   r   rÊ   r¨  rN   rO   rE   r¡  r¡    sX   „ ññ
¨8Ð4EÑ+Fð 
ÐRVó 
ð
àðð  (¨™}ðð �u‘Ið	ð
 
ˆE‰ôrO   r¡  c                   ón  ‡ — e Zd Z	 ddeeej                  f   dee   ddfˆ fd„Z	de
dee   fd„Zddeeej                  df   ddfd	„Zd
ededed   fd„Zdefd„Z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ej                  f   fd„«       Zedeeej                  f   defd„«       Zˆ xZS )r2   Nr   Ú_extension_registryrX   c                 óÌ   •— t         ‰| �  «        t        «       | _        | j                  j	                  |«      | _        i | _        t        «       | _        t        |«      | _
        y r?   )r[  rr   r3   r\  r-  r   rï   r\   Úload_idr¡  rè   )rB   r   rª  r^  s      €rE   rr   zFileSystemReader.__init__  sN   ø€ ô
 	‰ÑÔÜ“,ˆŒØ—G‘G×%Ñ% dÓ+ˆŒ	Ø,.ˆÔÜ%Ó'ˆŒÜ2Ð3FÓGˆ�rO   Úsinfoc                 ón   — t        t        t           t        ||j                  |j
                  «      «      S r?   )r   r   rÊ   r/   r;   r<   )rB   Úfiler­  s      rE   Ú_slice_filezFileSystemReader._slice_file*  s%   € Ü”B”u‘IÔ0°°u·|±|ÀUÇ\Á\ÓRÓSÐSrO   r0  c                 ót   — i | _         |r | j                  j                  |«      | _        t	        «       | _        y r?   )rï   r\  r-  r   r\   r¬  r`  s     rE   ra  zFileSystemReader.reset-  s-   € ØˆÔÙØŸ™×)Ñ)¨-Ó8ˆDŒIÜ%Ó'ˆ�rO   re  rú   c                 ó¬  — i }|j                   D ]H  }| j                  |j                     }|j                  }|j	                  |g «      j                  |«       ŒJ |j                  «       D �]>  \  }}| 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                  «       k(  s6J d|j                  › d	|jA                  «       › d
|jA                  «       › �«       ‚|jC                  |«       |jE                  ||«       �Œé 	 d d d «       �ŒA tG        «       }|jI                  d «       |S # 1 sw Y   �ŒixY w)NÚrbrN   éÿÿÿÿr   ry   T)Úmap_locationÚweights_onlyzreq z mismatch sizes z vs )%rA   rï   Ústorage_indexr:   Ú
setdefaultrt   r\  r&  r   r÷   r°  rè   r¨  r=   r    r#   rÝ   rÇ   rò   ÚreadÚseekÚ
load_bytesÚseekabler   r   rm   Úloadr   Ústorage_offsetsÚlengthsÚresolve_tensorrx   r_   Úcopy_Úcommit_tensorr0   r…  )rB   re  rú   Úper_filer¤  Úitem_mdr   r:   Úreqsr'  r‚   ÚreqÚ
file_slicer§  Ú
read_bytesr¼  r   Útarget_tensorr‰  s                      rE   Ú	read_datazFileSystemReader.read_data3  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˜à,×1Ñ1Ó3°v·{±{³}ÒDð Ø" 3×#4Ñ#4Ð"5Ð5EÀm×FXÑFXÓFZÐE[Ð[_Ð`f×`kÑ`kÓ`mÐ_nÐoóÐDð &×+Ñ+¨FÔ3Ø×-Ñ-¨c°=ÖAñS)B÷+Bñ +Bð-	Bô^ “hˆØ�‰�tÔØˆ
÷_+Bñ +Bús   Â3G-K	Ë	K	c                 óL  — | j                   j                  | j                  d«      }| j                   j                  |d«      5 }t	        j
                  |«      }d d d «       t        dd «      €t        «       |_        | j                  |j                  _	        |S # 1 sw Y   ŒBxY w)Nr6   r³  r�  )
r\  r&  r   r÷   rŽ  r½  r  r"   r�  r¬  )rB   r   r”  r   s       rE   Úread_metadatazFileSystemReader.read_metadatao  s‡   € Ø�w‰w×"Ñ" 4§9¡9¨kÓ:ˆØ�W‰W×"Ñ" 4¨Ó.ð 	2°-Ü—{‘{ =Ó1ˆH÷	2ô �8˜^¨TÓ2Ð:Ü$/£MˆHÔ!Ø(,¯©ˆ×ÑÔ%àˆ÷	2ð 	2ús   ÁBÂB#r   rb  c                 óB   — |j                   | _         | j                   €J ‚y r?   rp  )rB   r   rb  s      rE   Úset_up_storage_readerz&FileSystemReader.set_up_storage_readerz  s"   € Ø$×1Ñ1ˆÔØ× Ñ Ð,Ð,Ñ,rO   c                 ó   — |S r?   rN   rk  s     rE   rl  z#FileSystemReader.prepare_local_plan~  s   € ØˆrO   rm  c                 ó   — |S r?   rN   )rB   rm  s     rE   rt  z$FileSystemReader.prepare_global_plan�  s   € ØˆrO   c                 ó   — | j                   S )zT
        return the checkpoint_id that will be used to load the checkpoint.
        r™  rf   s    rE   r0  zFileSystemReader.checkpoint_id„  rš  rO   c                 ó,   — t         j                  |«      S r?   rœ  r2  s     rE   r4  z'FileSystemReader.validate_checkpoint_id‹  r�  rO   r?   )rG   rH   rI   r   rK   r  r9  r   r   rr   r9   r   rÊ   r°  ra  r$   r%   r0   rÊ  r    rÌ  r±   rÎ  rl  r²   rt  r°   r0  r:  r4  rž  rŸ  s   @rE   r2   r2     sP  ø„ ð <@ñ
Hà�C˜Ÿ™Ð$Ñ%ð
Hð &Ð&7Ñ8ð
Hð 
õ	
HðT |ð T¸¸5¹	ó Tñ( 5¨¨b¯k©k¸4Ð)?Ñ#@ð (ÈDó (ð9˜hð 9°ð 9ÀÈÁó 9ðx	˜xó 	ð-¨hð -Èð -ÐQUó -ð xð °Hó ð¨¨h©ð ¸DÀ¹Nó ð ð˜u S¨"¯+©+Ð%5Ñ6ò ó ðð ð@°5¸¸b¿k¹kÐ9IÑ3Jð @Ètò @ó ô@rO   r2   c                   ó¬   ‡ — e Zd ZdZdddddddej
                  fdeeej                  f   de
d	e
d
edede
de
deee      deddfd„Zdedefˆ fd„Zˆ xZS )r1   rQ  Tr�   rR  FNr   rS  rT  rü   rU  Úcache_staged_state_dictrV  rW  rë   rX   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   rS  rT  rü   rU  rV  rW  rë   )rÔ  N)rP  rr   r+   )
rB   r   rS  rT  rü   rU  rÔ  rV  rW  rë   s
             rE   rr   zFileSystemWriter.__init__ž  sH   € ô: 	×"Ñ"ØØØ!5Ø!Ø%Ø"7ØØ#Ø!5ð 	#ô 
	
ô 	×$Ñ$ØØ$;ö	
rO   Ú
state_dictc                 ó0   •— d| _         t        ‰| �	  |«      S )zOverride of AsyncStager.stager   )rU  r[  Ústage)rB   rÖ  r^  s     €rE   rØ  zFileSystemWriter.stageË  s   ø€ ð &'ˆÔ"Ü‰w‰}˜ZÓ(Ð(rO   )rG   rH   rI   rJ   r5   rV   r   rK   r  r9  r±   rM   r   r   r   rr   r!   rØ  rž  rŸ  s   @rE   r1   r1   �  sÁ   ø„ ñð  &*ØØØ%/Ø(-ØØDHØ4G×4RÑ4Rñ+
à�C˜Ÿ™Ð$Ñ%ð+
ð #ð+
ð ð	+
ð
 ð+
ð  #ð+
ð "&ð+
ð ð+
ð ˜hÐ'?Ñ@ÑAð+
ð 2ð+
ð 
ó+
ðZ) ð )°O÷ )ñ )rO   r1   )hr†   rq  rÇ   r  r­   r  rŽ  r  r�  rZ   ri  Úabcr   r   Úcollections.abcr   r   r   r   Ú
contextlibr	   r
   Úenumr   r   Úpathlibr   Útypingr   r   r   r   r   r   Útyping_extensionsr   rm   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.futuresr0   Ú__all__r7   rK   rL   r9   rQ   r5   rw  r\   r^   ro   r�   r´   rM   rÙ   r²   rç   rÈ   rò   rö   r{  r±   r  r4   r3   rP  r¡  r2   r1   rN   rO   rE   ú<module>rë     s›  ðä Û Û 	Û Û Û 	Û Û Û Û Û ß #ß CÓ CÝ %Ý !Ý Ý #Ý ß ;× ;õ %ã Ý ß GÝ B÷÷õ ÷ YÑ X÷	÷ 	ó 	õ E÷ñ õ
 AÝ  ò€ð  €ˆcÓ ð ÷	Ið 	Ió ð	Ið ÷ð ó ðô ˜$ô  ð
 €ð˜ó ô�Cô ô�}ô ô.W"˜Mô W"÷t0Yñ 0Yðf4�Yð 4 3ó 4ð #ð ¨d°9©oð À$ÀtÈIÁÑBWó ð0/Ø(ð/à�I‰Ið/ð �—
‘
˜EŸL™LÐ(Ñ
)ð/ð ð	/ð
 ð/ð .ð/ð ó/ðdfØðfà—‘ðfð —+‘+ðfð ð	fð
 )ðfð ðfð ðfð ðfð .ðfð 
ófôRB�Sô BôD>0�ô >0ôBG@˜ô G@÷Tñ ô4p@�}ô p@ôf@)Ð(Ð*=õ @)rO   