
    [Th`              	          % S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
JrJrJr  S SKrS SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJrJrJrJrJrJ r J!r!J"r"  S SK#J$r$J%r%J&r&J'r'J(r(J)r)J*r*  S SK+J,r,J-r-J.r.J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5  SSK6J7r7  \Rp                  " \95      r:\Rv                  \<S'   / SQr= " S S\(5      r> " S S\%5      r? " S S\?5      r@ S-S\A\B\
4   S\S\CS\$4S jjrDS\E\$   S\E\$   4S jrFS\A\B\
4   S \CS\'4S! jrG S-S\E\'   S"\CS\H\E\'   \4   4S# jjrIS\S\4S$ jrJS%\S&\S\C4S' jrKS(\R                  S)\S\C4S* jrMS+\E\'   S\S\C4S, jrNg).    N)ChainMap)reduce)AnycastOptional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)_compare_save_plans"_create_default_metadata_only_plan_create_read_items_create_write_items_init_state_dict_merge_delta_local_plans)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                      \ rS rSr% \\S'        SS\S\S\\   S\S\S	S4S
 jjr  SS\	S\\
   S\S	S4S jjrS	\4S jrS\\   S	\\\   \4   4S jrS\\   S	\\\   \\   \4   4S jrS\\   S	\\\   \4   4S jrS\S	\4S jrS\S	\4S jrS\S	\\R2                  \R6                  4   4S jrS\S	\4S jrS\S\4S jr Sr!g) r)   E   mappingsNr   flatten_sharded_tensorsdedup_replicated_tensorsdedup_save_to_lowest_rankenable_plan_cachingreturnc                     Xl         X l        0 U l        X@l        Ub  [        R                  S5        U R                  R                  U l        XPl	        g )NzDefaultSavePlanner'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	__class____name___cached_plans_key_enable_plan_caching)selfr   r2   r3   r4   r5   s         d/var/www/auris/envauris/lib/python3.13/site-packages/torch/distributed/checkpoint/default_planner.py__init__DefaultSavePlanner.__init__H   sN     #5'>$)B&#/NN"
 '+nn&=&=$7!    
state_dictstorage_metais_coordinatorc                     U R                   (       a  [        U5      u  ol        U R                  (       a  [        U5      nXl        X0l        g N)r   r1   r2   r   rB   rD   )r=   rB   rC   rD   s       r>   set_up_planner!DefaultSavePlanner.set_up_planner]   s:     ""(::(F%J''1*=J$,rA   c                    [        U R                  U R                  5      nU R                  (       a  [        R
                  " XR                  S9nXl        U R                  (       a  U R                  [        R                  ;   aK  [        U[        R                  U R                     5      (       a  [        R                  S5        [        / SS9$ U[        R                  U R                  '   U R                  $ )Nplanner_datazINo change in the local plan. Skipping sending the plan to the coordinatorFusable)r-   rB   rD   r   dataclassesreplacer1   planr<   r;   r   _cached_save_planr   r(   infor   )r=   rP   s     r>   create_local_plan$DefaultSavePlanner.create_local_planj   s    -doot?R?RS""&&t--HD	$$ &&+*G*GG'+778N8NO  _  511HL--d.D.DEyyrA   	all_plansc                 .   [        XR                  5      n[        U5      u  p#U R                  (       a@  U Vs/ s H  oDR                  PM     nn[        [        U6 5      n[        R                  " X6S9n[        X#5      (       d  [        S5      eX#4$ s  snf )NrJ   zFailed to validate global plan)r
   r4   r.   r   rK   dictr   rN   rO   _validate_global_plan
ValueError)r=   rU   global_planmetadatapplanner_data_dictmerged_mappingss          r>   _create_global_plan&DefaultSavePlanner._create_global_plan   s     %Y0N0NO	 ?	 J""
 :E EA E"8->#?@O"**8RH$[;;=>>$$ !Fs   Bc                 0   / nU R                   [        R                  ;  ae  [        R                  " U5      [        R                  U R                   '   U R                  U5      u  p4U[        R                  U R                   '   X3U4$ [        [        R                  U R                      U5      n[        R                  " U5      [        R                  U R                   '   U R                  U5      u  p4U R                   U R                  ;   al  [        [        R                  U R                      U5       HA  u  pg[        Xg5      (       a  UR                  [        / SS95        M0  UR                  U5        MC     U[        R                  U R                   '   X#U4$ )z_
Create global plan with caching.
Returns a tuple of global_plan_delta, global_plan, metadata.
FrL   )r;   r   _cached_all_planscopydeepcopyr_   _cached_global_planr#   zipr   appendr   )r=   rU   global_plan_deltarZ   r[   merged_planscached_plannew_plans           r>    _create_global_plan_with_caching3DefaultSavePlanner._create_global_plan_with_caching   sh    -/!!)F)FFDHMMEK))$*@*@A %)$<$<Y$G!KFQK++D,B,BCX55 0))$*@*@A9
 AEA
%%d&<&<= !% 8 8 F!!T%=%==),//0F0FG*% '{==%,,Xb-GH%,,X6* CN''(>(>? !x77rA   c                     / nU R                   (       a  U R                  U5      u  nnnOU R                  U5      u  p4UnX0l        X@l        X R                  4$ rF   )r<   rl   r_   rZ   r[   )r=   rU   rh   rZ   r[   s        r>   create_global_plan%DefaultSavePlanner.create_global_plan   sd     -/$$ 55i@	! %)$<$<Y$G!K +&  --//rA   rk   c                     UnUR                   (       d  [        R                  U R                     nU$ UnU[        R                  U R                  '   U$ rF   )rM   r   _cached_final_save_planr;   r=   rk   finished_plans      r>   _finish_plan_with_caching,DefaultSavePlanner._finish_plan_with_caching   sO    "*'??@V@VWM  %MJRK//0F0FGrA   c                 n    UnU R                   (       a  U R                  U5      nX l        U R                  $ rF   )r<   ru   rP   rs   s      r>   finish_planDefaultSavePlanner.finish_plan   s/    "*$$ ::8DM!	yyrA   
write_itemc                 Z    U R                  UR                  5      nU R                  X5      $ rF   )lookup_objectindextransform_object)r=   rz   objects      r>   resolve_dataDefaultSavePlanner.resolve_data   s)    ##J$4$45$$Z88rA   r}   c                 .    [        U R                  U5      $ zSExtension from the planner interface to make it easy to extend the default planner.r$   rB   r=   r}   s     r>   r|    DefaultSavePlanner.lookup_object       %doou==rA   r   c                     UR                   [        R                  :X  a-  [        R                  " 5       n[
        R                  " X#5        UnU$ r   )typer   BYTE_IOioBytesIOtorchsave)r=   rz   r   bytess       r>   r~   #DefaultSavePlanner.transform_object   s5    ??m333JJLEJJv%FrA   )r;   r<   r4   r2   r   rZ   rD   r1   r[   rP   rB   )TTNFFNF)"r:   
__module____qualname____firstlineno__r   __annotations__boolr   r?   r   r   rG   r   rS   listtupler   r_   rl   ro   ru   rx   r   r   r   Tensorr   r   r   r   r   r|   r~   __static_attributes__ rA   r>   r)   r)   E   s    $((,37*/$)8 8 "&8 #+4.	8
 $(8 "8 
80 /3$	-#- {+- 	-
 
-8 .%h%	tH~x'	(%*,8h,8	tH~tH~x7	8,8\0h0	tH~x'	(0,( x H  9y 9U5<<;S5T 9>= >S >9 c rA   r)   c            	       f   \ rS rSr% Sr\\S'   \\S'      SS\S\S\SS	4S
 jjr	  SS\S\
\   S\SS	4S jjrS\4S jrS\\   S\\   4S jrS\S\4S jrS\S\R(                  SS	4S jrS\4S jrS\S\R0                  SS	4S jrS\S\R0                  4S jrS\S\R0                  4S jrSrg	) r*      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.
original_state_dictr1   r   r2   allow_partial_loadr6   Nc                 D    Xl         X l        0 U l        0 U l        X0l        g rF   )r   r2   r   r1   r   )r=   r   r2   r   s       r>   r?   DefaultLoadPlanner.__init__  s%     #5'>$#% "4rA   rB   r[   rD   c                     [        U5        Xl        U R                  (       a  [        U5      nU R                  (       a  [	        U5      u  ol        Xl        X l        X0l        g rF   )	r"   r   r2   r   r   r1   rB   r[   rD   )r=   rB   r[   rD   s       r>   rG   !DefaultLoadPlanner.set_up_planner  sM     	$#- ''1*=J""(::(F%J$ ,rA   c                    U R                   c   eU R                  (       a  [        U R                  R	                  5       5      n[        U R                   R
                  R	                  5       5      nX!-
  nU(       a]  S[        l        [        U R                  5      u  pE[        UR	                  5       5      nXc-  (       a  XEsU l        U l	        S [        l        [        U R                  U R                   U R                  (       + 5      $ )N2_3)r[   r   setrB   keysstate_dict_metadatar'   _derived_versionr   r1   r+   r   )r=   current_keys	load_keysmissing_keysold_state_dictold_mappingsold_keyss          r>   rS   $DefaultLoadPlanner.create_local_plan+  s    }}(((""$ t3356LDMM==BBDEI$3L,1)/A,,0, ~2245*5C2DOT] -1)-OOT]]0G0G,G
 	
rA   rZ   c                     [        U5      $ rF   )r,   )r=   rZ   s     r>   ro   %DefaultLoadPlanner.create_global_planR  s    .{;;rA   rk   c                     U$ rF   r   )r=   rk   s     r>   rx   DefaultLoadPlanner.finish_planU  s    rA   	read_itemvaluec           	      *   U R                   (       aL  [        U R                  U R                  UR                  R
                     [        R                  " USS95        g [        R                  " USS9U R                  UR                  R
                  '   g )NF)weights_only)	r   r   r   r1   
dest_indexfqnr   loadrB   )r=   r   r   s      r>   
load_bytesDefaultLoadPlanner.load_bytesX  sl    ""((i22667

5u5 9>

E9DOOI00445rA   c                 Z    U R                  UR                  5      nU R                  X5      $ rF   )lookup_tensorr   transform_tensorr=   r   tensors      r>   resolve_tensor!DefaultLoadPlanner.resolve_tensord  s)    ##I$8$89$$Y77rA   r   c                     g rF   r   r   s      r>   commit_tensor DefaultLoadPlanner.commit_tensorh  s    rA   r}   c                 .    [        U R                  U5      $ r   r   r   s     r>   r    DefaultLoadPlanner.lookup_tensork  r   rA   c                 B    [        X!R                  UR                  5      $ r   )r	   dest_offsetslengthsr   s      r>   r   #DefaultLoadPlanner.transform_tensoro  s    %f.D.DiFWFWXXrA   )r   r2   r   rD   r1   r[   r   rB   )TTFr   )r:   r   r   r   __doc__r   r   r   r   r?   r   r   rG   r   rS   r   ro   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   r>   r*   r*      s7    )( $((,#(	
5 
5 "&
5 !	
5
 

5 (,$	-#- 8$- 	-
 
-&%
8 %
N<d8n <h <H  
H 
RZZ 
D 
8 8x  $ >= >U\\ >Y( YELL YrA   r*   c            	       t   ^  \ rS rSrSrSU 4S jjrS\S\S\4S jr	  SS	\
S\\   S
\SS4U 4S jjjrSrU =r$ )_EmptyStateDictLoadPlannerit  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.

Nc                 2   > Xl         [        TU ]  " U0 UD6  g rF   )r   superr?   )r=   r   argskwargsr9   s       r>   r?   #_EmptyStateDictLoadPlanner.__init__  s    	$)&)rA   keyr[   r6   c           	      V  ^  T R                   c  gUT R                   ;   a   / nUR                  R                  U5      nU HK  nU(       a0  UR                  SR	                  US   [        U5      /5      5        M:  UR                  U5        MM     [        U 4S jU 5       5      (       a  gg)NT.c              3   @   >#    U  H  oTR                   ;   v   M     g 7frF   r   ).0unflattened_keyr=   s     r>   	<genexpr>A_EmptyStateDictLoadPlanner._should_include_key.<locals>.<genexpr>  s     TCS$))+CSs   F)r   rK   getrg   joinstrany)r=   r   r[   unflattened_keysrK   r   s   `     r>   _should_include_key._EmptyStateDictLoadPlanner._should_include_key  s    99$))&(,,005+O ''HH.r2C4HIJ
 !''8  , TCSTTTrA   rB   rD   c                   > U(       a   eUc   eUR                   R                  5        H  u  pEU R                  XB5      (       d  M  [        U[        5      (       a3  [
        R                  " UR                  UR                  R                  S9nXBR                  ;   a  [        XR                  U   U5        M  XQU'   M     [        TU ]5  XU5        g )N)dtype)r   itemsr   
isinstancer   r   emptysize
propertiesr   rK   r   r   rG   )r=   rB   r[   rD   kvr9   s         r>   rG   )_EmptyStateDictLoadPlanner.set_up_planner  s     ~### 00668DA++A88!233KKall.@.@A)))J(=(=a(@!D !1 9 	z^DrA   r   rF   r   )r:   r   r   r   r   r?   r   r   r   r   r   r   rG   r   __classcell__)r9   s   @r>   r   r   t  sj    *s h 4 4 (,$	E#E 8$E 	E
 
E ErA   r   rB   r[   strictr6   c           	      :   / n U R                  5        H  u  pEXAR                  ;  a  U(       a  [        SU S35      eM,  UR                  U   n[        U[        5      (       aX  [        USS 5      bJ  UR                  UR                  5       :w  a,  [        SUR                   SUR                  5        SU 35      e[        U[        5      (       a.  UR                  R                  5       b  U[        XFU5      -  nM  M  U[        XFU5      -  nM     [        U5      $ )Nz&Missing key in checkpoint state_dict: r   r   zSize mismatch between saved z and current: z for )r   r   RuntimeErrorr   r   getattrr   rY   r%   device_meshget_coordinater    r   )rB   r[   r   requestsr   objmds          r>   r+   r+     s    H $$&222"%KC5PQ#RSS))#.r011VT*6388:%.rwwi~chhj\QVWZV[\ 
 c7##--/;.s<< < *3C88H/ '2 HrA   rU   c                     U $ )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   )rU   s    r>   r,   r,     s
     rA   rD   c                     / nU R                  5        HU  u  p4[        U[        5      (       a-  UR                  R	                  5       b  U[        X45      -  nME  MG  U[        X45      -  nMW     [        U5      $ )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   r   r!   r   )rB   rD   r   r   r   s        r>   r-   r-     st     H$$& c7##--/;/99 < +C55H ' HrA   rewrite_index_hintsc                 6   0 n/ nU  GH  n/ nUR                    GH  nUR                  [        R                  :X  d  UR                  R
                  U;  d   eUR                  [        R                  :X  a3  [        5       X&R                  R
                  '   UR                  U5        M  UR                  c   e[        [        UR                  UR                  R
                  [        UR                  R                  UR                  R                  / S95      5      nUnU(       aF  [        R                   " UR                  [#        UR$                  5      S9n	[        R                   " XiS9nUR                  U5        UR                  R&                  c   SUR                  R
                   S35       eUR$                  R                  UR                  R&                  5        GM     UR                  [        R                   " XES95        GM     U[)        U5      4$ )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.
)r   r   chunks)r}   zZ
                    Cannot create MD for tensor without bounds.
                    FQN: z
                )r   )r   r   r   SHARDr}   r   r   r   rg   tensor_datar   r   
setdefaultr   r   rN   rO   lenr   chunkr   )
rU   r   r   	new_plansrP   	new_itemsitem	tensor_mdnew_item	new_indexs
             r>   r.   r.     s    $&BI	JJD99 3 33zz~~R///yyM111%9%;::>>"  &''333 )MM

-'+'7'7'B'B!%!1!1!6!6#%
	  & + 3 3

#i.>.>*?!I  +224IH  *''--9  @**..) *< 9   ''(8(8(>(>?A B 	,,TCDG H x|$$rA   c                 8    [        U 5      n[        U/5      u  p#U$ )zTReturn the ``Metadata`` if DefaultSavePlanner was used to checkpoint ``state_dict``.)r   r.   )rB   rP   _r   s       r>   _create_default_local_metadatar  ;  s    -j9D+TF3EAIrA   box0box1c                    [        U R                  5      n[        U5       Hg  nU R                  U   UR                  U   UR                  U   -   :  a    gUR                  U   U R                  U   U R                  U   -   :  d  Mg    g   g)z9Check if two boxes overlap. Tuples are (offset, lengths).FT)r  offsetsrangesizes)r  r  ndimsis       r>   _check_box_overlapr  B  su     E5\<<?dll1o

1==<<?dll1o

1==	  rA   outer_box_size	inner_boxc                     [        [        U 5      5       HT  nUR                  U   S:  a    gUR                  U   S:  a    gUR                  U   UR                  U   -   X   :  d  MT    g   g)Nr   FT)r  r  r  r  )r  r  r  s      r>   _check_box_boundsr  R  sn     3~&'Q!#??1!Q)//!"44~7HH ( rA   rZ   c           	         SnUR                   R                  5        GHJ  u  p4[        U[        5      (       a  M  [	        UR
                  5      S:X  a  M8  Sn[        UR                  5       H  u  pg[        UR
                  U5      (       d$  [        R                  SUUR
                  U5        SnU[        [        R                  UR                  S5      -  nUR                  US-   S   H.  n[        Xx5      (       d  M  [        R                  SX7U5        SnM0     M     [        [        R                  UR
                  S5      n	XY:w  d  GM0  [        R                  SUU	U5        SnGMM     U$ )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(   r8   r   operatormulr  r  )
rZ   r[   all_goodr   r   chunks_volume	chunk_idxchunk0chunk1tensor_volumes
             r>   rX   rX   `  s>   H2288:
e122uzz?a!*5<<!8I$UZZ88 JJ !VHLL&,,BBM  ,,y1}7%f55NN>V  %H 8! "90 x||UZZ;)NN  HS ;V OrA   )T)Orc   rN   r   loggingr  collectionsr   	functoolsr   typingr   r   r   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#   "torch.distributed.checkpoint.utilsr$   torch.distributed.tensorr%    r'   	getLoggerr:   r(   Loggerr   __all__r)   r*   r   rW   r   r   r+   r   r,   r-   r   r.   r  r  Sizer  rX   r   rA   r>   <module>r8     s     	      - -  B K X >	 	 	    F ,  !**84 4v vrsY sYl>E!3 >ED DH'S#X'*2'<@''T	H~		(^	S#X04: !%2%H~2%2% 4>8#$2%j 8 1 9M RV  JJ+?	-tH~ - -d -rA   