Ë
    g^(h  ã                   óÆ  — 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
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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,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZA g d¢ZBdZCeDeEd<   e G d„ d«      «       ZFe G d„ d«      «       ZGdZHdeDfd„ZI G d„ de«      ZJ G d „ d!eJ«      ZK G d"„ d#eJ«      ZL G d$„ d%«      ZMd&e6deNfd'„ZOd(eNd)ePe6   dePePe6      fd*„ZQ	 dFd+eMd,ej¤                  d-eej¦                  e!jD                  f   d.e6d/eDd0eTde=fd1„ZUd2ed3ej¬                  d4ej¬                  d5e5d+eMd6eNd7eTd8eNd0eTddfd9„ZW G d:„ d;e«      ZX G d<„ d=eX«      ZY G d>„ d?e<«      ZZ G d@„ dA«      Z[ G dB„ dCe;«      Z\ G dD„ dEeZe9«      Z]y)Gé    N)ÚABCÚabstractmethod)Ú	GeneratorÚIterableÚIteratorÚSequence)Úcontextmanager)Ú	dataclass)ÚUnsupportedOperation)ÚPath)ÚAnyÚCallableÚcastÚIOÚOptionalÚUnion)ÚBuffer)ÚTensor)Ú_get_available_device_typeÚ_get_device_module)Únarrow_tensor_by_index)ÚExtensionRegistryÚStreamTransformExtension)ÚMetadataÚSTATE_DICT_TYPEÚStorageMeta)ÚLoadItemTypeÚLoadPlanÚLoadPlannerÚReadItemÚSavePlanÚSavePlannerÚ	WriteItemÚWriteItemType)ÚBlockingAsyncStager)ÚStorageReaderÚStorageWriterÚWriteResult)Ú_create_file_view)ÚFuture)ÚFileSystemWriterÚFileSystemReaderÚ
FileSystemÚFileSystemBaseú	.metadataÚ_metadata_fnc                   ó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      úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributed/checkpoint/filesystem.pyÚ__getstate__z_StorageInfo.__getstate__B   s/   € Ø!%§¡×!4Ñ!4Ó!6×H™˜˜A¸!¹-��1‘ÓHÐHùÓHs   ž
2©2)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úintr6   r   r   r?   © ó    r>   r2   r2   9   s/   … á-àÓØƒKØƒKØ59Ð˜8 H¨S¡MÑ2Ó9óIrH   r2   c                   ó   — e Zd ZU eed<   y)Ú_StoragePrefixÚprefixN)r@   rA   rB   rD   rE   rG   rH   r>   rJ   rJ   F   s   … à„KrH   rJ   z.distcpÚreturnc                  ó<   — t        t        j                  «       «      S r8   )rD   ÚuuidÚuuid4rG   rH   r>   Ú_generate_uuidrP   N   s   € ÜŒt�z‰z‹|ÓÐrH   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ÚobjrL   Nc                  ó   — y r8   rG   ©r;   rS   rT   s      r>   Úaddz_TensorLoader.addS   ó   € àrH   c                  ó   — y r8   rG   ©r;   s    r>   Ústart_loadingz_TensorLoader.start_loadingW   rX   rH   c                  ó   — y r8   rG   rZ   s    r>   Úvaluesz_TensorLoader.values[   rX   rH   ©rL   N)r@   rA   rB   r   rF   ÚobjectrW   r[   r   ÚtupleÚtorchr   r]   rG   rH   r>   rR   rR   R   sk   „ Øð˜ð  &ð ¨Tò ó ðð òó ðð ð˜  u§|¡|°VÐ';Ñ!<Ñ=ò ó ñrH   rR   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_funrL   Nc                 ó    — || _         g | _        y r8   )rd   r:   )r;   rd   s     r>   Ú__init__z_SerialCpuLoader.__init__a   s   € Ø&ˆÔØ/1ˆ�
rH   rS   rT   c                 ó>   — | j                   j                  ||f«       y r8   )r:   ÚappendrV   s      r>   rW   z_SerialCpuLoader.adde   s   € Ø�
‰
×Ñ˜4 ˜+Õ&rH   c                  ó   — y r8   rG   rZ   s    r>   r[   z_SerialCpuLoader.start_loadingh   ó   € ØrH   c              #   ó  K  — | j                   D ]y  \  }}| j                  |«      j                  «       }|j                  «       }|j	                  «       j                  «       |j                  «       k7  r|j                  «       }||f–— Œ{ y ­wr8   )r:   rd   ÚdetachÚcpuÚstoragerS   ÚnumelÚclone©r;   Ú_rT   Útensors       r>   r]   z_SerialCpuLoader.valuesk   sz   è ø€ Ø—j‘jò 	‰FˆAˆsØ×%Ñ% cÓ*×1Ñ1Ó3ˆFØ—Z‘Z“\ˆFØ�~‰~Ó×$Ñ$Ó&¨&¯,©,«.Ò8ØŸ™›�àØðó ñ	ùs   ‚B
Br^   )r@   rA   rB   r   rf   rF   r_   rW   r[   r   r`   ra   r   r]   rG   rH   r>   rc   rc   `   sS   „ ð2 Hð 2°ó 2ð'˜ð ' &ð '¨Tó 'óð	˜  u§|¡|°VÐ';Ñ!<Ñ=ô 	rH   rc   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)Ú_OverlappingCpuLoaderNrd   ÚstreamÚinflight_threshholdrL   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)rd   r:   rw   Úin_flight_dataÚcollectionsÚdequeÚcurrent_itemsÚidxÚstartedÚdevice_typer   r   Údevice_moduler   ra   ÚcudaÚStreamÚcurrent_streamrv   Úwait_stream)r;   rd   rv   rw   s       r>   rf   z_OverlappingCpuLoader.__init__x   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ð >rH   c                 óF   — | j                   t        | j                  «      k\  S r8   )r}   Úlenr:   rZ   s    r>   Ú_donez_OverlappingCpuLoader._done�   s   € à�x‰xœ3˜tŸz™z›?Ñ*Ð*rH   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   )	ry   rw   rv   Úsynchronizer|   Úpopleftro   Úelement_sizerh   )r;   ÚdrainedÚvals      r>   Ú_drainz_OverlappingCpuLoader._drain“   s©   € ØˆØ×Ñ $×":Ñ":Ò:Ø�K‰K×#Ñ#Ô%Ø×!Ñ! T×%=Ñ%=Ò=Ø×$Ñ$×,Ñ,Ó.ˆCØ×Ò 3 q¡6§<¡<£>°C¸±F×4GÑ4GÓ4IÑ#IÑIÕØ�N‰N˜3Ôð ×!Ñ! T×%=Ñ%=Ó=ð ˆrH   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é   rm   T)ÚdeviceÚnon_blocking)r€   rv   r‡   ry   rw   r:   r}   rd   rl   r’   Útyper   Útora   Úuntyped_storagerS   ro   Úitemsizerp   r|   rh   rŒ   rq   s       r>   Ú_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|   rv   rŠ   rZ   s    r>   Ú_finishz_OverlappingCpuLoader._finishµ   s=   € Ø�zŠzÐˆzÜˆt×!Ñ!Ó" QÒ&Ø�K‰K×#Ñ#Ô%Ø×!Ñ!Ð!rH   rS   rT   c                 ól   — | j                   rt        d«      ‚| j                  j                  ||f«       y )Nz&cannot add items after loading started)r~   ÚRuntimeErrorr:   rh   rV   s      r>   rW   z_OverlappingCpuLoader.add»   s+   € Ø�<Š<ÜÐGÓHÐHØ�
‰
×Ñ˜4 ˜+Õ&rH   c                 óª   — | j                   ry d| _         | j                  j                  t        j                  d«      ¬«       | j                  «        y )NTr   ©Úkey)r~   r:   ÚsortÚoperatorÚ
itemgetterr˜   rZ   s    r>   r[   z#_OverlappingCpuLoader.start_loadingÀ   s9   € Ø�<Š<ØØˆŒØ�
‰
�‰œH×/Ñ/°Ó2ˆÔ3Ø�‰�rH   c              #   óê   K  — | j                  «        | j                  s7| j                  «       }| j                  «        |E d {  –—†  | j                  sŒ7| j	                  «       E d {  –—†  y 7 Œ*7 Œ­wr8   )r[   r‡   r�   r˜   rš   )r;   r�   s     r>   r]   z_OverlappingCpuLoader.valuesÇ   sY   è ø€ Ø×ÑÔØ—*’*Ø—k‘k“mˆGØ�L‰LŒNØ×Ðð —*“*ð
 —<‘<“>×!Ñ!ð øà!ús*   ‚AA3ÁA/ÁA3ÁA3Á)A1Á*A3Á1A3)Ni@B r^   )r@   rA   rB   r   r   ra   r‚   rF   rf   ÚpropertyÚboolr‡   Úlistr`   r   r_   r�   r˜   r   rš   rW   r[   r   r]   rG   rH   r>   ru   ru   w   sà   „ ð *.Ø#,ñ	IàðIð ˜Ÿ™Ñ&ðIð !ð	Ið
 
óIð. ð+�tò +ó ð+ð˜˜U 5§<¡<°Ð#7Ñ8Ñ9ó óNð0"˜ %¨¯©°fÐ(<Ñ"=Ñ>ó "ð'˜ð ' &ð '¨Tó 'ó
ð"˜  u§|¡|°VÐ';Ñ!<Ñ=ô "rH   ru   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Ú
extensionsrL   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.
        NrG   )rª   )r;   rª   s     r>   rf   z!_StorageWriterTransforms.__init__Ø   s   € ð !+Ð 2˜"ˆ�¸
ˆ�rH   Ú
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 r8   )r±   )r;   r±   s     r>   rf   zN_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__î   s	   € Ø�•rH   rL   c                  ó   — y)NTrG   rZ   s    r>   Ú	writeablezO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeableñ   s   € ØrH   Úbc                 ó8   — | j                   j                  |«      S r8   )r±   Úwrite)r;   rµ   s     r>   r·   zK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeô   s   € Ø—x‘x—~‘~ aÓ(Ð(rH   c                 óX   — | j                  «        | j                  j                  «        y r8   )Úflushr±   rZ   s    r>   ÚclosezK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close÷   s   € Ø—
‘
”Ø—‘—‘Õ rH   N)r@   rA   rB   ÚioÚIOBaserf   r¥   r´   r   rF   r·   rº   rG   rH   r>   ÚNoCloseWriterr°   í   s6   „ ð B§I¡Ió ð 4ó ð)˜vð )¨#ó )ó!rH   r½   )	r»   r¼   r   r   Úbytesrª   Útransform_toÚreversedÚget_descriptor)r;   r¬   r­   r½   r¿   Úexs         r>   Ú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r8   )r@   rA   rB   rC   r   r   r   rf   r#   r»   r¼   r`   r   r¾   r¦   rD   rÃ   rG   rH   r>   r¨   r¨   Ñ   sh   „ ñð JNñ	CØ" 8Ð,DÑ#EÑFð	Cà	ó	CðYØ#ðYØ13·±ðYà	ˆr�%‰y˜$˜s™)Ð#Ñ	$ôYrH   r¨   Úitemc                 óæ   — d}| j                   €J ‚| j                   j                  D ]  }||z  }Œ	 | j                   j                  j                  }|t        j
                  j                  |«      z  S ©Nr‘   )Útensor_datarS   Ú
propertiesÚdtypera   Ú_utilsÚ_element_size)rÄ   rS   ÚsrÉ   s       r>   Ú
_item_sizerÍ     sp   € Ø€DØ×ÑÐ'Ð'Ð'à×Ñ×"Ñ"ò ˆØ�‰	‰ðð ×Ñ×'Ñ'×-Ñ-€EØ”%—,‘,×,Ñ,¨UÓ3Ñ3Ð3rH   Ú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Í   Ú	enumeraterh   Úminr¡   r¢   )
rÎ   r:   ÚwiÚbytes_wÚtensor_wrr   ÚbucketsÚbucket_sizesÚir}   s
             r>   Ú_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Ú
transformsrv   Údatar¬   Ústorage_keyÚsafe_tensorsc           
      óÞ  — |j                  «       }| j                  ||«      \  }}|j                  t        j                  k(  r<t        |t        j                  «      sJ ‚|j                  |j                  «       «       nXt        |t        j                  «      sJ ‚|j                  t        j                  d«      k(  sJ ‚|st        j                  ||«       |j                  «        |rt        |t        j                  «      r|j                  «       |z
  }	n!|j                  «       |j!                  «       z  }	t#        |«      dk(  rd n|}
t%        |j&                  |	t)        |||	|
¬«      ¬«      S )Nrm   r   )r6   )ÚindexÚsize_in_bytesÚstorage_data)ÚtellrÃ   r”   r$   rÑ   Ú
isinstancer»   ÚBytesIOr·   Ú	getbufferra   r   r’   Úsaverº   ro   rŒ   r†   r(   rá   r2   )rÜ   rv   rÝ   r¬   rÞ   rß   r4   r¿   r6   r5   Úinfo_transform_descriptorss              r>   Ú_write_itemrê   '  s5  € ð �[‰[‹]€Fà,6×,LÑ,LØ�Fó-Ñ)€\Ð(ð ‡�œ-×/Ñ/Ò/Ü˜$¤§
¡
Ô+Ð+Ð+Ø×Ñ˜4Ÿ>™>Ó+Õ,ä˜$¤§¡Ô-Ð-Ð-Ø�{‰{œeŸl™l¨5Ó1Ò1Ð1Ð1ÙÜ�J‰J�t˜\Ô*à×ÑÔáœ: d¬B¯J©JÔ7Ø—‘“ Ñ'‰à—‘“ × 1Ñ 1Ó 3Ñ3ˆô
 Ð)Ó*¨aÒ/‰Ð5Jð ô Ø×ÑØÜ!ØØØØ"<ô	
ô	ð 	rH   Úcreate_streamÚ
file_queueÚresult_queueÚplannerrw   Ú	use_fsyncÚthread_countc	                 óH  — 	 	 |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 }|j%                  «       D ]K  \  }}|j&                  sJ ‚|j!                  t#        |||||
|«      «       |||j(                  j*                  <   ŒM |rddlm} |j1                   ||«      «       |r$	 t3        j4                  |j7                  «       «       |j?                  «        d d d «       |jA                  |«       �ŒIc c}w c c}w # t8        t:        f$ r t3        j<                  «        Y ŒZw xY w# 1 sw Y   ŒOxY w# tB        jD                  $ r Y y w xY w)Nr‘   r   )rw   Úwb)rè   )#Ú
get_nowaitra   Ú_CÚ_get_privateuse1_backend_nameÚgetattrr�   Úis_availableru   Úresolve_datarc   r”   r$   rÑ   rW   rÍ   r[   rh   rê   r]   Úis_cpurá   ÚfqnÚsafetensors.torchrè   r·   ÚosÚfsyncÚfilenoÚAttributeErrorr   Úsyncrº   ÚputÚqueueÚEmpty)rë   rì   rí   rî   rÜ   rw   rï   rð   rß   Ú	file_namerÞ   Úwrite_itemsÚcustom_backend_nameÚcustom_device_modÚloaderrÕ   r×   r¬   rÖ   Úwrite_resultsrv   rÝ   Útensor_dictrs   rè   s                            r>   Ú_write_files_from_queuer  W  s�  € ðNØØ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¨$Ó/ð '°6Ø")ò �JØ"×/Ñ/°
Ó;�DØ!×(Ñ(Ü#Ø&Ø"Ø Ø&Ø'Ø(óõ	ðð !�Ø*0¯-©-«/ò ?Ñ&�F˜JØ!Ÿ=š=Ð(˜=Ø!×(Ñ(Ü#Ø&Ø"Ø"Ø&Ø'Ø(óô	ð 9?�K 
× 0Ñ 0× 4Ñ 4Ò5ð?ñ  Ý6à—L‘L¡ kÓ!2Ô3áð"ÜŸ™ §¡£Ô1ð —‘”÷O'ðP ×Ñ˜]Ô+ñW ùò6 Vùò
 UøôP +Ô,@ÐAò "ÜŸ™ž	ð"ú÷K'ð 'ûôR �;‰;ò Ùðúss   ‚B/J Â1"IÃIÃ8J Ä"IÄ3IÄ7J ÅB9I?Ç>#IÈ!I?È1%J É#I<É9I?É;I<É<I?É?JÊJ ÊJ!Ê J!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)r.   ÚpathÚmoderL   Nc                  ó   — y r8   rG   )r;   r  r  s      r>   rë   zFileSystemBase.create_stream´  s   € ð ,/rH   Úsuffixc                  ó   — y r8   rG   ©r;   r  r  s      r>   Úconcat_pathzFileSystemBase.concat_pathº  s   € ð #&rH   Únew_pathc                  ó   — y r8   rG   ©r;   r  r  s      r>   ÚrenamezFileSystemBase.rename¿  s   € ð rH   c                  ó   — y r8   rG   ©r;   r  s     r>   Ú	init_pathzFileSystemBase.init_pathÄ  s   € ØSVrH   c                  ó   — y r8   rG   r  s     r>   ÚmkdirzFileSystemBase.mkdirÇ  s   € Ø<?rH   Úcheckpoint_idc                  ó   — y r8   rG   ©Úclsr  s     r>   Úvalidate_checkpoint_idz%FileSystemBase.validate_checkpoint_idÊ  s   € àUXrH   c                  ó   — y r8   rG   r  s     r>   ÚexistszFileSystemBase.existsÎ  s   € Ø=@rH   c                  ó   — y r8   rG   r  s     r>   Úrm_filezFileSystemBase.rm_fileÑ  s   € Ø>ArH   )r@   rA   rB   r	   r   r   rD   rü   ÚPathLiker   r»   r¼   rë   r  r  r  r  Úclassmethodr¥   r!  r#  r%  rG   rH   r>   r.   r.   ³  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ó ÙArH   r.   c            
       ó  — 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y)r-   r  r  rL   Nc              #   óÆ   K  — t        |t        «      st        |«      }|j                  |«      5 }t        t        j
                  |«      –— d d d «       y # 1 sw Y   y xY w­wr8   )rå   r   Úopenr   r»   r¼   )r;   r  r  rv   s       r>   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 r8   ©rå   r   r  s      r>   r  zFileSystem.concat_pathß  s!   € ô ˜$¤Ô%Ü˜“:ˆDØ�f‰}ÐrH   c                 ó<   — t        |t        «      st        |«      }|S r8   r,  r  s     r>   r  zFileSystem.init_pathæ  s   € Ü˜$¤Ô%Ü˜“:ˆDØˆrH   r  c                 óx   — t        |t        «      st        |«      }|j                  t        t        |«      «       y r8   )rå   r   r  r   r  s      r>   r  zFileSystem.renameë  s*   € ô ˜$¤Ô%Ü˜“:ˆDà�‰”Dœ˜xÓ(Õ)rH   c                 ó`   — t        |t        «      st        |«      }|j                  dd¬«       y )NT)ÚparentsÚexist_ok)rå   r   r  r  s     r>   r  zFileSystem.mkdiró  s%   € Ü˜$¤Ô%Ü˜“:ˆDØ�
‰
˜4¨$ˆ
Õ/rH   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   rD   r0  r#  rü   ÚaccessÚW_OK)r   r  Úps      r>   r!  z!FileSystem.validate_checkpoint_idø  s_   € ä�m¤TÔ*Øà”C˜Ó&Ñ&Øä�mÓ$×,Ñ,ò 	ˆAØ�x‰x�zœbŸi™i¬¨A«´·±Õ8Ùð	ð rH   c                 óX   — t        |t        «      st        |«      }|j                  «       S r8   )rå   r   r#  r  s     r>   r#  zFileSystem.exists  s!   € Ü˜$¤Ô%Ü˜“:ˆDØ�{‰{‹}ÐrH   c                 óZ   — t        |t        «      st        |«      }|j                  «        y r8   )rå   r   Úunlinkr  s     r>   r%  zFileSystem.rm_file  s   € Ü˜$¤Ô%Ü˜“:ˆDØ�‰�rH   )r@   rA   rB   r	   r   rD   rü   r&  r   r»   r¼   rë   r  r  r  r  r'  r¥   r!  r#  r%  rG   rH   r>   r-   r-   Õ  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ð ¸ô rH   r-   c                   ó   ‡ — e Zd ZdZ	 	 	 	 	 	 d"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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$dedej4                  de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.

    Nr  Úsingle_file_per_rankÚ
sync_filesrð   Úper_thread_copy_aheadÚ	overwriteÚ_extensionsÚargsÚkwargsrL   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)Úsuperrf   r-   Úfsr  r  r<  r=  rð   r>  rP   Úsave_idr?  r¨   rÜ   )r;   r  r<  r=  rð   r>  r?  r@  rA  rB  Ú	__class__s             €r>   rf   z_FileSystemWriter.__init__  sk   ø€ ô4 	‰ÑÔÜ“,ˆŒØ—G‘G×%Ñ% dÓ+ˆŒ	Ø$8ˆÔ!Ø$ˆŒØ(ˆÔØ%:ˆÔ"Ü%Ó'ˆŒØ"ˆŒÜ2°;Ó?ˆ�rH   r  c                 óf   — |r | j                   j                  |«      | _        t        «       | _        y r8   )rE  r  r  rP   rF  ©r;   r  s     r>   Úresetz_FileSystemWriter.resetD  s%   € ÙØŸ™×)Ñ)¨-Ó8ˆDŒIÜ%Ó'ˆ�rH   Úis_coordinatorc                  ó   — y r8   rG   )r;   rK  s     r>   Úset_up_storage_writerz'_FileSystemWriter.set_up_storage_writerI  rj   rH   Ú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=ú.)	rE  r  r  r#  Úmetadata_pathr?  ÚwarningsÚwarnrœ   ©r;   rN  s     r>   Úprepare_local_planz$_FileSystemWriter.prepare_local_planL  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àˆrH   Úplansc                 ó�   — t        |«      D ��cg c])  \  }}t        j                  |t        d|› d�«      ¬«      ‘Œ+ }}}|S c c}}w )NÚ__rr   ©rã   )rÓ   ÚdataclassesÚreplacerJ   )r;   rV  rÚ   rN  Ú	new_planss        r>   Úprepare_global_planz%_FileSystemWriter.prepare_global_planZ  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Æ   )rK   ÚDEFAULT_SUFFIX)r  Ú
file_countÚstorage_plans    €€r>   Úgen_filez._FileSystemWriter.write_data.<locals>.gen_filei  s,   ø€ à'×.Ñ.Ð/°
¨|¼NÐ;KÐLˆIØ˜!‰OˆJØÐrH   )rã   r  ÚQueuer<  rÛ   rð   r:   rE  r  r  r  Ú_write_data)r;   rN  rî   rc  rì   Úbucketr  r  rÄ   ra  rb  s            @@r>   Ú
write_dataz_FileSystemWriter.write_dataa  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Ð4rH   rì   rß   c                 óÐ  — t        j                  «       }g }t        d| j                  «      D ]ƒ  }t	        j
                  t        | j                  j                  |||| j                  | j                  | j                  | j                  |f	¬«      }|j                  «        |j                  |«       Œ… t        | j                  j                  |||| j                  | j                  | j                  | j                  |¬«	       |D ]  }|j                  «        Œ g }	 	 ||j                  «       z  }Œ# t         j                   $ r  t#        «       }	|	j%                  |«       |	cY S w xY w)Nr‘   )ÚtargetrA  )	rë   rì   rí   rî   rÜ   rw   rï   rð   rß   )r  rd  rÒ   rð   Ú	threadingÚThreadr  rE  rë   rÜ   r>  r=  Ústartrh   Újoinró   r  r*   Ú
set_result)
r;   rî   rì   rß   rí   Úthreadsrr   ÚtÚresÚfuts
             r>   re  z_FileSystemWriter._write_data}  sG  € ô %*§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   ÄD2 Ä20E%Å$E%ÚmetadataÚ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   rE  r  r  r0   rë   ÚpickleÚdumpr=  rü   rý   rþ   rÿ   r   r   r#  rQ  r%  r  )r;   rs  rt  Ú
storage_mdÚwr_listÚwrÚtmp_pathÚmetadata_files           r>   Ú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)r  rF  )r   r  rF  rZ   s    r>   rw  z_FileSystemWriter.storage_metaÇ  s   € Ü¨×);Ñ);ÀTÇ\Á\ÔRÐRrH   c                 ór   — t        t        | j                  j                  | j                  t
        «      «      S r8   )r   r   rE  r  r  r0   rZ   s    r>   rQ  z_FileSystemWriter.metadata_pathÊ  s$   € ä”D˜$Ÿ'™'×-Ñ-¨d¯i©i¼ÓFÓGÐGrH   c                 ó   — | j                   S )zT
        return the checkpoint_id that will be used to save the checkpoint.
        ©r  rZ   s    r>   r  z_FileSystemWriter.checkpoint_idÎ  ó   € ð
 �y‰yÐrH   c                 ó,   — t         j                  |«      S r8   ©r-   r!  r  s     r>   r!  z(_FileSystemWriter.validate_checkpoint_idÕ  ó   € ä×0Ñ0°Ó?Ð?rH   )TTr‘   é€–˜ TNr8   ©F)&r@   rA   rB   rC   r   rD   rü   r&  r¥   rF   r   r   r   r   rf   rJ  rM  r!   rU  r¦   r]  r"   r*   r(   rg  r  rd  re  r   r  r   rw  r¤   rQ  r  r'  r!  Ú__classcell__©rG  s   @r>   r:  r:    s7  ø„ ñð  &*ØØØ%/ØØDHñ#@à�C˜Ÿ™Ð$Ñ%ð#@ð #ð#@ð ð	#@ð
 ð#@ð  #ð#@ð ð#@ð ˜hÐ'?Ñ@ÑAð#@ð ð#@ð ð#@ð 
õ#@ñJ( 5¨¨b¯k©k¸4Ð)?Ñ#@ð (ÈDó (ð
°Dð ¸Tó ð xð °Hó ð¨¨h©ð ¸DÀ¹Nó ð5àð5ð ð5ð 
��[Ñ!Ñ	"ó	5ð@ #ñ	1àð1ð —K‘Kð1ð ð	1ð
 
��[Ñ!Ñ	"ó1ðf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ò @ó ô@rH   r:  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_registryrL   c                 ó6   — |€t        «       | _        y || _        y r8   )r   rŽ  )r;   rŽ  s     r>   rf   z!_StorageReaderTransforms.__init__á  s!   € à#5Ð#=ÔÓð 	ÕØCUð 	ÕrH   Ú	read_itemr6   r­   c                 ó’   — | j                   j                  |«      }|}|D ]$  }t        |t        «      sŒ|j	                  |«      }Œ& |S r8   )rŽ  Úfrom_descriptor_listrå   r   Útransform_from)r;   r�  r6   r­   rª   r“  rÂ   s          r>   Útransform_load_streamz._StorageReaderTransforms.transform_load_streamæ  sT   € ð ×,Ñ,×AÑAÐBWÓXˆ
Ø#ˆØò 	CˆBÜ˜"Ô6Õ7Ø!#×!2Ñ!2°>Ó!B‘ð	Cð ÐrH   r8   )r@   rA   rB   rC   r   r   rf   r    r   rD   r   r¾   r”  rG   rH   r>   r�  r�  Ú  sX   „ ññ
¨8Ð4EÑ+Fð 
ÐRVó 
ð
àðð  (¨™}ðð �u‘Ið	ð
 
ˆE‰ôrH   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 )r,   Nr  Ú_extension_registryrL   c                 óÌ   •— t         ‰| �  «        t        «       | _        | j                  j	                  |«      | _        i | _        t        «       | _        t        |«      | _
        y r8   )rD  rf   r-   rE  r  r  rã   rP   Úload_idr�  rÜ   )r;   r  r–  rG  s      €r>   rf   zFileSystemReader.__init__õ  sN   ø€ ô
 	‰ÑÔÜ“,ˆŒØ—G‘G×%Ñ% dÓ+ˆŒ	Ø,.ˆÔÜ%Ó'ˆŒÜ2Ð3FÓGˆ�rH   Úsinfoc                 ón   — t        t        t           t        ||j                  |j
                  «      «      S r8   )r   r   r¾   r)   r4   r5   )r;   Úfiler™  s      r>   Ú_slice_filezFileSystemReader._slice_file  s%   € Ü”B”u‘IÔ0°°u·|±|ÀUÇ\Á\ÓRÓSÐSrH   r  c                 ót   — i | _         |r | j                  j                  |«      | _        t	        «       | _        y r8   )rã   rE  r  r  rP   r˜  rI  s     r>   rJ  zFileSystemReader.reset  s-   € ØˆÔÙØŸ™×)Ñ)¨-Ó8ˆDŒIÜ%Ó'ˆ�rH   rN  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ÚrbrG   éÿÿÿÿr   rm   T)Úmap_locationÚweights_onlyzreq z mismatch sizes z vs )%r:   rã   Ústorage_indexr3   Ú
setdefaultrh   rE  r  r  rë   rœ  rÜ   r”  r6   r”   r   rÑ   r»   ræ   ÚreadÚseekÚ
load_bytesÚseekabler   r   ra   Úloadr   Ústorage_offsetsÚlengthsÚresolve_tensorrl   rS   Úcopy_Úcommit_tensorr*   rn  )r;   rN  rî   Úper_filer�  Úitem_mdr  r3   Úreqsr  rv   ÚreqÚ
file_slicer“  Ú
read_bytesr¨  rs   Útarget_tensorrr  s                      r>   Ú	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˜à,×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)Nr/   rŸ  rw  )
rE  r  r  rë   rx  r©  rö   r   rw  r˜  )r;   r  r~  rs  s       r>   Úread_metadatazFileSystemReader.read_metadataF  s‡   € Ø�w‰w×"Ñ" 4§9¡9¨kÓ:ˆØ�W‰W×"Ñ" 4¨Ó.ð 	2°-Ü—{‘{ =Ó1ˆH÷	2ô �8˜^¨TÓ2Ð:Ü$/£MˆHÔ!Ø(,¯©ˆ×ÑÔ%àˆ÷	2ð 	2ús   ÁBÂB#rs  rK  c                 óB   — |j                   | _         | j                   €J ‚y r8   rY  )r;   rs  rK  s      r>   Úset_up_storage_readerz&FileSystemReader.set_up_storage_readerQ  s"   € Ø$×1Ñ1ˆÔØ× Ñ Ð,Ð,Ñ,rH   c                 ó   — |S r8   rG   rT  s     r>   rU  z#FileSystemReader.prepare_local_planU  s   € ØˆrH   rV  c                 ó   — |S r8   rG   )r;   rV  s     r>   r]  z$FileSystemReader.prepare_global_planX  s   € ØˆrH   c                 ó   — | j                   S )zT
        return the checkpoint_id that will be used to load the checkpoint.
        rƒ  rZ   s    r>   r  zFileSystemReader.checkpoint_id[  r„  rH   c                 ó,   — t         j                  |«      S r8   r†  r  s     r>   r!  z'FileSystemReader.validate_checkpoint_idb  r‡  rH   r8   )r@   rA   rB   r   rD   rü   r&  r   r   rf   r2   r   r¾   rœ  rJ  r   r   r*   r¶  r   r¸  r¥   rº  rU  r¦   r]  r¤   r  r'  r!  rŠ  r‹  s   @r>   r,   r,   ô  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ò @ó ô@rH   r,   c                   ó’   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddeeej                  f   dedede	de	ded	ed
e
ee      ddfd„Zdedefˆ fd„Zˆ xZS )r+   r;  Nr  r<  r=  rð   r>  Úcache_staged_state_dictr?  r@  rL   c	           
      ól   — 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 re-used for multiple dcp.async_save calls. Default to False.
            overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.
            _extensions: Extensions to apply to output streams (EXPERIMENTAL)

        N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
        )r  r<  r=  rð   r>  r?  r@  )rÀ  N)r:  rf   r%   )	r;   r  r<  r=  rð   r>  rÀ  r?  r@  s	            r>   rf   zFileSystemWriter.__init__u  sE   € ô8 	×"Ñ"ØØØ!5Ø!Ø%Ø"7ØØ#ð 	#ô 		
ô 	×$Ñ$ØØ$;ö	
rH   Ú
state_dictc                 ó0   •— d| _         t        ‰| �	  |«      S )zOverride of AsyncStager.stager   )r>  rD  Ústage)r;   rÂ  rG  s     €r>   rÄ  zFileSystemWriter.stage   s   ø€ ð &'ˆÔ"Ü‰w‰}˜ZÓ(Ð(rH   )TTr‘   rˆ  FTN)r@   rA   rB   rC   r   rD   rü   r&  r¥   rF   r   r   r   rf   r   rÄ  rŠ  r‹  s   @r>   r+   r+   g  s®   ø„ ñð  &*ØØØ%/Ø(-ØØDHñ)
à�C˜Ÿ™Ð$Ñ%ð)
ð #ð)
ð ð	)
ð
 ð)
ð  #ð)
ð "&ð)
ð ð)
ð ˜hÐ'?Ñ@ÑAð)
ð 
ó)
ðV) ð )°O÷ )ñ )rH   r+   r‰  )^rz   rZ  r»   r¡   rü   rx  r  rj  rN   rR  Úabcr   r   Úcollections.abcr   r   r   r   Ú
contextlibr	   r
   r   Úpathlibr   Útypingr   r   r   r   r   r   Útyping_extensionsr   ra   r   Útorch._utilsr   r   Útorch.distributed._shard._utilsr   Ú'torch.distributed.checkpoint._extensionr   r   Ú%torch.distributed.checkpoint.metadatar   r   r   Ú$torch.distributed.checkpoint.plannerr   r   r   r    r!   r"   r#   r$   Ú$torch.distributed.checkpoint.stagingr%   Ú$torch.distributed.checkpoint.storager&   r'   r(   Ú"torch.distributed.checkpoint.utilsr)   Útorch.futuresr*   Ú__all__r0   rD   rE   r2   rJ   r`  rP   rR   rc   ru   r¨   rF   rÍ   r¦   rÛ   r¼   ræ   r¥   rê   rd  r  r.   r-   r:  r�  r,   r+   rG   rH   r>   ú<module>rÕ     s�  ðä Û Û 	Û Û 	Û Û Û Û Û ß #ß CÓ CÝ %Ý !Ý #Ý ß ;× ;õ %ã Ý ß GÝ B÷÷ YÑ X÷	÷ 	ó 	õ E÷ñ õ
 AÝ  ò S€à€ˆcÓ ð ÷	Ið 	Ió ð	Ið ÷ð ó ðð €ð˜ó ô�Cô ô�}ô ô.W"˜Mô W"÷t0Yñ 0Yðf4�Yð 4 3ó 4ð #ð ¨d°9©oð À$ÀtÈIÁÑBWó ð< ñ-Ø(ð-à�I‰Ið-ð �—
‘
˜EŸL™LÐ(Ñ
)ð-ð ð	-ð
 ð-ð ð-ð ó-ð`YØðYà—‘ðYð —+‘+ðYð ð	Yð
 )ðYð ðYð ðYð ðYð ðYð 
óYôxB�Sô BôD9�ô 9ôxF@˜ô F@÷Rñ ô4p@�}ô p@ôf>)Ð(Ð*=õ >)rH   