code: def __getattr__(self, name):
      if name == "data":
          return self._data
      elif name in self.__dict__:
          return self.__dict__[name]
      self.used_attrs.add(name)
  
      val = getattr(self._data, name)
  
      # NOTE: not clear is really needed
      # If it's a method
      # if callable(val):
      #    c = getattr(type(self._data), name)
      #    # Don't append self to args if classmethod/staticmethod
      #    if c is val:
      #        return lambda *a, **kw: wrap(self.__torch_function__(c, (type(self),), args=a, kwargs=kw), type(self))
      #    # Otherwise append self to args
      #    return lambda *a, **kw: wrap(
      #        #self.__torch_function__(c, (type(self),), args=(self,) + a, kwargs=kw), type(self)
      #    )
  
      return wrap(val, type(self))
  
imports: import collections
  import torch
  from torch import Tensor
label_desc: Use image node_id 6 for calling the TensorWrapper obj's underlying member method code with example usage: obj.__getattr__(name) and returns: wrap, self, self