From aca6ab05375c7fe39ff2c665d85d30e1cbe311b2 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Tue, 10 Mar 2026 10:07:24 +0100 Subject: [PATCH 1/3] fix: implement workaround from https://github.com/SeitaBV/timely-beliefs/issues/226 Signed-off-by: F.N. Claessen --- flexmeasures/data/models/planning/utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flexmeasures/data/models/planning/utils.py b/flexmeasures/data/models/planning/utils.py index 6ba41dd20e..5c1780b048 100644 --- a/flexmeasures/data/models/planning/utils.py +++ b/flexmeasures/data/models/planning/utils.py @@ -8,6 +8,7 @@ from pandas.tseries.frequencies import to_offset import numpy as np import timely_beliefs as tb +import timely_beliefs.beliefs.utils as belief_utils from flexmeasures.data.models.planning.exceptions import UnknownPricesException from flexmeasures.data.models.time_series import Sensor, TimedBelief @@ -345,6 +346,8 @@ def get_series_from_quantity_or_sensor( ) if as_instantaneous_events: bdf = bdf.resample_events(timedelta(0), boundary_policy=resolve_overlaps) + # Workaround suggested by https://github.com/SeitaBV/timely-beliefs/issues/226 + bdf = belief_utils.select_most_recent_belief(bdf) time_series = simplify_index(bdf).reindex(index).squeeze(axis=1) time_series = convert_units( time_series, variable_quantity.unit, unit, resolution From 0a2b82f1e2c29bbd4c0332ba8ac43b662d9eeed1 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Tue, 10 Mar 2026 10:09:20 +0100 Subject: [PATCH 2/3] chore: use fix in timely-beliefs Signed-off-by: F.N. Claessen --- flexmeasures/data/models/planning/utils.py | 9 +++++---- requirements/3.10/app.txt | 2 +- requirements/3.11/app.txt | 2 +- requirements/3.12/app.txt | 2 +- requirements/app.in | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/flexmeasures/data/models/planning/utils.py b/flexmeasures/data/models/planning/utils.py index 5c1780b048..549ef6a01a 100644 --- a/flexmeasures/data/models/planning/utils.py +++ b/flexmeasures/data/models/planning/utils.py @@ -8,7 +8,6 @@ from pandas.tseries.frequencies import to_offset import numpy as np import timely_beliefs as tb -import timely_beliefs.beliefs.utils as belief_utils from flexmeasures.data.models.planning.exceptions import UnknownPricesException from flexmeasures.data.models.time_series import Sensor, TimedBelief @@ -345,9 +344,11 @@ def get_series_from_quantity_or_sensor( one_deterministic_belief_per_event=True, ) if as_instantaneous_events: - bdf = bdf.resample_events(timedelta(0), boundary_policy=resolve_overlaps) - # Workaround suggested by https://github.com/SeitaBV/timely-beliefs/issues/226 - bdf = belief_utils.select_most_recent_belief(bdf) + bdf = bdf.resample_events( + timedelta(0), + boundary_policy=resolve_overlaps, + keep_only_most_recent_belief=True, + ) time_series = simplify_index(bdf).reindex(index).squeeze(axis=1) time_series = convert_units( time_series, variable_quantity.unit, unit, resolution diff --git a/requirements/3.10/app.txt b/requirements/3.10/app.txt index d2aa0dab27..fc59dfc5ef 100644 --- a/requirements/3.10/app.txt +++ b/requirements/3.10/app.txt @@ -442,7 +442,7 @@ tabulate==0.9.0 # via -r requirements/app.in threadpoolctl==3.6.0 # via scikit-learn -timely-beliefs[forecast]==3.5.1 +timely-beliefs[forecast]==3.5.2 # via -r requirements/app.in timetomodel==0.7.3 # via -r requirements/app.in diff --git a/requirements/3.11/app.txt b/requirements/3.11/app.txt index 42380dd8f9..a2e1b0e5ad 100644 --- a/requirements/3.11/app.txt +++ b/requirements/3.11/app.txt @@ -439,7 +439,7 @@ tabulate==0.9.0 # via -r requirements/app.in threadpoolctl==3.6.0 # via scikit-learn -timely-beliefs[forecast]==3.5.1 +timely-beliefs[forecast]==3.5.2 # via -r requirements/app.in timetomodel==0.7.3 # via -r requirements/app.in diff --git a/requirements/3.12/app.txt b/requirements/3.12/app.txt index 78c0ec5314..b2cf598944 100644 --- a/requirements/3.12/app.txt +++ b/requirements/3.12/app.txt @@ -439,7 +439,7 @@ tabulate==0.9.0 # via -r requirements/app.in threadpoolctl==3.6.0 # via scikit-learn -timely-beliefs[forecast]==3.5.1 +timely-beliefs[forecast]==3.5.2 # via -r requirements/app.in timetomodel==0.7.3 # via -r requirements/app.in diff --git a/requirements/app.in b/requirements/app.in index 520d744516..afac609a43 100644 --- a/requirements/app.in +++ b/requirements/app.in @@ -31,8 +31,8 @@ tldextract pyomo>=5.6,<6.9 tabulate timetomodel>=0.7.3 -# 3.5.1: fixed issue with downsampling against non-midnight origins -timely-beliefs[forecast]>=3.5.1 +# 3.5.2: fixed issue with resampling to instantaneous +timely-beliefs[forecast]>=3.5.2 python-dotenv # a backport, not needed in Python3.8 importlib_metadata From a8b8ee1a171f95fd9f06d9bdc6fd05a9937431d4 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Tue, 10 Mar 2026 10:14:24 +0100 Subject: [PATCH 3/3] docs: changelog entry Signed-off-by: F.N. Claessen --- documentation/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/changelog.rst b/documentation/changelog.rst index 989fab9d0b..cadc256f8e 100644 --- a/documentation/changelog.rst +++ b/documentation/changelog.rst @@ -23,6 +23,7 @@ v0.31.1 | March 6, 2026 Bugfixes ----------- +* Fix bug with resampling time series of e.g. SoC minima with different belief times for adjacent time slots [see `PR #2012 `_] * Fix CLI command ``flexmeasures add forecasts`` [see `PR #2007 `_] * Add missing field documentation for ``aggregate-power`` and ``state-of-charge`` fields, which can be used to reference a sensor on which to record extra scheduling results [see `PR #2003 `_ and `PR #2006 `_]