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: unregister a plugin object and all its contained hook implementations
  from internal data structures. 
docstr_tok: ["unregister","a","plugin","object","and","all","its","contained","hook","implementations","from","internal","data","structures","."]
code: def unregister(self, plugin=None, name=None):
      """unregister a plugin object and all its contained hook implementations
      from internal data structures."""
      if name is None:
          assert (
              plugin is not None
          ), "one of name or plugin needs to be specified"
          name = self.get_name(plugin)
  
      if plugin is None:
          plugin = self.get_plugin(name)
  
      # if self._name2plugin[name] == None registration was blocked: ignore
      if self._name2plugin.get(name):
          del self._name2plugin[name]
  
      for hookcaller in self._plugin2hookcallers.pop(plugin, []):
          hookcaller._remove_plugin(plugin)
  
      return 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 5 for calling the PluginManager obj's underlying member method code with example usage: obj.unregister(plugin, name) and returns: plugin