+
    –°³jÜo  ã                   ó,  a € R' tJ0 t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
 ^ RIHtHt ^ RIt^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	IHt ^ R
IHtHtHtHtHtH t H!t!H"t" ^ RI#H$t$H%t%H&t&H't'H(t(H)t)H*t* ^ RI+H,t,H-t-H.t.H/t/H0t0H1t1H2t2 ^ RI3H4t4 ^ RI5H6t6 ^ RI7H8t8 ^RI9H:t: ]Pv                  ! ]<4      t=] ^ k . R(Ot> ! R R](4      t? ! R R]%4      t@ ! R R]@4      tAR)R R lltBR R ltCR R ltDR)R R lltER R  ltFR! R" ltGR# R$ ltHR% R& ltIR# )*é    N)Úbisect_rightÚinsort)ÚChainMap)ÚAnyÚcast)Ú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)Ú_compare_save_plansÚ_contains_usable_planÚ"_create_default_metadata_only_planÚ_create_read_itemsÚ_create_write_itemsÚ_init_state_dictÚ_merge_delta_local_plans)Ú_is_checkpointable_tensor)Úfind_state_dict_object)ÚDTensor)Ú_versionÚDefaultSavePlannerÚDefaultLoadPlannerc                   ó  a € ] tR t^Gt o RV 3R lR lltRV 3R lR lltV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R ltRtV tR# )r(   Nc                óJ   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RS[ RS[ RR/# )é   r   Úflatten_sharded_tensorsÚdedup_replicated_tensorsNÚdedup_save_to_lowest_rankÚenable_plan_cachingÚreturn©Úbool)ÚformatÚ__classdict__s   "€Úm/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/distributed/checkpoint/default_planner.pyÚ__annotate__ÚDefaultSavePlanner.__annotate__J   sK   ø€ ÷ 8ñ 8á ð8ñ "&ð8ñ #'¨¥+ð	8ñ
 $(ð8ñ "ð8ð 
ñ8ó    c                ó¬   € Wn         W n        / V n        W@n        Ve   \        P                  R4       V P                  P                  V n        WPn	        R # )Nz—DefaultSavePlanner's `dedup_replicated_tensors` argument is being deprecated, and no longer has any effect. Please remove this argument from your call.)
r   r-   Úmappingsr/   ÚloggerÚwarningÚ	__class__Ú__name__Ú_cached_plans_keyÚ_enable_plan_caching)Úselfr   r-   r.   r/   r0   s   &&&&&&r6   Ú__init__ÚDefaultSavePlanner.__init__J   sN   € ð #5ÔØ'>Ô$ØˆŒØ)BÔ&Ø#Ò/Ü�N‰Nð"ôð
 '+§n¡n×&=Ñ&=ˆÔØ$7Ö!r9   c                ó>   <€ V ^8„  d   QhRS[ RS[R,          RS[RR/# )r,   Ú
state_dictÚstorage_metaNÚis_coordinatorr1   )r   r   r3   )r4   r5   s   "€r6   r7   r8   _   s8   ø€ ÷ -ñ -á#ð-ñ " DÕ(ð-ñ ð	-ð
 
ñ-r9   c                ó    € V P                   '       d   \        V4      w  qn        V P                  '       d   \        V4      pWn        W0n        R # ©N)r   r;   r-   r   rF   rH   )rB   rF   rG   rH   s   &&&&r6   Úset_up_plannerÚ!DefaultSavePlanner.set_up_planner_   s@   € ð ×"×"Ð"Ü(:¸:Ó(FÑ%ˆJœØ×'×'Ð'Ü1°*Ó=ˆJØ$ŒØ,Ör9   c                ó    <€ V ^8„  d   QhRS[ /# ©r,   r1   ©r   )r4   r5   s   "€r6   r7   r8   l   s   ø€ ÷ ñ ¡8ñ r9   c                óà  € \        V P                  V P                  4      pV P                  '       d"   \        P
                  ! WP                  R 7      pWn        V P                  '       dy   V P                  \        P                  9   dT   \        V\        P                  V P                  ,          4      '       d#   \        P                  R4       \        . RR7      # Wn        V P                  # )©Úplanner_datazINo change in the local plan. Skipping sending the plan to the coordinatorF©Úusable)Úcreate_default_local_save_planrF   rH   r   ÚdataclassesÚreplacer;   ÚplanrA   r@   r   Ú_cached_save_planr   r<   Úinfor   Ú_pending_local_plan)rB   rX   s   & r6   Úcreate_local_planÚ$DefaultSavePlanner.create_local_planl   s´   € Ü-¨d¯o©o¸t×?RÑ?RÓSˆØ×"×"Ð"Ü×&Ò& t¿-¹-ÔHˆDØŒ	à×$×$Ð$ð ×&Ñ&¬+×*GÑ*GÔGÜ'Øœ+×7Ñ7¸×8NÑ8NÕO÷ò ô —‘Ø_ôô   ¨5Ô1Ð1ð ,0Ô(à�y‰yÐr9   c                óF   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          /# ©r,   Ú	all_plansr1   )Úlistr   )r4   r5   s   "€r6   r7   r8   ˆ   s'   ø€ ÷ Kñ K©4±­>ð K¹dÁ8½nñ Kr9   c                ó,   € \        WP                  4      # rJ   )r	   r/   )rB   r`   s   &&r6   Ú_dedup_save_plansÚ$DefaultSavePlanner._dedup_save_plansˆ   s   € Ü 	×+IÑ+IÓJÐJr9   c                ó\   <€ V ^8„  d   QhRS[ S[,          RS[S[ S[,          S[3,          /# r_   ©ra   r   Útupler   )r4   r5   s   "€r6   r7   r8   ‹   s/   ø€ ÷ %ñ %Ù™h�ð%á	‰t‘H�~™xÐ'Õ	(ñ%r9   c                óœ  € V P                  V4      p\        V4      w  r4V P                  '       dD   V Uu. uF  qUP                  NK  	  pp\	        \        V!  4      p\        P                  ! WGR 7      p\        W44      pV'       d@   RP                  V4      p	\        V	4      R8”  d   V	R,          R,           p	\        RV	 24      hW43# u upi )rQ   z; iô  :Niô  Nz... (truncated)z Failed to validate global plan: )rc   Úcreate_default_global_save_planr   rR   Údictr   rV   rW   Ú_validate_global_planÚjoinÚlenÚ
ValueError)
rB   r`   Údeduped_plansÚglobal_planÚmetadataÚpÚplanner_data_dictÚmerged_mappingsÚvalidation_errorsÚerror_summarys
   &&        r6   Ú_create_global_planÚ&DefaultSavePlanner._create_global_plan‹   sÃ   € ð ×.Ñ.¨yÓ9ˆä ?ÀÓ NÑˆà×"×"Ð"ñ
 :EÓ E¹°A§¤¹ÐÐ EÜ"¤8Ð->Ñ#?Ó@ˆOÜ"×*Ò*¨8ÔRˆHä1°+ÓHÐßØ ŸI™IÐ&7Ó8ˆMÜ�=Ó! CÔ'Ø -¨dÕ 3Ð6GÕ G�ÜÐ?À¸ÐOÓPÐPàÐ$Ð$ùò !Fs   µC	c                óp   <€ V ^8„  d   QhRS[ S[,          RS[S[ S[,          S[ S[,          S[3,          /# r_   rf   )r4   r5   s   "€r6   r7   r8   ¤   s5   ø€ ÷ :8ñ :8Ù™h�ð:8á	‰t‘H�~™t¡H�~©xÐ7Õ	8ñ:8r9   c                óV  € . pV P                   \        P                  9  do   V P                  V4      w  r4V\        P                  V P                   &   V\        P                  V P                   &   V\        P
                  V P                   &   W3V3# \        V4      '       gc   \        . RR7      .\        V4      ,          p\        P                  V P                   ,          p\        P
                  V P                   ,          pEM$\        \        P                  V P                   ,          V4      pV\        P                  V P                   &   V P                  V4      w  r4V P                   V P                  9   du   \        \        P                  V P                   ,          V4       FE  w  rg\        Wg4      '       d   VP                  \        . RR7      4       K4  VP                  V4       KG  	  V\        P                  V P                   &   V\        P
                  V P                   &   W#V3# )z_
Create global plan with caching.
Returns a tuple of global_plan_delta, global_plan, metadata.
FrS   )r@   r   Ú_cached_all_plansrw   Ú_cached_global_planÚ_cached_metadatar   r   rm   r#   Úzipr   Úappend)rB   r`   Úglobal_plan_deltarp   rq   Úmerged_plansÚcached_planÚnew_plans   &&      r6   Ú _create_global_plan_with_cachingÚ3DefaultSavePlanner._create_global_plan_with_caching¤   sÎ  € ð -/Ðà×!Ñ!¬×)FÑ)FÔFð %)×$<Ñ$<¸YÓ$GÑ!ˆKð ENŒK×)Ñ)¨$×*@Ñ*@ÑAØFQŒK×+Ñ+¨D×,BÑ,BÑCØCKŒK×(Ñ(¨×)?Ñ)?Ñ@à¨XÐ5Ð5ô % Y×/Ò/ô "*¨"°UÔ!;Ð <¼sÀ9»~Õ MÐÜ%×9Ñ9¸$×:PÑ:PÕQˆKÜ"×3Ñ3°D×4JÑ4JÕKŠHô 4Ü×-Ñ-¨d×.DÑ.DÕEÀyóˆLð EQŒK×)Ñ)¨$×*@Ñ*@ÑAØ$(×$<Ñ$<¸\Ó$JÑ!ˆKà×%Ñ%¨×)AÑ)AÔAÜ-0Ü×3Ñ3°D×4JÑ4JÕKÈ[ö.Ñ)�Kô +¨;×AÒAØ)×0Ñ0´¸"ÀUÔ1KÖLà)×0Ñ0°Ö:ñ.ð GRŒK×+Ñ+¨D×,BÑ,BÑCØCKŒK×(Ñ(¨×)?Ñ)?Ñ@à ¨xÐ7Ð7r9   c                ó\   <€ V ^8„  d   QhRS[ S[,          RS[S[ S[,          S[3,          /# r_   rf   )r4   r5   s   "€r6   r7   r8   à   s/   ø€ ÷ 0ñ 0Ù™h�ð0á	‰t‘H�~™xÐ'Õ	(ñ0r9   c                ó²   € . pV P                   '       d   V P                  V4      w  pppMV P                  V4      w  r4TpW0n        W@n        W P                  3# rJ   )rA   r„   rw   rp   rq   )rB   r`   r€   rp   rq   s   &&   r6   Úcreate_global_planÚ%DefaultSavePlanner.create_global_planà   sg   € ð -/ÐØ×$×$Ð$ð ×5Ñ5°iÓ@ñ	Ø!ØÙð %)×$<Ñ$<¸YÓ$GÑ!ˆKà +Ðà&ÔØ Œà §-¡-Ð/Ð/r9   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# ©r,   rƒ   r1   rO   )r4   r5   s   "€r6   r7   r8   ö   s   ø€ ÷ ñ ±(ð ¹xñ r9   c                ó²   € TpVP                   '       g$   \        P                  V P                  ,          pV# TpV\        P                  V P                  &   V# rJ   )rT   r   Ú_cached_final_save_planr@   ©rB   rƒ   Úfinished_plans   && r6   Ú_finish_plan_with_cachingÚ,DefaultSavePlanner._finish_plan_with_cachingö   sQ   € Ø"*ˆà��ˆÜ'×?Ñ?À×@VÑ@VÕWˆMð Ðð %ˆMØJRŒK×/Ñ/°×0FÑ0FÑGØÐr9   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r‹   rO   )r4   r5   s   "€r6   r7   r8      s   ø€ ÷ ñ ¡Hð ±ñ r9   c                óæ   € TpV P                   '       dM   V P                  V4      p\        V R 4      '       d*   V P                  \        P
                  V P                  &   V =W n        V P                  # )r[   )rA   r�   Úhasattrr[   r   rY   r@   rX   rŽ   s   && r6   Úfinish_planÚDefaultSavePlanner.finish_plan   si   € Ø"*ˆà×$×$Ð$Ø ×:Ñ:¸8ÓDˆMô �tÐ2×3Ò3à×,Ñ,ô ×-Ñ-¨d×.DÑ.DÑEð Ð,à!Œ	Ø�y‰yÐr9   c                ó^   <€ V ^8„  d   QhRS[ RS[P                  S[P                  ,          /# )r,   Ú
write_itemr1   )r   ÚtorchÚTensorÚioÚBytesIO)r4   r5   s   "€r6   r7   r8     s(   ø€ ÷ 9ñ 9¡yð 9±U·\±\ÁBÇJÁJÕ5Nñ 9r9   c                óZ   € V P                  VP                  4      pV P                  W4      # rJ   )Úlookup_objectÚindexÚtransform_object)rB   r˜   Úobjects   && r6   Úresolve_dataÚDefaultSavePlanner.resolve_data  s)   € Ø×#Ñ# J×$4Ñ$4Ó5ˆØ×$Ñ$ ZÓ8Ð8r9   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r,   rŸ   r1   )r   r   )r4   r5   s   "€r6   r7   r8     s   ø€ ÷ >ñ >¡=ð >±Sñ >r9   c                ó.   € \        V P                  V4      # ©zSExtension from the planner interface to make it easy to extend the default planner.©r%   rF   ©rB   rŸ   s   &&r6   rž   Ú DefaultSavePlanner.lookup_object  ó   € ä% d§o¡o°uÓ=Ð=r9   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r,   r˜   r¡   )r   r   )r4   r5   s   "€r6   r7   r8     s   ø€ ÷ ñ ©9ð ¹cñ r9   c                óž   € VP                   \        P                  8X  d.   \        P                  ! 4       p\
        P                  ! W#4       TpV# r§   )Útyper   ÚBYTE_IOr›   rœ   r™   Úsave)rB   r˜   r¡   Úbytess   &&& r6   r    Ú#DefaultSavePlanner.transform_object  s5   € à�?‰?œm×3Ñ3Ô3Ü—J’J“LˆEÜ�JŠJ�vÔ%ØˆFØˆr9   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r,   r;   )r
   )r4   r5   s   "€r6   r7   r8   G   s   ø‡ ‚ ÙÑò r9   )r@   rA   r[   r/   r-   r   rp   rH   r;   rq   rX   rF   )TTNFF©NF)r?   Ú
__module__Ú__qualname__Ú__firstlineno__rC   rK   r\   rc   rw   r„   rˆ   r�   r•   r¢   rž   r    Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r5   s   @r6   r(   r(   G   sˆ   ø‡ € ÷8ò 8÷*-ò -÷ð ÷8Kð K÷%ð %÷2:8ð :8÷x0ð 0÷,ð ÷ð ÷&9ð 9÷>ð >÷ð ÷i ƒ r9   c                   óì   a € ] tR tRt o RtRV 3R lR lltRV 3R lR lltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R ltRtV tR# )r)   i$  aS  
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.
c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[ RR/# )r,   r   r-   Úallow_partial_loadr1   Nr2   )r4   r5   s   "€r6   r7   ÚDefaultLoadPlanner.__annotate__2  s3   ø€ ÷ 
5ñ 
5á ð
5ñ "&ð
5ñ !ð	
5ð
 
ñ
5r9   c                óF   € Wn         W n        / V n        / V n        W0n        R # rJ   )r   r-   Úoriginal_state_dictr;   r¾   )rB   r   r-   r¾   s   &&&&r6   rC   ÚDefaultLoadPlanner.__init__2  s%   € ð #5ÔØ'>Ô$Ø#%ˆÔ ØˆŒØ"4Ör9   Nc                ó>   <€ V ^8„  d   QhRS[ RS[R,          RS[RR/# ©r,   rF   rq   NrH   r1   ©r   r   r3   )r4   r5   s   "€r6   r7   r¿   >  s7   ø€ ÷ -ñ -á#ð-ñ ˜T•/ð-ñ ð	-ð
 
ñ-r9   c                óÎ   € \        V4       Wn        V P                  '       d   \        V4      pV P                  '       d   \	        V4      w  qn        Wn        W n        W0n        R # rJ   )	r"   rÁ   r-   r   r   r;   rF   rq   rH   )rB   rF   rq   rH   s   &&&&r6   rK   Ú!DefaultLoadPlanner.set_up_planner>  sS   € ô 	˜Ô$Ø#-Ô à×'×'Ð'Ü1°*Ó=ˆJà×"×"Ð"Ü(:¸:Ó(FÑ%ˆJœà$ŒØ ŒØ,Ör9   c                ó    <€ V ^8„  d   QhRS[ /# rN   ©r   )r4   r5   s   "€r6   r7   r¿   Q  s   ø€ ÷ &
ñ &
¡8ñ &
r9   c                ó<  € V P                   f   \        R4      hV P                  '       dÃ   \        V P                  P                  4       4      p\        V P                   P                  P                  4       4      pW!,
          pV'       dc   R\        n        \        V P                  4      w  rE\        VP                  4       4      pWc,          '       d   WEuV n        V n
        R \        n        \        V P                  V P                   V P                  '       * 4      # )Nzself.metadata is not NoneÚ2_3)rq   ÚAssertionErrorr   ÚsetrF   ÚkeysÚstate_dict_metadatar'   Ú_derived_versionrÁ   r;   Úcreate_default_local_load_planr¾   )rB   Úcurrent_keysÚ	load_keysÚmissing_keysÚold_state_dictÚold_mappingsÚold_keyss   &      r6   r\   Ú$DefaultLoadPlanner.create_local_planQ  sÞ   € Ø�=‰=Ò Ü Ð!<Ó=Ð=Ø×"×"Ð"ô$ ˜tŸ™×3Ñ3Ó5Ó6ˆLÜ˜DŸM™M×=Ñ=×BÑBÓDÓEˆIØ$Õ3ˆLßØ,1”Ô)Ü/AØ×,Ñ,ó0Ñ,�ô ˜~×2Ñ2Ó4Ó5�Ø×*Ô*Ø5CÐ2�D”O T¤]ð -1”Ô)ä-Ø�O‰O˜TŸ]™]°×0GÑ0GÔ,Gó
ð 	
r9   c                óF   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          /# )r,   rp   r1   ©ra   r   )r4   r5   s   "€r6   r7   r¿   y  s#   ø€ ÷ <ñ <©d±8­nð <ÁÁhÅñ <r9   c                ó   € \        V4      # rJ   )Úcreate_default_global_load_plan)rB   rp   s   &&r6   rˆ   Ú%DefaultLoadPlanner.create_global_plany  s   € Ü.¨{Ó;Ð;r9   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r‹   rÉ   )r4   r5   s   "€r6   r7   r¿   |  s   ø€ ÷ ñ ¡Hð ±ñ r9   c                ó   € V# rJ   © )rB   rƒ   s   &&r6   r•   ÚDefaultLoadPlanner.finish_plan|  s   € Øˆr9   c                ó>   <€ V ^8„  d   QhRS[ RS[P                  RR/# )r,   Ú	read_itemÚvaluer1   N)r   r›   rœ   )r4   r5   s   "€r6   r7   r¿     s&   ø€ ÷ 
ñ 
¡Hð 
±R·Z±Zð 
ÀDñ 
r9   c           	     óD  € V P                   '       dU   \        V P                  V P                  VP                  P
                  ,          \        P                  ! VR R7      4       R# \        P                  ! VR R7      V P                  VP                  P
                  &   R# )F)Úweights_onlyN)	r   r   rÁ   r;   Ú
dest_indexÚfqnr™   ÚloadrF   )rB   rã   rä   s   &&&r6   Ú
load_bytesÚDefaultLoadPlanner.load_bytes  so   € Ø×"×"Ð"ÜØ×(Ñ(Ø—‘˜i×2Ñ2×6Ñ6Õ7Ü—
’
˜5¨uÔ5öô 9>¿
º
Ø Eô9ˆD�O‰O˜I×0Ñ0×4Ñ4Ó5r9   c                ó    <€ V ^8„  d   QhRS[ /# )r,   rã   )r   )r4   r5   s   "€r6   r7   r¿   ‹  s   ø€ ÷ 8ñ 8©ñ 8r9   c                óZ   € V P                  VP                  4      pV P                  W4      # rJ   )Úlookup_tensorrç   Útransform_tensor©rB   rã   Útensors   && r6   Úresolve_tensorÚ!DefaultLoadPlanner.resolve_tensor‹  s)   € Ø×#Ñ# I×$8Ñ$8Ó9ˆØ×$Ñ$ YÓ7Ð7r9   c                ó>   <€ V ^8„  d   QhRS[ RS[P                  RR/# )r,   rã   rñ   r1   N©r   r™   rš   )r4   r5   s   "€r6   r7   r¿   �  s&   ø€ ÷ ñ ¡xð ¹¿¹ð È$ñ r9   c                ó   € R # rJ   rà   rð   s   &&&r6   Úcommit_tensorÚ DefaultLoadPlanner.commit_tensor�  s   € Ùr9   c                ó:   <€ V ^8„  d   QhRS[ RS[P                  /# r¥   )r   r™   rš   )r4   r5   s   "€r6   r7   r¿   ’  s   ø€ ÷ >ñ >¡=ð >±U·\±\ñ >r9   c                ó.   € \        V P                  V4      # r§   r¨   r©   s   &&r6   rî   Ú DefaultLoadPlanner.lookup_tensor’  r«   r9   c                ó:   <€ V ^8„  d   QhRS[ RS[P                  /# )r,   rã   rñ   rõ   )r4   r5   s   "€r6   r7   r¿   –  s#   ø€ ÷ Yñ Y©(ð Y¹E¿L¹Lñ Yr9   c                óB   € \        W!P                  VP                  4      # r§   )r   Údest_offsetsÚlengthsrð   s   &&&r6   rï   Ú#DefaultLoadPlanner.transform_tensor–  s   € ä% f×.DÑ.DÀi×FWÑFWÓXÐXr9   c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )r,   rÁ   r;   )r   r
   )r4   r5   s   "€r6   r7   r¿   $  s   ø‡ ‚ ñ )Ñ(ñ ñ Ñò r9   )r¾   r-   r   rH   r;   rq   rÁ   rF   )TTFr´   )r?   rµ   r¶   r·   Ú__doc__rC   rK   r\   rˆ   r•   rê   rò   r÷   rî   rï   r¸   r¹   rº   r»   s   @r6   r)   r)   $  sy   ø‡ € ñ÷
5ò 
5÷-ò -÷&&
ð &
÷P<ð <÷ð ÷
ð 
÷8ð 8÷ð ÷>ð >÷Yð Y÷e ƒ r9   c                   óh   a a€ ] tR tRt oRtR	V 3R lltV3R lR ltR
V3R lV 3R llltRtVt	V ;t
# )Ú_EmptyStateDictLoadPlanneri›  aÍ  
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.

c                ó4   <€ Wn         \        SV `  ! V/ VB  R # rJ   )rÎ   ÚsuperrC   )rB   rÎ   ÚargsÚkwargsr>   s   &&*,€r6   rC   Ú#_EmptyStateDictLoadPlanner.__init__©  s   ø€ ØŒ	Ü‰Ò˜$Ð) &Ô)r9   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r,   Úkeyrq   r1   )Ústrr   r3   )r4   r5   s   "€r6   r7   Ú'_EmptyStateDictLoadPlanner.__annotate__­  s"   ø€ ÷ ñ ¡sð ±hð Á4ñ r9   c           	     ó¸  a € S P                   f   R# VS P                   9   d   R# . pVP                  P                  V4      pV FP  pV'       d5   VP                  RP	                  VR,          \        V4      .4      4       K?  VP                  V4       KR  	  \        ;QJ d    V 3R lV 4       F  '       g   K   RM	  RM! V 3R lV 4       4      '       d   R# R# )NTÚ.c              3   ó@   <"  € T F  qSP                   9   x € K  	  R # 5irJ   ©rÎ   )Ú.0Úunflattened_keyrB   s   & €r6   Ú	<genexpr>ÚA_EmptyStateDictLoadPlanner._should_include_key.<locals>.<genexpr>¿  s   øé € ÐTÑCS° $§)¡)Ö+ÓCSùs   ƒFéÿÿÿÿ)rÎ   rR   Úgetr   rl   r  Úany)rB   r  rq   Úunflattened_keysrR   r  s   f&&   r6   Ú_should_include_keyÚ._EmptyStateDictLoadPlanner._should_include_key­  s­   ø€ Ø�9‰9ÒÙà�$—)‘)ÔÙà&(ÐØ×,Ñ,×0Ñ0°Ó5ˆÛ+ˆOßØ ×'Ñ'Ø—H‘HÐ.¨rÕ2´C¸Ó4HÐIÓJöð
 !×'Ñ'¨Ö8ñ  ,÷ ‹3ÔTÑCSÓT�3�3Š3ÔTÑCSÓT×TÒTÙár9   c                ó>   <€ V ^8„  d   QhRS[ RS[R,          RS[RR/# rÄ   rÅ   )r4   r5   s   "€r6   r7   r  Ä  s=   ø€ ÷ Eñ Eá#ðEñ ˜T•/ðEñ ð	Eð
 
ñEr9   c                óþ  <€ V'       d   \        R 4      hVf   \        R4      hVP                  P                  4        F«  w  rEV P                  WB4      '       g   K  \	        V\
        4      '       d7   \        P                  ! VP                  VP                  P                  R7      pVP                  e0   WBP                  9   d    \        WP                  V,          V4       K§  WQV&   K­  	  \        SV `9  WV4       R# )znot state_dictNzmetadata is not None)Údtype)rÌ   rÏ   Úitemsr  Ú
isinstancer   r™   ÚemptyÚsizeÚ
propertiesr  rR   r   r  rK   )rB   rF   rq   rH   ÚkÚvr>   s   &&&&  €r6   rK   Ú)_EmptyStateDictLoadPlanner.set_up_plannerÄ  sÇ   ø€ ÷ Ü Ð!1Ó2Ð2ØÒÜ Ð!7Ó8Ð8ð ×0Ñ0×6Ñ6Ö8‰DˆAØ×+Ñ+¨A×8Ò8Ùä˜!Ô2×3Ò3Ü—K’K §¡¨a¯l©l×.@Ñ.@ÔA�Ø×$Ñ$Ò0°Q×:OÑ:OÔ5OÜ˜J×(=Ñ(=¸aÕ(@À!ÖDà !˜1“ñ 9ô 	‰Ñ˜z°^ÖDr9   r  rJ   r´   )r?   rµ   r¶   r·   r  rC   r  rK   r¹   rº   Ú__classcell__)r>   r5   s   @@r6   r  r  ›  s+   ù‡ € ñ÷*÷ð ÷.E÷ Eõ Er9   r  c                ój   € V ^8„  d   QhR\         \        \        3,          R\        R\        R\
        /# )r,   rF   rq   Ústrictr1   )rj   r  r   r   r3   r   )r4   s   "r6   r7   r7   Þ  s4   € ÷ ,ñ ,Ü”Sœ#�X•ð,Ü*2ð,Ü<@ð,äñ,r9   c           	      ó²  € . p V P                  4        EF5  w  rEWAP                  9  d   V'       d   \        R V R24      hK/  VP                  V,          p\        V\        4      '       d€   \        VRR4      eq   \        V4      '       d!   \        P                  ! VP                  4      MVP                  4       pVP                  V8w  d   \        RVP                   RV RV 24      h\        V\        4      '       d6   VP                  P                  4       e   V\        WFV4      ,          pEK  EK"  V\        WFV4      ,          pEK8  	  \!        V4      # )z&Missing key in checkpoint state_dict: r  r"  NzSize mismatch between saved z and current: z for )r  rÏ   ÚRuntimeErrorr   r   Úgetattrr$   r™   ÚSizeÚglobal_shaper"  rn   r&   Údevice_meshÚget_coordinater    r   )rF   rq   r)  Úrequestsrè   ÚobjÚmdÚobj_sizes   &&&     r6   rÑ   rÑ   Þ  s;  € ð €Hðð ×$Ñ$×&‰ˆà×2Ñ2Ô2ßÜ"Ð%KÈCÈ5ÐPQÐ#RÓSÐSáà×)Ñ)¨#Õ.ˆä�rÔ0×1Ò1Ü˜˜V TÓ*Ò6ô -¨S×1Ò1ô —
’
˜3×+Ñ+Ô,à—X‘X“Zð ð
 �w‰w˜(Ô"Ü Ø2°2·7±7°)¸>È(ÈÐSXÐY\ÐX]Ð^óð ô
 �cœ7×#Ò#Ø�‰×-Ñ-Ó/Ò;ØÔ.¨s¸Ó<Õ<“ò <ð Ô*¨3°CÓ8Õ8‹Hñ9 'ô< �HÓÐr9   c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# r_   rÚ   )r4   s   "r6   r7   r7     s$   € ÷ 	ñ 	Ü”H�~ð	ä	Œ(…^ñ	r9   c                ó   € V # )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.
rà   )r`   s   &r6   rÜ   rÜ     s
   € ð Ðr9   c                ó^   € V ^8„  d   QhR\         \        \        3,          R\        R\        /# )r,   rF   rH   r1   )rj   r  r   r3   r   )r4   s   "r6   r7   r7     s,   € ÷ ñ Ü”Sœ#�X•ðÜ04ðäñr9   c                ó  € . pV P                  4        F_  w  r4\        V\        4      '       d3   VP                  P	                  4       e   V\        W44      ,          pKK  KM  V\        W44      ,          pKa  	  \        V4      # )zð
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/  r0  r!   r   )rF   rH   r1  rè   r2  s   &&   r6   rU   rU     st   € ð €HØ×$Ñ$Ö&‰ˆô �cœ7×#Ò#Ø�‰×-Ñ-Ó/Ò;ØÔ/°Ó9Õ9’ñ <ð Ô+¨CÓ5Õ5ŠHñ 'ô �HÓÐr9   c                óŠ   € V ^8„  d   QhR\         \        ,          R\        R\        \         \        ,          \        3,          /# )r,   r`   Úrewrite_index_hintsr1   )ra   r   r3   rg   r   )r4   s   "r6   r7   r7   4  s8   € ÷ 5%ñ 5%Ü”H�~ð5%äð5%ô Œ4”�>œ8Ð#Õ$ñ5%r9   c                ó†  € / p. pV  EF*  p. pVP                    EFí  pVP                  \        P                  8w  d'   VP                  P
                  V9   d   \        R4      hVP                  \        P                  8X  d4   \        4       W&P                  P
                  &   VP                  V4       K›  VP                  f   \        R4      h\        \        VP                  VP                  P
                  \        VP                  P                  VP                  P                  . R7      4      4      pTpV'       dM   \         P"                  ! VP                  \%        VP&                  4      R7      p	\         P"                  ! WiR7      pVP                  V4       VP                  P(                  f$   \        RVP                  P
                   R24      hVP&                  P                  VP                  P(                  4       EKð  	  VP                  \         P"                  ! WER7      4       EK-  	  V\+        V4      3# )a"  
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.
zitem.index.fqn not in mdzitem.tensor_data is not None)r#  r"  Úchunks)rŸ   zZ
                    Cannot create MD for tensor without bounds.
                    FQN: z
                )r  )r  r®   r   ÚSHARDrŸ   rè   rÌ   r¯   r   r   Útensor_datar   r   Ú
setdefaultr#  r"  rV   rW   rm   r<  Úchunkr   )
r`   r:  r3  Ú	new_plansrX   Ú	new_itemsÚitemÚ	tensor_mdÚnew_itemÚ	new_indexs
   &&        r6   ri   ri   4  sÍ  € ð $&€BØ€IÜˆØˆ	Ø—J•JˆDØ�y‰yœM×/Ñ/Ô/Ø—:‘:—>‘> RÔ'Ü(Ð)CÓDÐDà�y‰yœM×1Ñ1Ô1Ü%9Ó%;�—:‘:—>‘>Ñ"Ø× Ñ  Ö&à×#Ñ#Ò+Ü(Ð)GÓHÐHÜ Ü)Ø—M‘MØŸ
™
Ÿ™Ü-Ø'+×'7Ñ'7×'BÑ'BØ!%×!1Ñ!1×!6Ñ!6Ø#%ôóó
�	ð  �ß&Ü +× 3Ò 3ØŸ
™
¬#¨i×.>Ñ.>Ó*?ô!�Iô  +×2Ò2°4ÔI�HØ× Ñ  Ô*à×#Ñ#×)Ñ)Ò1Ü(ð .àŸ*™*Ÿ.™.Ð)ð *ð*ó ð ð × Ñ ×'Ñ'¨×(8Ñ(8×(>Ñ(>×?ñG ðH 	×Ñœ×,Ò,¨TÔC×DñM ðN ”x “|Ð$Ð$r9   c                ó0   € V ^8„  d   QhR\         R\        /# )r,   rF   r1   )r   r   )r4   s   "r6   r7   r7   l  s   € ÷ ñ ¬ð Ä8ñ r9   c                ó8   € \        V 4      p\        V.4      w  r#V# )zTReturn the ``Metadata`` if DefaultSavePlanner was used to checkpoint ``state_dict``.)r   ri   )rF   rX   Ú_r3  s   &   r6   Ú_create_default_local_metadatarJ  l  s   € ä-¨jÓ9€DÜ+¨T¨FÓ3�E€AØ€Ir9   c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r,   Úbox0Úbox1r1   )r   r3   )r4   s   "r6   r7   r7   s  s$   € ÷ ñ Ô1ð Ô9Mð ÔRVñ r9   c                ód  € \        V P                  4      p\        V4       F‹  pV P                  V,          VP                  V,          VP                  V,          ,           8¼  d    R# VP                  V,          V P                  V,          V P                  V,          ,           8¼  g   KŠ   R# 	  R# )z9Check if two boxes overlap. Tuples are (offset, lengths).FT)rm   ÚoffsetsÚrangeÚsizes)rL  rM  ÚndimsÚis   &&  r6   Ú_check_box_overlaprT  s  su   € ô �—‘Ó€EÜ�5Ž\ˆØ�<‰<˜�?˜dŸl™l¨1�o°·
±
¸1µÕ=Ô=ÚØ�<‰<˜�?˜dŸl™l¨1�o°·
±
¸1µÕ=Ö=Úñ	 ñ r9   c                óP   € V ^8„  d   QhR\         P                  R\        R\        /# )r,   Úouter_box_sizeÚ	inner_boxr1   )r™   r-  r   r3   )r4   s   "r6   r7   r7   ƒ  s(   € ÷ ñ Ü—J‘JðÜ+?ðä	ñr9   c                 ó  € \        \        V 4      4       Fr  pVP                  V,          ^ 8  d    R# VP                  V,          ^ 8  d    R# VP                  V,          VP                  V,          ,           W,          8”  g   Kq   R# 	  R# )r   FT)rP  rm   rO  rQ  )rV  rW  rS  s   && r6   Ú_check_box_boundsrY  ƒ  sn   € ô ”3�~Ó&Ö'ˆØ×Ñ˜QÕ !Ô#ÚØ�?‰?˜1Õ Ô!ÚØ×Ñ˜QÕ )§/¡/°!Õ"4Õ4°~Õ7HÖHÚñ (ñ r9   c                óh   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          /# )r,   rp   rq   r1   )ra   r   r   r  )r4   s   "r6   r7   r7   ‘  s*   € ÷ <ñ <¤t¬H¥~ð <Äð <ÌdÔSVÍiñ <r9   c           	     ó4  aaaa€ . pVP                   P                  4        EFr  w  po\        S\        4      '       d   K  \	        SP
                  4      ^ 8X  d   K;  SP                  o^ pS F�  p\        SP
                  V4      '       g<   RV RSP
                   RV 2p\        P                  V4       VP                  V4       V\        P                  ! VP                  4      ,          pKƒ  	  \	        S4      ^8”  Ed$   \	        SP
                  4      o\        \        S4      ^ V3R lR7      o\!        \        \	        S4      4      VVV3R lR7      p. pV FÆ  p	SV	,          p
V
P"                  S,          pWºP                  S,          ,           p\%        W‹\&        P(                  34      pV'       d   VRV1 V FS  w  rïSV,          p\+        V
V4      '       g   K"  RV R	V
 R
V 2p\        P                  V4       VP                  V4       KU  	  \-        WŒV	34       KÈ  	  \        P                  ! SP
                  4      p\	        V 4      ^8”  g   EK7  VV8w  g   EKA  RV RV RV 2p\        P                  V4       VP                  V4       EKu  	  V# )zNValidate the global plan and return a list of error messages (empty if valid).zkey:z& has out of bounds chunk: tensor-size:z chunk: c                 ó*   <€ SP                   V ,          # rJ   )r"  )Údrä   s   &€r6   Ú<lambda>Ú'_validate_global_plan.<locals>.<lambda>¨  s   ø€ À%Ç*Á*ÈQÆ-r9   )Údefaultr  c                 ój   <a € SS ,          P                   S,          .VV 3R  l\        S4       4       O5# )c              3   óX   <"  € T F  pSS,          P                   V,          x € K!  	  R # 5irJ   )rO  )r  r]  r<  Úidxs   & €€r6   r  Ú:_validate_global_plan.<locals>.<lambda>.<locals>.<genexpr>­  s#   øé € ÐB±k°�f˜S•k×)Ñ)¨!×,Ò,³kùs   ƒ'*)rO  rP  )rc  r<  ÚdimsÚ	sweep_dims   f€€€r6   r^  r_  «  s+   ù€ Ø˜3•K×'Ñ'¨	Õ2ð!åB´e¸D´kÓBò!r9   )r  Nz has overlapping chunks: Ú z invalid fill tensor-volume: z chunks-volume: )rÏ   r  r   r   rm   r"  r<  rY  r<   r=   r   ÚmathÚprodrQ  ÚmaxrP  ÚsortedrO  r   ÚsysÚmaxsizerT  r   )rp   rq   Úerrorsr  Úchunks_volumer@  ÚmsgÚsorted_indicesÚactiverc  ÚcurrentÚstartÚendÚcutoffrI  Ú	other_idxÚotherÚtensor_volumer<  re  rf  rä   s   &&                @@@@r6   rk   rk   ‘  s8  û€ à€FØ×2Ñ2×8Ñ8×:‰
ˆˆUÜ�eÔ1×2Ò2ÙÜˆu�z‰z‹?˜aÔÙØ—‘ˆØˆÛˆEä$ U§Z¡Z°×7Ò7à˜3˜%ð  #Ø#(§:¡: ,¨h°u°gð?ð ô —‘˜sÔ#Ø—‘˜cÔ"ØœTŸYšY u§{¡{Ó3Õ3ŠMñ ô ˆv‹;˜�?Ü�u—z‘z“?ˆDÜœE $›K°Ô8OÔPˆIÜ#Ü”c˜&“kÓ"öôˆNð -/ˆFÛ%�Ø  �+�ØŸ™¨	Õ2�ØŸm™m¨IÕ6Õ6�ä% f´c·k±kÐ.BÓC�ßØ˜w ˜w˜ã$*‘L�AØ" 9Õ-�EÜ)¨'°5×9Ô9Ø $ S EÐ)BÀ7À)È1ÈUÈGÐT˜ÜŸ™ sÔ+ØŸ™ cÖ*ñ %+ô �v S˜zÖ*ñ! &ô& Ÿ	š	 %§*¡*Ó-ˆÜˆ{Ó˜a× M°]×$Bà�s�eÐ8Ø �/Ð!1°-°ðBð ô �N‰N˜3ÔØ�M‰M˜#×ño ;ðr €Mr9   c                óT   € V ^8„  d   Qh/ ^ \         9   d   \        P                  ;R&   # )r,   r<   )Ú__conditional_annotations__ÚloggingÚLogger)r4   s   "r6   r7   r7      s    € × Ñ ÷j 5Ò 4Œ�‰Ñ 4òk r9   )r(   r)   rÑ   rÜ   rU   ri   )T)Kr{  rV   r›   r|  rh  rl  Úbisectr   r   Úcollectionsr   Útypingr   r   r™   Ú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    r!   r"   r#   Ú%torch.distributed.checkpoint.protocolr$   Ú"torch.distributed.checkpoint.utilsr%   Útorch.distributed.tensorr&   Ú r'   Ú	getLoggerr?   r<   Ú__all__r(   r)   r  rÑ   rÜ   rU   ri   rJ  rT  rY  rk   r7   )r{  s   @r6   Ú<module>r�     sî   øð÷ Ð Û 	Û Û Û 
ß 'Ý  ß ã Ý BÝ K÷õ XÝ >÷	÷ 	ó 	÷÷ ñ ÷÷ ñ õ LÝ EÝ ,å ð !×*Ò*¨8Ó4€Ó 4ò€ôZ˜ô ZôztY˜ô tYôn@EÐ!3ô @E÷F,õ^	õ÷65%õpõõ ÷<r9   