Source code for pysatl_cpd.data.generator.providers.pd_provider

# -*- coding: ascii -*-
"""Pandas provider builders for generated data."""

from __future__ import annotations

__author__ = "Mikhail Mikhailov"
__copyright__ = "Copyright (c) 2026 PySATL project"
__license__ = "SPDX-License-Identifier: MIT"

import pandas as pd

from pysatl_cpd.data.generator.models import GeneratedSeries
from pysatl_cpd.data.providers.labeled import PandasLabeledData
from pysatl_cpd.data.providers.labeled.segments_labeling import SegmentsLabeling
from pysatl_cpd.data.providers.plain.pd_provider import PandasDataProvider as PandasUnlabeledDataProvider
from pysatl_cpd.data.typedefs import TimeseriesAnnotation, UnlabeledTimeseriesAnnotation


[docs] def build_pandas_labeled_data( series: GeneratedSeries, *, name: str, annotation: TimeseriesAnnotation | None = None, ) -> PandasLabeledData[TimeseriesAnnotation]: """ Build pandas labeled data from generated series. Parameters ---------- series Generated series containing data and metadata. name Name for the timeseries annotation. annotation Optional timeseries annotation. If None, one is created using the series metadata. Returns ------- labeled_data Pandas labeled data instance. """ effective_annotation = annotation or TimeseriesAnnotation(name=name, metadata=series.metadata) unlabeled = PandasUnlabeledDataProvider( pd.DataFrame(series.data, columns=series.feature_names), UnlabeledTimeseriesAnnotation( name=name, source=effective_annotation.source, metadata=effective_annotation.metadata, ), ) return PandasLabeledData(unlabeled, SegmentsLabeling(series.segments), effective_annotation)
[docs] def build_pandas_univariate_labeled_data( series: GeneratedSeries, *, feature_name: str, name: str, annotation: TimeseriesAnnotation | None = None, ) -> PandasLabeledData[TimeseriesAnnotation]: """ Build pandas univariate labeled data from generated series. Parameters ---------- series Generated series containing data and metadata. feature_name Name of the feature to extract as univariate data. name Name for the timeseries annotation. annotation Optional timeseries annotation. If None, one is created using the series metadata. Returns ------- labeled_data Pandas univariate labeled data instance. Raises ------ ValueError If the feature name is not found in the series. """ if feature_name not in series.feature_names: raise ValueError(f"Unknown feature name '{feature_name}'") effective_annotation = annotation or TimeseriesAnnotation(name=name, metadata=series.metadata) feature_index = series.feature_names.index(feature_name) unlabeled = PandasUnlabeledDataProvider( pd.DataFrame({feature_name: series.data[:, feature_index]}), UnlabeledTimeseriesAnnotation( name=name, source=effective_annotation.source, metadata=effective_annotation.metadata, ), ) return PandasLabeledData(unlabeled, SegmentsLabeling(series.segments), effective_annotation)