Source code for dispel.docutils

"""Utility functions for measure definition documentation."""
from itertools import starmap
from typing import Dict, Iterable, Optional, Tuple

import pandas as pd

from dispel.data.measures import MeasureValueDefinition
from dispel.data.validators import RangeValidator, SetValidator
from dispel.data.values import ValueDefinition
from dispel.processing.core import ProcessingStep
from dispel.processing.extract import MeasureDefinitionMixin
from dispel.processing.trace import collect_measure_value_definitions
from dispel.providers.registry import PROCESSING_STEPS


[docs] def convert_measure_value_definition_to_dict( step: ProcessingStep, definition: ValueDefinition ) -> Dict[str, Optional[str]]: """Convert a measure value definition into a dictionary representation. Parameters ---------- step The processing step that produced the definition. definition The definition to be converted Returns ------- Dict[str, Optional[str]] A dictionary representation of the definition. Note that if the validator is a range validator it will populate the ``values_min`` and ``values_max`` attributes based on the lower and upper bound, respectively. All other attributes of the object are mapped one-to-one. """ # expand on validator values_min = None values_max = None values_in = None validator = definition.validator if isinstance(validator, RangeValidator): values_min = validator.lower_bound values_max = validator.upper_bound elif isinstance(validator, SetValidator): if validator.labels: values_in = validator.labels else: values_in = validator.allowed_values # Additional parameters measure_definition_kwargs = {} if isinstance(definition, MeasureValueDefinition): measure_definition_kwargs = { "task_name": definition.task_name, "measure_name": definition.measure_name, **{ f"modality_{i}": str(m) for i, m in enumerate(definition.modalities or []) }, "aggregation": definition.aggregation, } return { "id": str(definition.id), "name": str(definition.name), "description": definition.description, "unit": definition.unit, "data_type": definition.data_type, "values_min": values_min, "values_max": values_max, "values_in": values_in, "produced_by": repr(step), **measure_definition_kwargs, }
[docs] def measure_value_definitions_to_data_frame( definitions: Iterable[Tuple[MeasureDefinitionMixin, ValueDefinition]] ) -> pd.DataFrame: """Convert a list of measure value definitions into a data frame. Parameters ---------- definitions A list of tuples of processing steps and the produced measure value definitions to be converted into a data frame representation. Returns ------- pandas.DataFrame The definitions as data frame. See also :func:`convert_measure_value_definition_to_dict` on the specific columns provided. """ return pd.DataFrame(starmap(convert_measure_value_definition_to_dict, definitions))
[docs] def get_measure_value_definitions_data_frame() -> pd.DataFrame: """Get a data frame of all available measures in the library. Returns ------- pandas.DataFrame A data frame containing all measure value definitions. See also :func:`measure_value_definitions_to_data_frame`. """ instrument_data = [] for steps in PROCESSING_STEPS.values(): if isinstance(steps, ProcessingStep): steps = [steps] definitions = collect_measure_value_definitions(steps) data = measure_value_definitions_to_data_frame(definitions) instrument_data.append(data) return pd.concat(instrument_data, ignore_index=True)