docs: def get_oqparam(job_ini, pkg=None, calculators=None, hc_id=None, validate=1,
                  **kw):
      """
      Parse a dictionary of parameters from an INI-style config file.
  
      :param job_ini:
          Path to configuration file/archive or dictionary of parameters
      :param pkg:
          Python package where to find the configuration file (optional)
      :param calculators:
          Sequence of calculator names (optional) used to restrict the
          valid choices for `calculation_mode`
      :param hc_id:
          Not None only when called from a post calculation
      :param validate:
          Flag. By default it is true and the parameters are validated
      :param kw:
          String-valued keyword arguments used to override the job.ini parameters
      :returns:
          An :class:`openquake.commonlib.oqvalidation.OqParam` instance
          containing the validate and casted parameters/values parsed from
          the job.ini file as well as a subdictionary 'inputs' containing
          absolute paths to all of the files referenced in the job.ini, keyed by
          the parameter name.
      """
      # UGLY: this is here to avoid circular imports
      from openquake.calculators import base
  
      OqParam.calculation_mode.validator.choices = tuple(
          calculators or base.calculators)
      if not isinstance(job_ini, dict):
          basedir = os.path.dirname(pkg.__file__) if pkg else ''
          job_ini = get_params([os.path.join(basedir, job_ini)])
      if hc_id:
          job_ini.update(hazard_calculation_id=str(hc_id))
      job_ini.update(kw)
      oqparam = OqParam(**job_ini)
      if validate:
          oqparam.validate()
      return oqparam