Source code for openstef_beam.backtesting.backtest_forecaster.dummy_forecaster
# SPDX-FileCopyrightText: 2025 Contributors to the OpenSTEF project <openstef@lfenergy.org>
#
# SPDX-License-Identifier: MPL-2.0
"""Minimal forecaster for testing backtesting pipelines.
Provides a no-op implementation that satisfies the backtesting interface
without requiring actual model training or prediction logic.
"""
from datetime import timedelta
from openstef_beam.backtesting.backtest_forecaster.mixins import BacktestForecasterConfig, BacktestForecasterMixin
from openstef_beam.backtesting.restricted_horizon_timeseries import RestrictedHorizonVersionedTimeSeries
from openstef_core.datasets import TimeSeriesDataset
from openstef_core.types import Q, Quantile
[docs]
class DummyForecaster(BacktestForecasterMixin):
"""Simple forecaster implementation for testing and development purposes.
Provides a minimal implementation of the backtesting forecaster interface
without actual prediction logic. Useful for testing pipeline components,
debugging, and as a reference implementation.
Attributes:
config: Configuration parameters for the forecasting interface.
predict_quantiles: List of quantiles to return in predictions.
"""
[docs]
def __init__(
self,
config: BacktestForecasterConfig | None = None,
predict_quantiles: list[Quantile] | None = None,
) -> None:
"""Initialize the dummy forecaster with default configuration.
Args:
config: Forecaster configuration. If None, uses default no-training config.
predict_quantiles: Quantiles to include in predictions. If None, uses
standard quantiles [0.05, 0.1, 0.3, 0.5, 0.7, 0.9, 0.95].
"""
super().__init__()
self.config = config or BacktestForecasterConfig(
requires_training=False,
predict_length=timedelta(days=7),
predict_min_length=timedelta(days=0),
predict_context_length=timedelta(days=0),
predict_context_min_coverage=0.0,
training_context_length=timedelta(days=0),
training_context_min_coverage=0.0,
predict_sample_interval=timedelta(minutes=15),
)
self.predict_quantiles = predict_quantiles or [Q(0.05), Q(0.1), Q(0.3), Q(0.5), Q(0.7), Q(0.9), Q(0.95)]
@property
def quantiles(self) -> list[Quantile]:
"""Return the list of quantiles for predictions."""
return self.predict_quantiles
[docs]
def predict(self, data: RestrictedHorizonVersionedTimeSeries) -> TimeSeriesDataset | None:
"""Placeholder prediction method that raises NotImplementedError.
Args:
data: Time series data with horizon restrictions for prediction.
Returns:
None - this implementation does not provide actual predictions.
Raises:
NotImplementedError: Always raised as this is a dummy implementation.
"""
raise NotImplementedError