docs: def get_riskmodel(taxonomy, oqparam, **extra):
      """
      Return an instance of the correct riskmodel class, depending on the
      attribute `calculation_mode` of the object `oqparam`.
  
      :param taxonomy:
          a taxonomy string
      :param oqparam:
          an object containing the parameters needed by the riskmodel class
      :param extra:
          extra parameters to pass to the riskmodel class
      """
      riskmodel_class = registry[oqparam.calculation_mode]
      # arguments needed to instantiate the riskmodel class
      argnames = inspect.getfullargspec(riskmodel_class.__init__).args[3:]
  
      # arguments extracted from oqparam
      known_args = set(name for name, value in
                       inspect.getmembers(oqparam.__class__)
                       if isinstance(value, valid.Param))
      all_args = {}
      for argname in argnames:
          if argname in known_args:
              all_args[argname] = getattr(oqparam, argname)
  
      if 'hazard_imtls' in argnames:  # special case
          all_args['hazard_imtls'] = oqparam.imtls
      all_args.update(extra)
      missing = set(argnames) - set(all_args)
      if missing:
          raise TypeError('Missing parameter: %s' % ', '.join(missing))
  
      return riskmodel_class(taxonomy, **all_args)