class_docstr: Core :py:class:`.PluginManager` class which manages registration
  of plugin objects and 1:N hook calling.
  
  You can register new hooks by calling :py:meth:`add_hookspecs(module_or_class)
  <.PluginManager.add_hookspecs>`.
  You can register plugin objects (which contain hooks) by calling
  :py:meth:`register(plugin) <.PluginManager.register>`.  The :py:class:`.PluginManager`
  is initialized with a prefix that is searched for in the names of the dict
  of registered plugin objects.
  
  For debugging purposes you can call :py:meth:`.PluginManager.enable_tracing`
  which will subsequently send debug information to the trace helper.
docstr: Return canonical name for a plugin object. Note that a plugin
  may be registered under a different name which was specified
  by the caller of :py:meth:`register(plugin, name) <.PluginManager.register>`.
  To obtain the name of an registered plugin use :py:meth:`get_name(plugin)
  <.PluginManager.get_name>` instead.
docstr_tok: ["Return","canonical","name","for","a","plugin","object",".","Note","that","a","plugin","may","be","registered","under","a","different","name","which","was","specified","by","the","caller","of",":","py",":","meth",":","`","register","(","plugin",",","name",")","<",".PluginManager.register",">","`",".","To","obtain","the","name","of","an","registered","plugin","use",":","py",":","meth",":","`","get_name","(","plugin",")","<",".PluginManager.get_name",">","`","instead","."]
code: def get_canonical_name(self, plugin):
      """Return canonical name for a plugin object. Note that a plugin
      may be registered under a different name which was specified
      by the caller of :py:meth:`register(plugin, name) <.PluginManager.register>`.
      To obtain the name of an registered plugin use :py:meth:`get_name(plugin)
      <.PluginManager.get_name>` instead."""
      return getattr(plugin, "__name__", None) or str(id(plugin))
  
imports: import inspect
  import sys
  from .None import _tracing
  from .callers import _Result
  from .hooks import HookImpl, _HookRelay, _HookCaller, normalize_hookimpl_opts
  import warnings
label_desc: Use image node_id 12 for calling the PluginManager obj's underlying member method code with example usage: obj.get_canonical_name(plugin) and returns: unknown