docs: def run(scenario, config=None, base_config=None, outputs=None, return_config=False):
      """
      Runs a scenario through the Hector climate model.
  
      Parameters
      ----------
      scenario : DataFrame
          DataFrame with emissions. See ``pyhector.rcp26`` for an
          example and :mod:`pyhector.units` for units of emissions values.
      config : dictionary, default ``None``
          Additional config options that overwrite the base
          config.
      base_config : dictionary
          Base config to use. If None uses Hector's
          default config. Values in config override values in base_config.
          default None
      outputs : array_like
          List of requested output variables as strings.  if set to "all"
          returns all available variables. Defaults to global temperature,  CO2
          concentration and forcing. A full list is in :py:data:`variables`.
      return_config : boolean
          Additionaly return the full config used from adding
          ``config`` values to ``base_config``. default False
  
      Returns
      -------
      DataFrame
          Pandas DataFrame with results in the columns requested in ``outputs``.
      dictionary, optional
          When ``return_config`` is set to True results and
          parameters are returned as a tuple.
      """
      if outputs is None:
          outputs = ["temperature.Tgav", "simpleNbox.Ca", "forcing.Ftot"]
      if base_config is None:
          parameters = deepcopy(_default_config)
      else:
          parameters = deepcopy(base_config)
      if config:
          for key, data in config.items():
              for option, value in data.items():
                  parameters[key][option] = value
      with Hector() as h:
          h.config(parameters)
          h.set_emissions(scenario)
          if outputs == "all":
              outputs = output.keys()
          for name in outputs:
              h.add_observable(
                  output[name]["component"],
                  output[name]["variable"],
                  output[name].get("needs_date", False),
              )
          h.run()
          results = {}
          for name in outputs:
              results[name] = h.get_observable(
                  output[name]["component"], output[name]["variable"]
              )
  
          # In Hector 1.x output value years are given as end of simulation
          # year, e.g. 1745-12-31 = 1746.0.
          # See https://github.com/JGCRI/hector/issues/177
          start = int(parameters["core"]["startDate"]) + 1
          # End of range is non-inclusive in Python ranges.
          end = int(parameters["core"]["endDate"]) + 1
          index = np.arange(start, end)
          results = pd.DataFrame(results, index=index)
      if return_config:
          return results, parameters
      return results