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: add new hook specifications defined in the given ``module_or_class``.
  Functions are recognized if they have been decorated accordingly. 
docstr_tok: ["add","new","hook","specifications","defined","in","the","given","``","module_or_class","``",".","Functions","are","recognized","if","they","have","been","decorated","accordingly","."]
code: def add_hookspecs(self, module_or_class):
      """add new hook specifications defined in the given ``module_or_class``.
      Functions are recognized if they have been decorated accordingly.
      """
      names = []
      for name in dir(module_or_class):
          spec_opts = self.parse_hookspec_opts(module_or_class, name)
          if spec_opts is not None:
              hc = getattr(self.hook, name, None)
              if hc is None:
                  hc = _HookCaller(
                      name, self._hookexec, module_or_class, spec_opts
                  )
                  setattr(self.hook, name, hc)
              else:
                  # plugins registered this hook without knowing the spec
                  hc.set_specification(module_or_class, spec_opts)
                  for hookfunction in hc.get_hookimpls():
                      self._verify_hook(hc, hookfunction)
              names.append(name)
  
      if not names:
          raise ValueError(
              "did not find any %r hooks in %r"
              % (self.project_name, module_or_class)
          )
  
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 8 for calling the PluginManager obj's underlying member method code with example usage: obj.add_hookspecs(module_or_class) without return types