§
    Ÿ²ÅjDR  ã            	       óÞ  — U d dl Z d dlZd dlZd dl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mZ d dlZd dlmZ d dlmZ d dlmZ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"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 ddl6m7Z7  ej8        e9¦  «        Z:ej;        e<d<   g d¢Z= G d„ de*¦  «        Z> G d„ de'¦  «        Z? G d„ de?¦  «        Z@	 d.deeAe	f         dedeBde&fd„ZCdee&         dee&         fd „ZDdeeAe	f         d!eBde)fd"„ZE	 d.dee)         d#eBdeee)         ef         fd$„ZFde!defd%„ZGd&ed'edeBfd(„ZHd)ejI        d*edeBfd+„ZJd,ee)         dedeBfd-„ZKdS )/é    N)ÚChainMap)Úreduce)ÚAnyÚcastÚDictÚListÚOptionalÚTupleÚUnion)Únarrow_tensor_by_index)Údedup_save_plans)ÚFLATTEN_MAPPINGÚflatten_state_dict)Ú_flatten_sharded_tensors)Úset_element)ÚBytesStorageMetadataÚChunkStorageMetadataÚMetadataÚMetadataIndexÚSTATE_DICT_TYPEÚSTORAGE_TYPESÚStorageMetaÚTensorStorageMetadata)ÚLoadPlanÚLoadPlannerÚReadItemÚSavePlanÚSavePlannerÚ	WriteItemÚWriteItemType)Ú"_create_default_metadata_only_planÚ_create_read_itemsÚ_create_write_itemsÚ_init_state_dict)Úfind_state_dict_object)ÚDTensoré   )Ú_versionÚlogger)ÚDefaultSavePlannerÚDefaultLoadPlannerÚcreate_default_local_load_planÚcreate_default_global_load_planÚcreate_default_local_save_planÚcreate_default_global_save_planc                   ó  — e Zd ZU eed<   	 	 	 	 ddededee         ded	df
d
„Z	 	 ddedee	         ded	dfd„Z
d	efd„Zdee         d	eee         ef         fd„Zded	efd„Zded	eej        ej        f         fd„Zded	efd„Zdedefd„ZdS )r*   ÚmappingsTNFr   Úflatten_sharded_tensorsÚdedup_replicated_tensorsÚdedup_save_to_lowest_rankÚreturnc                 óz   — || _         || _        i | _        || _        |�t                               d¦  «         d S d S )Nz—DefaultSavePlanner's `dedup_replicated_tensors` argument is being deprecated, and no longer has any effect. Please remove this argument from your call.)r   r2   r1   r4   r)   Úwarning)Úselfr   r2   r3   r4   s        ú]C:\Projects\Historical\venv\Lib\site-packages\torch/distributed/checkpoint/default_planner.pyÚ__init__zDefaultSavePlanner.__init__E   sV   € ð #5ˆÔØ'>ˆÔ$ØˆŒØ)BˆÔ&Ø#Ð/Ý�NŠNð"ñô ð ð ð ð 0Ð/ó    Ú
state_dictÚstorage_metaÚis_coordinatorc                 óŠ   — | j         rt          |¦  «        \  }| _        | j        rt          |¦  «        }|| _        || _        d S ©N)r   r1   r2   r   r<   r>   )r8   r<   r=   r>   s       r9   Úset_up_plannerz!DefaultSavePlanner.set_up_plannerW   sQ   € ð Ô"ð 	GÝ(:¸:Ñ(FÔ(FÑ%ˆJ˜œØÔ'ð 	>Ý1°*Ñ=Ô=ˆJØ$ˆŒØ,ˆÔÐÐr;   c                 ó–   — t          | j        | j        ¦  «        }| j        rt	          j        || j        ¬¦  «        }|| _        | j        S )N©Úplanner_data)r.   r<   r>   r   ÚdataclassesÚreplacer1   Úplan)r8   rG   s     r9   Úcreate_local_planz$DefaultSavePlanner.create_local_pland   sH   € Ý-¨d¬o¸tÔ?RÑSÔSˆØÔ"ð 	IÝÔ& t¸$¼-ÐHÑHÔHˆDØˆŒ	àŒyÐr;   Ú	all_plansc                 óD  — t          || j        ¦  «        }t          |¦  «        \  }}| j        r8d„ |D ¦   «         }t	          t          |Ž ¦  «        }t          j        ||¬¦  «        }t          ||¦  «        st          d¦  «        ‚|| _
        || _        | j
        | j        fS )Nc                 ó   — g | ]	}|j         ‘Œ
S © rC   )Ú.0Úps     r9   ú
<listcomp>z9DefaultSavePlanner.create_global_plan.<locals>.<listcomp>x   s   € Ð EÐ EÐ E°A ¤Ð EÐ EÐ Er;   rC   zFailed to validate global plan)r   r4   r/   r   Údictr   rE   rF   Ú_validate_global_planÚ
ValueErrorÚglobal_planÚmetadata)r8   rI   rS   rT   Úplanner_data_dictÚmerged_mappingss         r9   Úcreate_global_planz%DefaultSavePlanner.create_global_planl   s³   € õ % Y°Ô0NÑOÔOˆ	å ?À	Ñ JÔ JÑˆ�XàÔ"ð 	Sð
 !FÐ E¸Ð EÑ EÔ EÐÝ"¥8Ð->Ð#?Ñ@Ô@ˆOÝ"Ô*¨8À/ÐRÑRÔRˆHå$ [°(Ñ;Ô;ð 	?ÝÐ=Ñ>Ô>Ð>à&ˆÔØ ˆŒàÔ ¤Ð.Ð.r;   Únew_planc                 ó   — || _         |S r@   )rG   ©r8   rX   s     r9   Úfinish_planzDefaultSavePlanner.finish_plan„   s   € ØˆŒ	Øˆr;   Ú
write_itemc                 ób   — |                       |j        ¦  «        }|                      ||¦  «        S r@   )Úlookup_objectÚindexÚtransform_object)r8   r\   Úobjects      r9   Úresolve_datazDefaultSavePlanner.resolve_dataˆ   s.   € Ø×#Ò# JÔ$4Ñ5Ô5ˆØ×$Ò$ Z°Ñ8Ô8Ð8r;   r_   c                 ó,   — t          | j        |¦  «        S ©zSExtension from the planner interface to make it easy to extend the default planner.©r%   r<   ©r8   r_   s     r9   r^   z DefaultSavePlanner.lookup_objectŒ   ó   € å% d¤o°uÑ=Ô=Ð=r;   ra   c                 ó„   — |j         t          j        k    r*t          j        ¦   «         }t          j        ||¦  «         |}|S rd   )Útyper    ÚBYTE_IOÚioÚBytesIOÚtorchÚsave)r8   r\   ra   Úbytess       r9   r`   z#DefaultSavePlanner.transform_object�   s9   € àŒ?�mÔ3Ò3Ð3Ý”J‘L”LˆEÝŒJ�v˜uÑ%Ô%Ð%ØˆFØˆr;   )TTNF©NF)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Úboolr	   r:   r   r   rA   r   rH   r   r
   r   rW   r[   r   r   rm   ÚTensorrk   rl   rb   r   r   r^   r`   rL   r;   r9   r*   r*   B   s°  € € € € € € ØÐÐÑð $(Ø(,Ø37Ø*/ðð à ðð "&ðð #+¨4¤.ð	ð
 $(ðð 
ðð ð ð ð* /3Ø$ð	-ð -à#ð-ð ˜{Ô+ð-ð ð	-ð
 
ð-ð -ð -ð -ð 8ð ð ð ð ð/Ø˜hœð/à	ˆt�HŒ~˜xÐ'Ô	(ð/ð /ð /ð /ð0 Hð °ð ð ð ð ð9 yð 9°U¸5¼<ÈÌÐ;SÔ5Tð 9ð 9ð 9ð 9ð> =ð >°Sð >ð >ð >ð >ð¨9ð ¸cð ð ð ð ð ð r;   r*   c            	       ó2  — e Zd ZU dZeed<   eed<   	 	 	 ddededed	d
fd„Z	 	 ddede	e
         ded	d
fd„Zd	efd„Zdee         d	ee         fd„Zded	efd„Zdedej        d	d
fd„Zdefd„Zdedej        d	d
fd„Zded	ej        fd„Zdedej        fd„Zd
S ) r+   ak  
    DefaultLoadPlanner that adds multiple features on top of LoadPlanner.

    In particular it adds the following:

    flatten_state_dict: Handle state_dict with nested dicts
    flatten_sharded_tensors: For FSDP in 2D parallel mode
    allow_partial_load: If False, will raise a runtime error if a key is present in state_dict, but not in the checkpoint.
    Úoriginal_state_dictr1   TFr   r2   Úallow_partial_loadr5   Nc                 óL   — || _         || _        i | _        i | _        || _        d S r@   )r   r2   rx   r1   ry   )r8   r   r2   ry   s       r9   r:   zDefaultLoadPlanner.__init__§   s1   € ð #5ˆÔØ'>ˆÔ$Ø#%ˆÔ ØˆŒØ"4ˆÔÐÐr;   r<   rT   r>   c                 óÄ   — t          |¦  «         || _        | j        rt          |¦  «        }| j        rt	          |¦  «        \  }| _        || _        || _        || _        d S r@   )	r$   rx   r2   r   r   r1   r<   rT   r>   )r8   r<   rT   r>   s       r9   rA   z!DefaultLoadPlanner.set_up_planner³   sn   € õ 	˜Ñ$Ô$Ð$Ø#-ˆÔ àÔ'ð 	>Ý1°*Ñ=Ô=ˆJàÔ"ð 	GÝ(:¸:Ñ(FÔ(FÑ%ˆJ˜œà$ˆŒØ ˆŒØ,ˆÔÐÐr;   c                 óÜ  — | j         €J ‚| j        r¼t          | j                             ¦   «         ¦  «        }t          | j         j                             ¦   «         ¦  «        }||z
  }|rddt          _        t          | j        ¦  «        \  }}t          |                     ¦   «         ¦  «        }||z  r||c| _        | _	        d t          _        t          | j        | j         | j         ¦  «        S )NÚ2_3)rT   r   Úsetr<   ÚkeysÚstate_dict_metadatar(   Ú_derived_versionrx   r1   r,   ry   )r8   Úcurrent_keysÚ	load_keysÚmissing_keysÚold_state_dictÚold_mappingsÚold_keyss          r9   rH   z$DefaultLoadPlanner.create_local_planÆ   sð   € ØŒ}Ð(Ð(Ð(ØÔ"ð 	1õ$ ˜tœ×3Ò3Ñ5Ô5Ñ6Ô6ˆLÝ˜DœMÔ=×BÒBÑDÔDÑEÔEˆIØ$ |Ñ3ˆLØð 
1Ø,1•Ô)Ý/AØÔ,ñ0ô 0Ñ,� õ ˜~×2Ò2Ñ4Ô4Ñ5Ô5�Ø˜lÑ*ð RØ5CÀ\Ð2�D”O T¤]ð -1•Ô)å-ØŒO˜Tœ]°Ô0GÐ,Gñ
ô 
ð 	
r;   rS   c                 ó    — t          |¦  «        S r@   )r-   )r8   rS   s     r9   rW   z%DefaultLoadPlanner.create_global_planí   s   € Ý.¨{Ñ;Ô;Ð;r;   rX   c                 ó   — |S r@   rL   rZ   s     r9   r[   zDefaultLoadPlanner.finish_planð   s   € Øˆr;   Ú	read_itemÚvaluec                 óæ   — | j         rAt          | j        | j        |j        j                 t          j        |d¬¦  «        ¦  «         d S t          j        |d¬¦  «        | j        |j        j        <   d S )NF)Úweights_only)	r   r   rx   r1   Ú
dest_indexÚfqnrm   Úloadr<   )r8   rŠ   r‹   s      r9   Ú
load_byteszDefaultLoadPlanner.load_bytesó   s�   € ØÔ"ð 		ÝØÔ(Ø”˜iÔ2Ô6Ô7Ý”
˜5¨uÐ5Ñ5Ô5ñô ð ð ð õ 9>¼
Ø Eð9ñ 9ô 9ˆDŒO˜IÔ0Ô4Ñ5Ð5Ð5r;   c                 ób   — |                       |j        ¦  «        }|                      ||¦  «        S r@   )Úlookup_tensorrŽ   Útransform_tensor©r8   rŠ   Útensors      r9   Úresolve_tensorz!DefaultLoadPlanner.resolve_tensorÿ   s.   € Ø×#Ò# IÔ$8Ñ9Ô9ˆØ×$Ò$ Y°Ñ7Ô7Ð7r;   r–   c                 ó   — d S r@   rL   r•   s      r9   Úcommit_tensorz DefaultLoadPlanner.commit_tensor  s   € Øˆr;   r_   c                 ó,   — t          | j        |¦  «        S rd   re   rf   s     r9   r“   z DefaultLoadPlanner.lookup_tensor  rg   r;   c                 ó8   — t          ||j        |j        ¦  «        S rd   )r   Údest_offsetsÚlengthsr•   s      r9   r”   z#DefaultLoadPlanner.transform_tensor
  s   € å% f¨iÔ.DÀiÔFWÑXÔXÐXr;   )TTFrp   )rq   rr   rs   Ú__doc__r   rt   r   ru   r:   r	   r   rA   r   rH   r   rW   r[   r   rk   rl   r‘   r—   rm   rv   r™   r   r“   r”   rL   r;   r9   r+   r+   ™   sù  € € € € € € ðð ð )Ð(Ð(Ñ(ØÐÐÑð $(Ø(,Ø#(ð	
5ð 
5à ð
5ð "&ð
5ð !ð	
5ð
 
ð
5ð 
5ð 
5ð 
5ð (,Ø$ð	-ð -à#ð-ð ˜8Ô$ð-ð ð	-ð
 
ð-ð -ð -ð -ð&%
 8ð %
ð %
ð %
ð %
ðN<¨d°8¬nð <ÀÀhÄð <ð <ð <ð <ð Hð °ð ð ð ð ð
 Hð 
°R´Zð 
ÀDð 
ð 
ð 
ð 
ð8¨ð 8ð 8ð 8ð 8ð xð ¸¼ð È$ð ð ð ð ð> =ð >°U´\ð >ð >ð >ð >ðY¨(ð Y¸E¼Lð Yð Yð Yð Yð Yð Yr;   r+   c            	       óf   ‡ — e Zd ZdZdˆ fd„	Zdededefd„Z	 	 dd	e	de
e         d
eddfˆ fd„Zˆ xZS )Ú_EmptyStateDictLoadPlanneraí  
    Extension of DefaultLoadPlanner, which rebuilds state_dict from the saved metadata.
    Useful for loading in state_dict without first initializing a model, such as
    when converting a DCP checkpoint into a Torch save file.

    . N.B. `state_dict` must be an empty dictionary when used with this LoadPlanner

    .. warning::
        Because the entire state dict is initialized, It's recommended to only utilize
        this LoadPlanner on a single rank or process to avoid OOM.

    Nc                 óH   •— || _          t          ¦   «         j        |i |¤Ž d S r@   )r   Úsuperr:   )r8   r   ÚargsÚkwargsÚ	__class__s       €r9   r:   z#_EmptyStateDictLoadPlanner.__init__  s,   ø€ ØˆŒ	Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r;   ÚkeyrT   r5   c           	      óT  ‡ — ‰ j         €dS |‰ j         v r	 g }|j                             |¦  «        }|D ]W}|r>|                     d                     |d         t          |¦  «        g¦  «        ¦  «         ŒB|                     |¦  «         ŒXt          ˆ fd„|D ¦   «         ¦  «        rdS dS )NTú.éÿÿÿÿc              3   ó*   •K  — | ]}|‰j         v V — Œd S r@   )r   )rM   Úunflattened_keyr8   s     €r9   ú	<genexpr>zA_EmptyStateDictLoadPlanner._should_include_key.<locals>.<genexpr>3  s*   øè è € ÐTÐT°ˆ $¤)Ð+ÐTÐTÐTÐTÐTÐTr;   F)r   rD   ÚgetÚappendÚjoinÚstrÚany)r8   r¦   rT   Úunflattened_keysrD   r«   s   `     r9   Ú_should_include_keyz._EmptyStateDictLoadPlanner._should_include_key!  sÛ   ø€ ØŒ9ÐØ�4à�$”)ÐÐØà&(ÐØÔ,×0Ò0°Ñ5Ô5ˆØ+ð 	9ð 	9ˆOØð 9Ø ×'Ò'Ø—H’HÐ.¨rÔ2µC¸Ñ4HÔ4HÐIÑJÔJñô ð ð ð
 !×'Ò'¨Ñ8Ô8Ð8Ð8åÐTÐTÐTÐTÐCSÐTÑTÔTÑTÔTð 	Ø�4àˆur;   Fr<   r>   c                 ó”  •— |rJ ‚|€J ‚|j                              ¦   «         D ]�\  }}|                      ||¦  «        sŒt          |t          ¦  «        r%t          j        |j        |j        j	        ¬¦  «        }||j
        v rt          ||j
        |         |¦  «         Œ||||<   Œ‚t          ¦   «                              |||¦  «         d S )N)Údtype)r€   Úitemsr³   Ú
isinstancer   rm   ÚemptyÚsizeÚ
propertiesrµ   rD   r   r¢   rA   )r8   r<   rT   r>   ÚkÚvr¥   s         €r9   rA   z)_EmptyStateDictLoadPlanner.set_up_planner8  sâ   ø€ ð ÐÐˆ~ØÐ#Ð#Ð#ð Ô0×6Ò6Ñ8Ô8ð 		"ð 		"‰DˆAˆqØ×+Ò+¨A¨xÑ8Ô8ð Øå˜!Õ2Ñ3Ô3ð BÝ”K ¤¨a¬lÔ.@ÐAÑAÔA�Ø�HÔ)Ð)Ð)Ý˜J¨Ô(=¸aÔ(@À!ÑDÔDÐDÐDà !�
˜1‘�å‰Œ×Ò˜z¨8°^ÑDÔDÐDÐDÐDr;   r@   rp   )rq   rr   rs   rž   r:   r°   r   ru   r³   r   r	   rA   Ú__classcell__)r¥   s   @r9   r    r      sÕ   ø€ € € € € ðð ð*ð *ð *ð *ð *ð *ð sð °hð À4ð ð ð ð ð4 (,Ø$ð	Eð Eà#ðEð ˜8Ô$ðEð ð	Eð
 
ðEð Eð Eð Eð Eð Eð Eð Eð Eð Er;   r    Tr<   rT   Ústrictr5   c           	      óD  — g }	 |                       ¦   «         D ]ú\  }}||j        vr|rt          d|› d�¦  «        ‚Œ$|j        |         }t          |t          ¦  «        r]t          |dd ¦  «        �L|j        |                     ¦   «         k    r/t          d|j        › d|                     ¦   «         › d|› �¦  «        ‚t          |t          ¦  «        r.|j	         
                    ¦   «         �|t          |||¦  «        z  }Œæ|t          |||¦  «        z  }Œût          |¦  «        S )Nz&Missing key in checkpoint state_dict: r¨   r¹   zSize mismatch between saved z and current: z for )r¶   r€   ÚRuntimeErrorr·   r   Úgetattrr¹   rR   r&   Údevice_meshÚget_coordinater"   r   )r<   rT   r¾   Úrequestsr�   ÚobjÚmds          r9   r,   r,   P  sH  € ð €Hðð ×$Ò$Ñ&Ô&ð 9ð 9‰ˆˆSà�hÔ2Ð2Ð2Øð Ý"Ð#RÈCÐ#RÐ#RÐ#RÑSÔSÐSààÔ)¨#Ô.ˆå�rÕ0Ñ1Ô1ð	å˜˜V TÑ*Ô*Ð6Ø”˜3Ÿ8š8™:œ:Ò%Ð%åØ\¨r¬wÐ\Ð\ÀcÇhÂhÁjÄjÐ\Ð\ÐWZÐ\Ð\ñô ð õ
 �c�7Ñ#Ô#ð 	9ØŒ×-Ò-Ñ/Ô/Ð;ØÕ.¨s°B¸Ñ<Ô<Ñ<�øàÕ*¨3°°CÑ8Ô8Ñ8ˆHˆHå�HÑÔÐr;   rI   c                 ó   — | S )z¼
    Create global load plan used by DefaultLoadPlanner.

    The default load behavior involved no global coordination and this function
    currently doesn't change the local plans.
    rL   )rI   s    r9   r-   r-   z  s
   € ð Ðr;   r>   c                 ó  — g }|                       ¦   «         D ]Z\  }}t          |t          ¦  «        r-|j                             ¦   «         �|t          ||¦  «        z  }ŒG|t          ||¦  «        z  }Œ[t          |¦  «        S )a  
    Create the ``SavePlan`` used by DefaultSavePlanner.

    On non-coordinator ranks, this function ignores tensors and non-tensor objects,
    only producing writes for ShardedTensor objects.

    On the coordinator rank, produce writes for all values.
    )r¶   r·   r&   rÂ   rÃ   r#   r   )r<   r>   rÄ   r�   rÅ   s        r9   r.   r.   †  s�   € ð €HØ×$Ò$Ñ&Ô&ð 
6ð 
6‰ˆˆSõ �c�7Ñ#Ô#ð 	6ØŒ×-Ò-Ñ/Ô/Ð;ØÕ/°°SÑ9Ô9Ñ9�øð
 Õ+¨C°Ñ5Ô5Ñ5ˆHˆHå�HÑÔÐr;   Úrewrite_index_hintsc                 ó†  — i }g }| D �]©}g }|j         D �]r}|j        t          j        k    s|j        j        |vsJ ‚|j        t          j        k    r1t          ¦   «         ||j        j        <   |                     |¦  «         Œn|j	        €J ‚t          t          |                     |j        j        t          |j	        j        |j	        j        g ¬¦  «        ¦  «        ¦  «        }|}|rCt          j        |j        t#          |j        ¦  «        ¬¦  «        }	t          j        ||	¬¦  «        }|                     |¦  «         |j	        j        €J d|j        j        › d�¦   «         ‚|j                             |j	        j        ¦  «         �Œt|                     t          j        ||¬¦  «        ¦  «         �Œ«|t)          |¦  «        fS )a6  
    Create the global plan and metadata used by DefaultSavePlanner.

    Metadata is produced by concatenating the metadata of all ``WriteItem`` from the supplied plans.

    The only global planning change is to update index hints in all ``MetadataIndex`` objects if
    ``rewrite_index_hints`` is True.
    N)rº   r¹   Úchunks)r_   zZ
                    Cannot create MD for tensor without bounds.
                    FQN: z
                )r¶   )r¶   ri   r    ÚSHARDr_   r�   rj   r   r®   Útensor_datar   r   Ú
setdefaultrº   r¹   rE   rF   ÚlenrË   Úchunkr   )
rI   rÉ   rÆ   Ú	new_plansrG   Ú	new_itemsÚitemÚ	tensor_mdÚnew_itemÚ	new_indexs
             r9   r/   r/   ¡  sì  € ð $&€BØ€IØð %Eñ %EˆØˆ	Ø”Jð "	@ñ "	@ˆDØ”9¥Ô 3Ò3Ð3Ø”z”~¨RÐ/Ð/Ð/Ð/àŒy�MÔ1Ò1Ð1Ý%9Ñ%;Ô%;��4”:”>Ñ"Ø× Ò  Ñ&Ô&Ð&Ð&àÔ'Ð3Ð3Ð3Ý Ý)Ø—M’MØœ
œÝ-Ø'+Ô'7Ô'BØ!%Ô!1Ô!6Ø#%ðñ ô ñô ñ
ô 
�	ð  �Ø&ð JÝ +Ô 3Øœ
­#¨iÔ.>Ñ*?Ô*?ð!ñ !ô !�Iõ  +Ô2°4¸yÐIÑIÔI�HØ× Ò  Ñ*Ô*Ð*ð Ô$Ô*Ð6Ð6ðàœ*œ.ðð ð ñ 7Ô6Ð6ð
 Ô ×'Ò'¨Ô(8Ô(>Ñ?Ô?Ð?Ñ?Ø×Ò�Ô,¨T¸ÐCÑCÔCÑDÔDÐDÑDØ•x ‘|”|Ð$Ð$r;   c                 óJ   — t          | ¦  «        }t          |g¦  «        \  }}|S )zTReturn the ``Metadata`` if DefaultSavePlanner was used to checkpoint ``state_dict``.)r!   r/   )r<   rG   Ú_rÆ   s       r9   Ú_create_default_local_metadatarÙ   Ø  s'   € å-¨jÑ9Ô9€DÝ+¨T¨FÑ3Ô3�E€A€rØ€Ir;   Úbox0Úbox1c                 ó  — t          | j        ¦  «        }t          |¦  «        D ]\}| j        |         |j        |         |j        |         z   k    r dS |j        |         | j        |         | j        |         z   k    r dS Œ]dS )z9Check if two boxes overlap. Tuples are (offset, lengths).FT)rÏ   ÚoffsetsÚrangeÚsizes)rÚ   rÛ   ÚndimsÚis       r9   Ú_check_box_overlaprâ   ß  s†   € õ �”ÑÔ€EÝ�5‰\Œ\ð ð ˆØŒ<˜Œ?˜dœl¨1œo°´
¸1´Ñ=Ò=Ð=Ø�5�5ØŒ<˜Œ?˜dœl¨1œo°´
¸1´Ñ=Ò=Ð=Ø�5�5ð >ð ˆ4r;   Úouter_box_sizeÚ	inner_boxc                 óä   — t          t          | ¦  «        ¦  «        D ]R}|j        |         dk     r dS |j        |         dk     r dS |j        |         |j        |         z   | |         k    r dS ŒSdS )Nr   FT)rÞ   rÏ   rÝ   rß   )rã   rä   rá   s      r9   Ú_check_box_boundsræ   ï  sŽ   € õ •3�~Ñ&Ô&Ñ'Ô'ð ð ˆØÔ˜QÔ !Ò#Ð#Ø�5�5ØŒ?˜1Ô Ò!Ð!Ø�5�5ØÔ˜QÔ )¤/°!Ô"4Ñ4°~ÀaÔ7HÒHÐHØ�5�5ð Ið ˆ4r;   rS   c           	      ó¬  — d}|j                              ¦   «         D �]6\  }}t          |t          ¦  «        rŒt	          |j        ¦  «        dk    rŒ5d}t          |j        ¦  «        D ]¥\  }}t          |j        |¦  «        s$t           
                    d||j        |¦  «         d}|t          t          j        |j        d¦  «        z  }|j        |dz   d …         D ]1}t          ||¦  «        rt           
                    d|||¦  «         d}Œ2Œ¦t          t          j        |j        d¦  «        }	||	k    rt           
                    d||	|¦  «         d}�Œ8|S )NTr   z~
                        key:%s has out of bounds chunk:
                        tensor-size:%s chunk: %s
                    Fr'   z$key:%s has overlapping chunks: %s %szq
                    key:%s invalid fill tensor-volume:
                    %s chunks-volume: %s
                )r€   r¶   r·   r   rÏ   r¹   Ú	enumeraterË   ræ   r)   r7   r   ÚoperatorÚmulrß   râ   )
rS   rT   Úall_goodr¦   r‹   Úchunks_volumeÚ	chunk_idxÚchunk0Úchunk1Útensor_volumes
             r9   rQ   rQ   ý  sˆ  € Ø€HØÔ2×8Ò8Ñ:Ô:ð )ñ )‰
ˆˆUÝ�eÕ1Ñ2Ô2ð 	ØÝˆuŒz‰?Œ?˜aÒÐØØˆÝ!*¨5¬<Ñ!8Ô!8ð 	%ð 	%ÑˆI�vå$ U¤Z°Ñ8Ô8ð 
!Ý—’ðð Ø”JØñô ð ð !�Ø�V¥H¤L°&´,ÀÑBÔBÑBˆMð  œ, y°1¡}  Ô7ð %ð %�Ý% f¨fÑ5Ô5ð %Ý—N’NØ>ÀÀVÈVñô ð ð  %�Høð%õ �xœ|¨U¬Z¸Ñ;Ô;ˆØ˜MÒ)Ð)Ý�NŠNðð ØØñô ð ð ˆHùà€Or;   )T)LrE   rk   Úloggingré   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   r	   r
   r   rm   Útorch.distributed._shard._utilsr   Ú.torch.distributed.checkpoint._dedup_save_plansr   Ú)torch.distributed.checkpoint._nested_dictr   r   Ú2torch.distributed.checkpoint._sharded_tensor_utilsr   Ú&torch.distributed.checkpoint._traverser   Ú%torch.distributed.checkpoint.metadatar   r   r   r   r   r   r   r   Ú$torch.distributed.checkpoint.plannerr   r   r   r   r   r   r    Ú,torch.distributed.checkpoint.planner_helpersr!   r"   r#   r$   Ú"torch.distributed.checkpoint.utilsr%   Útorch.distributed.tensorr&   Ú r(   Ú	getLoggerrq   r)   ÚLoggerrt   Ú__all__r*   r+   r    r°   ru   r,   r-   r.   r/   rÙ   râ   ÚSizeræ   rQ   rL   r;   r9   ú<module>r     sµ  ðð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @à €€€Ø BÐ BÐ BÐ BÐ BÐ BØ KÐ KÐ KÐ KÐ KÐ Kðð ð ð ð ð ð ð ð XÐ WÐ WÐ WÐ WÐ WØ >Ð >Ð >Ð >Ð >Ð >ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð FÐ EÐ EÐ EÐ EÐ EØ ,Ð ,Ð ,Ð ,Ð ,Ð ,à Ð Ð Ð Ð Ð ð +˜Ô*¨8Ñ4Ô4€ˆŒÐ 4Ð 4Ñ 4ðð ð €ðTð Tð Tð Tð T˜ñ Tô Tð TðnsYð sYð sYð sYð sY˜ñ sYô sYð sYðl>Eð >Eð >Eð >Eð >EÐ!3ñ >Eô >Eð >EðD DHð'ð 'Ø�S˜#�X”ð'Ø*2ð'Ø<@ð'àð'ð 'ð 'ð 'ðT	Ø�HŒ~ð	à	ˆ(„^ð	ð 	ð 	ð 	ðØ�S˜#�X”ðØ04ðàðð ð ð ð: !%ð4%ð 4%Ø�HŒ~ð4%àð4%ð ˆ4�Œ>˜8Ð#Ô$ð4%ð 4%ð 4%ð 4%ðn¨ð À8ð ð ð ð ðÐ1ð Ð9Mð ÐRVð ð ð ð ð Ø”JðØ+?ðà	ðð ð ð ð- t¨H¤~ð -Àð -Èdð -ð -ð -ð -ð -ð -r;   