src.fairreckitlib.evaluation.pipeline.evaluation_config_parsing

This module contains a parser for the evaluation and metric configuration(s).

Functions:

parse_evaluation_config: parse all metric configurations.

This program has been developed by students from the bachelor Computer Science at Utrecht University within the Software Project course. © Copyright Utrecht University (Department of Information and Computing Sciences)

  1"""This module contains a parser for the evaluation and metric configuration(s).
  2
  3Functions:
  4
  5    parse_evaluation_config: parse all metric configurations.
  6
  7This program has been developed by students from the bachelor Computer Science at
  8Utrecht University within the Software Project course.
  9© Copyright Utrecht University (Department of Information and Computing Sciences)
 10"""
 11
 12from typing import Any, Dict, List
 13
 14from ...core.config.config_factories import GroupFactory
 15from ...core.config.config_value_param import ConfigNumberParam
 16from ...core.core_constants import KEY_TOP_K
 17from ...core.events.event_dispatcher import EventDispatcher
 18from ...core.parsing.parse_config_object import parse_config_object_list
 19from ...core.parsing.parse_event import ON_PARSE, ParseEventArgs
 20from ...data.filter.filter_config_parsing import parse_data_subset_config
 21from ...data.set.dataset_registry import DataRegistry
 22from ..evaluation_factory import KEY_EVALUATION
 23from ..metrics.metric_constants import KEY_METRIC_PARAM_K, KEY_METRIC_SUBGROUP
 24from .evaluation_config import MetricConfig
 25
 26
 27def parse_evaluation_config(
 28        data_registry: DataRegistry,
 29        data_filter_factory: GroupFactory,
 30        experiment_config: Dict[str, Any],
 31        metric_category_factory: GroupFactory,
 32        event_dispatcher: EventDispatcher) -> List[MetricConfig]:
 33    """Parse all metric configurations.
 34
 35    Args:
 36        data_registry: the data registry with available dataset matrices.
 37        data_filter_factory: the dataset filter group factory.
 38        experiment_config: the experiment's total configuration.
 39        metric_category_factory: the metric factory containing grouped available metrics.
 40        event_dispatcher: to dispatch the parse event on failure.
 41
 42    Returns:
 43        a list of parsed MetricConfig's which is possibly empty.
 44    """
 45    # evaluation is not mandatory
 46    if not KEY_EVALUATION in experiment_config:
 47        return []
 48
 49    eval_config = experiment_config[KEY_EVALUATION]
 50
 51    top_k_param = {}
 52    # override top K param according to experiment configuration
 53    if experiment_config.get(KEY_TOP_K, False):
 54        top_k_param[KEY_METRIC_PARAM_K] = ConfigNumberParam(
 55            KEY_METRIC_PARAM_K,
 56            int,
 57            experiment_config[KEY_TOP_K],
 58            (1, experiment_config[KEY_TOP_K])
 59        )
 60
 61    # parse metric configurations as objects
 62    parsed_config_objs = parse_config_object_list(
 63        KEY_EVALUATION,
 64        'metric',
 65        eval_config,
 66        metric_category_factory,
 67        event_dispatcher,
 68        params=top_k_param
 69    )
 70
 71    # convert object to metric configurations
 72    metric_config_list = []
 73    for (metric, metric_config) in parsed_config_objs:
 74        metric_subgroup = None
 75
 76        # attempt to parse metric subgroup
 77        if KEY_METRIC_SUBGROUP in metric_config:
 78            metric_data_subset, _ = parse_data_subset_config(
 79                metric_config[KEY_METRIC_SUBGROUP],
 80                data_registry,
 81                data_filter_factory,
 82                event_dispatcher,
 83                data_parent_name='metric \'' + metric.name + '\'',
 84                required=False
 85            )
 86
 87            # skip on failure or no filter passes
 88            if metric_data_subset is not None and len(metric_data_subset.filter_passes) == 0:
 89                event_dispatcher.dispatch(ParseEventArgs(
 90                    ON_PARSE,
 91                    'PARSE WARNING: metric \'' + metric.name +
 92                    '\' data filter passes are empty, skipping...'
 93                ))
 94
 95            metric_subgroup = metric_data_subset
 96
 97        metric_config_list.append(MetricConfig(
 98            metric.name,
 99            metric.params,
100            metric_subgroup
101        ))
102
103    return metric_config_list
def parse_evaluation_config( data_registry: src.fairreckitlib.data.set.dataset_registry.DataRegistry, data_filter_factory: src.fairreckitlib.core.config.config_factories.GroupFactory, experiment_config: Dict[str, Any], metric_category_factory: src.fairreckitlib.core.config.config_factories.GroupFactory, event_dispatcher: src.fairreckitlib.core.events.event_dispatcher.EventDispatcher) -> List[src.fairreckitlib.evaluation.pipeline.evaluation_config.MetricConfig]:
 28def parse_evaluation_config(
 29        data_registry: DataRegistry,
 30        data_filter_factory: GroupFactory,
 31        experiment_config: Dict[str, Any],
 32        metric_category_factory: GroupFactory,
 33        event_dispatcher: EventDispatcher) -> List[MetricConfig]:
 34    """Parse all metric configurations.
 35
 36    Args:
 37        data_registry: the data registry with available dataset matrices.
 38        data_filter_factory: the dataset filter group factory.
 39        experiment_config: the experiment's total configuration.
 40        metric_category_factory: the metric factory containing grouped available metrics.
 41        event_dispatcher: to dispatch the parse event on failure.
 42
 43    Returns:
 44        a list of parsed MetricConfig's which is possibly empty.
 45    """
 46    # evaluation is not mandatory
 47    if not KEY_EVALUATION in experiment_config:
 48        return []
 49
 50    eval_config = experiment_config[KEY_EVALUATION]
 51
 52    top_k_param = {}
 53    # override top K param according to experiment configuration
 54    if experiment_config.get(KEY_TOP_K, False):
 55        top_k_param[KEY_METRIC_PARAM_K] = ConfigNumberParam(
 56            KEY_METRIC_PARAM_K,
 57            int,
 58            experiment_config[KEY_TOP_K],
 59            (1, experiment_config[KEY_TOP_K])
 60        )
 61
 62    # parse metric configurations as objects
 63    parsed_config_objs = parse_config_object_list(
 64        KEY_EVALUATION,
 65        'metric',
 66        eval_config,
 67        metric_category_factory,
 68        event_dispatcher,
 69        params=top_k_param
 70    )
 71
 72    # convert object to metric configurations
 73    metric_config_list = []
 74    for (metric, metric_config) in parsed_config_objs:
 75        metric_subgroup = None
 76
 77        # attempt to parse metric subgroup
 78        if KEY_METRIC_SUBGROUP in metric_config:
 79            metric_data_subset, _ = parse_data_subset_config(
 80                metric_config[KEY_METRIC_SUBGROUP],
 81                data_registry,
 82                data_filter_factory,
 83                event_dispatcher,
 84                data_parent_name='metric \'' + metric.name + '\'',
 85                required=False
 86            )
 87
 88            # skip on failure or no filter passes
 89            if metric_data_subset is not None and len(metric_data_subset.filter_passes) == 0:
 90                event_dispatcher.dispatch(ParseEventArgs(
 91                    ON_PARSE,
 92                    'PARSE WARNING: metric \'' + metric.name +
 93                    '\' data filter passes are empty, skipping...'
 94                ))
 95
 96            metric_subgroup = metric_data_subset
 97
 98        metric_config_list.append(MetricConfig(
 99            metric.name,
100            metric.params,
101            metric_subgroup
102        ))
103
104    return metric_config_list

Parse all metric configurations.

Args: data_registry: the data registry with available dataset matrices. data_filter_factory: the dataset filter group factory. experiment_config: the experiment's total configuration. metric_category_factory: the metric factory containing grouped available metrics. event_dispatcher: to dispatch the parse event on failure.

Returns: a list of parsed MetricConfig's which is possibly empty.