
    9j                     j    d dl Z d dlZd dlmZ d dlmZ dej                  deej                     fdZ	y)    N)
OpaqueBase)is_traceable_wrapper_subclasstreturnc                 *   | g}t               }t        |      dkD  r|j                         }t        |      ry|j	                         \  }}|D ]`  }t        ||      xxt        j                  d x\   } |j                  |       9  xt        d x\    I }t        dt        |              nTt        |d      s)t        j                  dt        |       t        d       n|j!                  |j#                                t        |      dkD  r|S )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	            e/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/distributed/_tools/common_utils.pyget_untyped_storagesr%      s    # #
!
"Q
&!%%'(---/HE1 	c4(,,+2215 -% &#,A$zBRAST 	 3 1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&   