class_docstr: Metaclass for ops that wrap temporary backend ops.
  Caching strategy is to key on ``id(backend_op)`` and forget values asap.
code: def hash_args_kwargs(self, args, kwargs):
      if args:
          (fn,) = args
          if inspect.ismethod(fn):
              args = (
                  id(fn.__self__),
                  fn.__func__,
              )  # e.g. t.log_abs_det_jacobian
          else:
              args = (id(fn),)  # e.g. t.inv
      return super().hash_args_kwargs(args, kwargs)
  
imports: import contextlib
  import functools
  import inspect
  import weakref
  from collections import OrderedDict
  from funsor.registry import PartialDispatcher
  from funsor.util import methodof
label_desc: Use image node_id 1 for calling the WrappedOpMeta obj's underlying member method code with example usage: obj.hash_args_kwargs(args, kwargs) and returns: super