docs: def get_versions(requirements=True, key=None):
      """
      Get the version information for psyplot, the plugins and its requirements
  
      Parameters
      ----------
      requirements: bool
          If True, the requirements of the plugins and psyplot are investigated
      key: func
          A function that determines whether a plugin shall be considererd or
          not. The function must take a single argument, that is the name of the
          plugin as string, and must return True (import the plugin) or False
          (skip the plugin). If None, all plugins are imported
  
      Returns
      -------
      dict
          A mapping from ``'psyplot'``/the plugin names to a dictionary with the
          ``'version'`` key and the corresponding version is returned. If
          `requirements` is True, it also contains a mapping from
          ``'requirements'`` a dictionary with the versions
  
      Examples
      --------
      Using the built-in JSON module, we get something like
  
      .. code-block:: python
  
          import json
          print(json.dumps(psyplot.get_versions(), indent=4))
          {
              "psy_simple.plugin": {
                  "version": "1.0.0.dev0"
              },
              "psyplot": {
                  "version": "1.0.0.dev0",
                  "requirements": {
                      "matplotlib": "1.5.3",
                      "numpy": "1.11.3",
                      "pandas": "0.19.2",
                      "xarray": "0.9.1"
                  }
              },
              "psy_maps.plugin": {
                  "version": "1.0.0.dev0",
                  "requirements": {
                      "cartopy": "0.15.0"
                  }
              }
          }
      """
      from pkg_resources import iter_entry_points
      ret = {'psyplot': _get_versions(requirements)}
      for ep in iter_entry_points(group='psyplot', name='plugin'):
          if str(ep) in rcParams._plugins:
              logger.debug('Loading entrypoint %s', ep)
              if key is not None and not key(ep.module_name):
                  continue
              mod = ep.load()
              try:
                  ret[str(ep.module_name)] = mod.get_versions(requirements)
              except AttributeError:
                  ret[str(ep.module_name)] = {
                      'version': getattr(mod, 'plugin_version',
                                         getattr(mod, '__version__', ''))}
      if key is None:
          try:
              import psyplot_gui
          except ImportError:
              pass
          else:
              ret['psyplot_gui'] = psyplot_gui.get_versions(requirements)
      return ret