
    IЦi              
          S SK JrJrJrJrJr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)    )
Callablecast
CollectionListMappingMutableMappingOptionalTuple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    e/var/www/html/ai-image-ml/venv/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_terminal0   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   r4   *traverse_state_dict.<locals>._traverse_obj@   s    eW%%dc!fY.2 &%  D e}--!%(dTk1- ) .r   STATE_DICT_ITEMboolOBJ_PATHr,   r-   r   r    r!   keyr   r(   r4   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_terminal[   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/   r0   s        r   r4   0traverse_state_dict_v_2_3.<locals>._traverse_objk   s{    D w''dc!fY.2 &t$$!%(dTk1- ) %r   r6   r:   s    ``  @@r   traverse_state_dict_v_2_3rA   N   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)rD   rE   s     r   extend_list set_element.<locals>.extend_list   s&    #h#oJJt #h#or      )r   CONTAINER_TYPEr   r7   intrangerG   typer-   r   r   
setdefault)	rB   r*   r   cur_containerrI   r3   prev_keyr;   def_vals	            r   r   r   y   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   rM   rP   rN   r   r$   rG   r   r	   r   )rB   r*   rU   	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:  )r[   z DistributedTensor size: z Tensor size: z Type: )rP   r   sizelocal_shards_print_nestedtensormetadatashard_offsetsr   _local_tensorr   r   r   )r   rZ   r[   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.
)rZ   r[   N)r`   r-   )r*   r   r[   s      r   r   r      s     %D	Y?r   r   )$typingr   r   r   r   r   r   r	   r
   r   r   r   +torch.distributed._shard.sharded_tensor.apir   %torch.distributed.checkpoint.metadatar   torch.distributed.tensorr   r-   rN   	PATH_ITEMr9   r   objectr7   rM   __all__r8   r   r   rA   r   r   printr`   r    r   r   <module>rp      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   