def _evaluate_params(params_name: list, params_index: list, config_params_available: bool):
    """
    This ensures that (1) if parameter names are provided in the config file, one and only one of
    the arguments, `params_name` or `params_index`, might be given, and (2) if parameter names are
    NOT provided in the config file, the arg `params_name` and only that MUST be given.
    :param params_name: See the same argument in `do_extraction`.
    :param params_index: See the same argument in `do_extraction`.
    :param config_params_available: `True` if the key `MVTS_PARAMETERS` in the config file, is
           associated with a list of parameters, and `False` otherwise.

    :return: True, if no exception was raised.
    """
    if params_index is None: params_index = []
    if params_name is None: params_name = []

    given_by_list, given_by_index = False, False
    if len(params_name) > 0:
        given_by_list = True
    if len(params_index) > 0:
        given_by_index = True

    if not config_params_available:  # if parameters in config file are not provided
        if given_by_list and not given_by_index:
            return True
        else:
            # if (1) both args are given, or (2) if none of them are provided, or (3) if
            # params_index is given
            raise ValueError(
                """
                If a list of parameter names is not provided by the config file, 
                the arg `params_name` and only that MUST be given.
                """
            )
    else:
        if given_by_list + given_by_index > 1:  # if both args are provided
            raise ValueError(
                """
                Both of the arguments, `params_name` and `params_index`, cannot be given at the 
                same time.
                """
            )
    return True