class_docstr: Metaclass for :class:`Op` classes.
  
  This weakly caches op instances. Caching strategy is to key on
  ``args[arity:],kwargs`` and to weakly retain values. Caching requires all
  non-funsor args to be hashable; for non-hashable args, implement a derived
  metaclass with custom :meth:`hash_args_kwargs` method.
code: def register(cls):
      return cls.dispatcher.register
  
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 2 for calling the OpMeta obj's underlying member method code with example usage: obj.register(cls) and returns: cls