
    Ph              
       ~   d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ e
eef   Zeedf   Z e	d      ZeZeeef   Zg dZd	ed
efdZefdedeeegdf   deegef   d
dfdZdeded	ed
dfdZ	 ddededee   d
ee   fdZde fd	ededeegdf   d
dfdZ!e fded	edeegdf   d
dfdZ"y)    N)
Callable
CollectionListMappingMutableMappingOptionalTupleTypeVarUnioncast)STATE_DICT_TYPE)ShardedTensor)DTensor.T)traverse_state_dictset_elementget_elementprint_tensorvaluereturnc                 6    t        | t        j                        S N)
isinstancetorchTensor)r   s    qC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/distributed/checkpoint/_traverse.py_keep_visiting_tensorsr       s    eU\\**    
state_dictvisitorkeep_traversingc                     dt         dt        ffddt        dt         ddffd| j                         D ]  \  }} t	        |      f|        y)a~  
    Invoke ``visitor`` for each value recursively in ``state_dict``.

    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                     t        | t              r| j                         }nt        | t              r| }ny|D ]/  }t        |t        t        f      r
 |      s y& |      s/ y y)NTF)r   r   valueslist)r   r$   entry_is_terminalr!   s      r   r'   z)traverse_state_dict.<locals>._is_terminal3   sa    eW%\\^Ft$FE%'41,u:M*u/E	 
 r   pathNc                 
    |      r
 | |       y t        |t              r/|j                         D ]  \  }} | t        |      fz   |        y t        |t              r!t        |      D ]  \  }} | |fz   |        y y r   )r   r   itemsstrr%   	enumerate)r(   r   kvir'   _traverse_objr    s        r   r0   z*traverse_state_dict.<locals>._traverse_objC   sz    D% w'1dc!fY.2 &t$!%(1daTk1- ) %r   )STATE_DICT_ITEMboolOBJ_PATHr*   r+   )r   r    r!   keyr   r'   r0   s    ``  @@r   r   r   %   sY    O   .H ._ . . !&&(
Us3xk5) )r   	root_dictr(   c                    t        t        |       }dt        t           dt        ddfd}t        dt        |            D ]|  }||dz
     }||   }t        t        t        |      t        k(  ri ng       }t        |t              r!t        t        |j                  ||            }e |||       ||   |||<   ||   }~ |d   }t        |      t        k(  r |t        t        t           |      |       |||<   y)z>Set ``value`` in ``root_dict`` along the ``path`` object path.lstidxr   Nc                 b    t        |       |k  r!| j                  d        t        |       |k  r y y r   )lenappend)r7   r8   s     r   extend_listz set_element.<locals>.extend_listW   s&    #h#oJJt #h#or      )r   CONTAINER_TYPEr   r1   intranger:   typer+   r   r   
setdefault)	r5   r(   r   cur_containerr<   r/   prev_keyr4   def_vals	            r   r   r   Q   s     3Mo. S T  1c$i A;1gd3i3.>BGmW-  8 87 KM x0X&.*1h')(3M ! r(CCyCDo.>DM#r   default_valuec                    t        t        |       }|D ]`  }t        |      t        u r"t	        |t
              rt        |      |k  r|c S t	        |t              r||vr|c S t        t        ||         }b t        t        t           |      S )z[Retrieve the value at ``path``from ``root_dict``, returning ``default_value`` if not found.)
r   r?   rB   r@   r   r%   r:   r   r   r   )r5   r(   rG   	cur_valueparts        r   r   r   q   s{     ^Y/I:i.#i.42G$$Iw/4y3H  49	  Y''r    prefix	print_func                    t        |       t        u r` || d| j                                 | j                         D ]1  }t	        |j
                  |j                  j                   d|       3 y t        |       t        u r3 || d| j                                 t	        | j                  |       y t        | t        j                        r || d| j                                 y  || dt        |               y )Nz ShardedTensor size:  )rM   z DistributedTensor size: z Tensor size: z Type: )rB   r   sizelocal_shards_print_nestedtensormetadatashard_offsetsr   _local_tensorr   r   r   )r   rL   rM   shards       r   rR   rR      s    
 E{m#VH1%**,@A'')E>>//02# * 
e	!VH5ejjl^DE	
 
E5<<	(VHN5::<.9:VHGDK=12r   c                 2    t        |t        |       |       y)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.
    )rL   rM   N)rR   r+   )r(   r   rM   s      r   r   r      s     %D	Y?r   r   )#r   typingr   r   r   r   r   r   r	   r
   r   r   %torch.distributed.checkpoint.metadatar   +torch.distributed._shard.sharded_tensor.apir   torch.distributed._tensorr   r+   r@   	PATH_ITEMr3   r   objectr1   r?   __all__r2   r   r   r   r   printrR   r    r   r   <module>rb      s      F -#s(O	C CL	? :;
O+/ +d + :P)*)*x1478)* /56)* 
	)*X&.7F	F "&((
( A;( a[	(( ',333 t$3 
	3: (-@
@@ t$@ 
	@r   