
    3j                     l    S SK r S SKrS SKJr  S SKJr  S\R                  S\\R                     4S jr	g)    N)
OpaqueBase)is_traceable_wrapper_subclasstreturnc                 J   U /n[        5       n[        U5      S:  Ga  UR                  5       n[        U5      (       a|  UR	                  5       u  pEU Hc  n[        X65      ==[        R                  S` =b  u   n  UR                  U5        M:      =[        S` =b  u     ML    n[        S[        U5       35      e   OW[        US5      (       d'  [        R                  " S[        U5       3[        SS9  OUR!                  UR#                  5       5        [        U5      S:  a  GM  U$ )z
Recursively extracts untyped storages from a tensor or its subclasses.

Args:
    t (torch.Tensor): The tensor to extract storages from.

Returns:
    Set[torch.UntypedStorage]: A set of untyped storages.
r    z#expected Tensor or OpaqueBase, got untyped_storagezEExpected a tensor or a traceable wrapper-subclass of tensor, but got    )category
stacklevel)setlenpopr   __tensor_flatten__getattrtorchTensorappendr   AssertionErrortypehasattrwarningswarnUserWarningaddr	   )	r   unflattened_tensorsflattened_tensor_storagesobjattrs_attrv
unexpecteds	            _/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/distributed/_tools/common_utils.pyget_untyped_storagesr%      s    # #
!
"Q
&!%%'(----/HEc(,,+2215 -% &#,A$zBRAST   3 122[\`ad\e[fg(  *--c.A.A.CD- !
"Q
&. %$    )
r   r   torch._opaque_baser   torch.utils._python_dispatchr   r   r   UntypedStorager%   r   r&   r$   <module>r*      s3      ) F#%ELL #%S1E1E-F #%r&   