
    [Th              
          S SK JrJrJr  S SKJr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  \	\\4   r\\S4   r\" S5      r\r\\\4   r/ S	QrS
\S\4S jr\4S\S\\\/S4   S\\/\4   SS4S jjr\4S\S\\\/S4   S\\/\4   SS4S jjrS\S\S
\SS4S jr SS\S\S\\   S\\   4S jjr S\!4S
\S\S\\/S4   SS4S jjr"\!4S\S
\S\\/S4   SS4S jjr#g)    )
CollectionMappingMutableMapping)CallablecastOptionalTypeVarUnionN)ShardedTensor)STATE_DICT_TYPE)DTensor.T)traverse_state_dictset_elementget_elementprint_tensorvaluereturnc                 6    [        U [        R                  5      $ N)
isinstancetorchTensor)r   s    ^/var/www/auris/envauris/lib/python3.13/site-packages/torch/distributed/checkpoint/_traverse.py_keep_visiting_tensorsr      s    eU\\**    
state_dictvisitorkeep_traversingc                    ^^^^ S[         S[        4UU4S jjmS[        S[         SS4UUU4S jjmU R                  5        H  u  p4T" [	        U5      4U5        M     g)a  
Invoke ``visitor`` for each value recursively in ``state_dict``.
Mapping will be traversed and ``visitor`` will be applied to the leaf elements.
``visitor`` will only be applied to elements in a list or a tuple, if the
container contains tensors or mappings.
r   r   c                    > [        U [        5      (       a  g[        U [        5      (       a  U nOgU HA  n[        U[        [        45      (       a  T" U5      (       d    gTc  M2  T" U5      (       d  MA    g   g)NFT)r   r   listr   valuesentry_is_terminalr   s      r   r&   )traverse_state_dict.<locals>._is_terminal&   sh    eW%%t$$FE%'411,u:M:M*u/E/E	 
 r   pathNc                 4  > [        U[        5      (       a0  UR                  5        H  u  p#T" U [        U5      4-   U5        M     g T" U5      (       a	  T" X5        g [        U[        [
        45      (       a!  [        U5       H  u  pCT" X4-   U5        M     g g r   )r   r   itemsstrr"   tuple	enumerater(   r   kvir&   _traverse_objr   s        r   r2   *traverse_state_dict.<locals>._traverse_obj6   s    eW%%dc!fY.2 &%  D e}--!%(dTk1- ) .r   STATE_DICT_ITEMboolOBJ_PATHr*   r+   r   r   r   keyr   r&   r2   s    ``  @@r   r   r      sa    O    .H ._ . . . !&&(
s3xk5) )r   c                    ^^^^ S[         S[        4UU4S jjmS[        S[         SS4UUU4S jjmU R                  5        H  u  p4T" [	        U5      4U5        M     g)a$  
Traversal is short-circuited when if finds a collection for which ``keep_visiting_tensors`` evaluates
to false for all elements.
By default, all collections with at least one ``torch.Tensor`` element are traversed.
Visitor takes a path argument that is a tuple of the keys used to reach it.
r   r   c                   > [        U [        5      (       a  U R                  5       nO[        U [        5      (       a  U nOgU HA  n[        U[        [        45      (       a  T" U5      (       d    gTc  M2  T" U5      (       d  MA    g   g)NTF)r   r   r$   r"   r#   s      r   r&   /traverse_state_dict_v_2_3.<locals>._is_terminalQ   sp    eW%%\\^Ft$$FE%'411,u:M:M*u/E/E	 
 r   r(   Nc                 (  > T" U5      (       a	  T" X5        g [        U[        5      (       a0  UR                  5        H  u  p#T" U [        U5      4-   U5        M     g [        U[        5      (       a!  [        U5       H  u  pCT" X4-   U5        M     g g r   )r   r   r*   r+   r"   r-   r.   s        r   r2   0traverse_state_dict_v_2_3.<locals>._traverse_obja   s{    D w''dc!fY.2 &t$$!%(dTk1- ) %r   r4   r8   s    ``  @@r   traverse_state_dict_v_2_3r?   D   sa    O    .H ._ . . . !&&(
s3xk5) )r   	root_dictr(   c                    [        [        U 5      nS[        [           S[        SS4S jn[        S[        U5      5       H~  nXS-
     nX   n[        [        [        U5      [        :X  a  0 O/ 5      n[        U[        5      (       a!  [        [        UR                  Xh5      5      nMi  U" X65        X6   c  XU'   X6   nM     US   n[        U5      [        :X  a  U" [        [        [           U5      U5        X#U'   g)z>Set ``value`` in ``root_dict`` along the ``path`` object path.lstidxr   Nc                 h    [        U 5      U::  a#  U R                  S 5        [        U 5      U::  a  M"  g g r   )lenappend)rB   rC   s     r   extend_list set_element.<locals>.extend_listu   s&    #h#oJJt #h#or      )r   CONTAINER_TYPEr"   r5   intrangerE   typer+   r   r   
setdefault)	r@   r(   r   cur_containerrG   r1   prev_keyr9   def_vals	            r   r   r   o   s     3Mo. S T  1c$i A;gd3i3.>BGmW--  8 8 KM 0&.*1h')3M ! r(CCyCDo.>D#r   default_valuec                 8   [        [        U 5      nU Hn  n[        U5      [        L a)  [	        U[
        5      (       a  [        U5      U:  a  Us  $ O[	        U[        5      (       a  XC;  a  Us  $ [        [        X4   5      nMp     [        [        [           U5      $ )z[Retrieve the value at ``path``from ``root_dict``, returning ``default_value`` if not found.)
r   rK   rN   rL   r   r"   rE   r   r   r   )r@   r(   rS   	cur_valueparts        r   r   r      s     ^Y/I:i..#i.42G$$ 3HIw//43H  9	  Y''r    prefix	print_func                    [        U 5      [        L a_  U" U SU R                  5        35        U R                  5        H/  n[	        UR
                  UR                  R                   S3US9  M1     g [        U 5      [        L a0  U" U SU R                  5        35        [	        U R                  US9  g [        U [        R                  5      (       a  U" U SU R                  5        35        g U" U S[        U 5       35        g )Nz ShardedTensor size:  )rY   z DistributedTensor size: z Tensor size: z Type: )rN   r   sizelocal_shards_print_nestedtensormetadatashard_offsetsr   _local_tensorr   r   r   )r   rX   rY   shards       r   r^   r^      s    
 E{m#VH1%**,@A'')E>>//02# * 
e	!VH5ejjl^DE	
 
E5<<	(	(VHN5::<.9:VHGDK=12r   c                 ,    [        U[        U 5      US9  g)z
Use this callback with traverse_state_dict to print its content.

By default the content is printed using the builtin ``print`` but this can
be change by passing a different ``print_fun` callable.
)rX   rY   N)r^   r+   )r(   r   rY   s      r   r   r      s     %D	Y?r   r   )$collections.abcr   r   r   typingr   r   r   r	   r
   r   +torch.distributed._shard.sharded_tensor.apir   %torch.distributed.checkpoint.metadatar   torch.distributed.tensorr   r+   rL   	PATH_ITEMr,   r7   r   objectr5   rK   __all__r6   r   r   r?   r   r   printr^   r    r   r   <module>ro      s   ? ? ; ;  E A , #s(O	C CL	? :;
O+/ +d + :P'*'*x1478'* /56'* 
	'*Z :P(*(*x1478(* /56(* 
	(*V&.7F	F "&((
( A;( a[	(( ',333 t$3 
	3: (-@
@@ t$@ 
	@r   