123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import pandas as pd
- from timely_beliefs import utils as tb_utils
- from flexmeasures.data.utils import save_to_db
- from flexmeasures.data.models.data_sources import DataSource
- from flexmeasures.tests.utils import get_test_sensor
- def test_drop_unchanged_beliefs(setup_beliefs, db):
- """Trying to save beliefs that are already in the database shouldn't raise an error.
- Even after updating the belief time, we expect to persist only the older belief time.
- """
- # Set a reference for the number of beliefs stored and their belief times
- sensor = get_test_sensor(db)
- bdf = sensor.search_beliefs(most_recent_beliefs_only=False)
- num_beliefs_before = len(bdf)
- belief_times_before = bdf.belief_times
- # See what happens when storing all existing beliefs verbatim
- save_to_db(bdf)
- # Verify that no new beliefs were saved
- bdf = sensor.search_beliefs(most_recent_beliefs_only=False)
- assert len(bdf) == num_beliefs_before
- # See what happens when storing all beliefs with their belief time updated
- bdf = tb_utils.replace_multi_index_level(
- bdf, "belief_time", bdf.belief_times + pd.Timedelta("1h")
- )
- save_to_db(bdf)
- # Verify that no new beliefs were saved
- bdf = sensor.search_beliefs(most_recent_beliefs_only=False)
- assert len(bdf) == num_beliefs_before
- assert list(bdf.belief_times) == list(belief_times_before)
- def test_do_not_drop_beliefs_copied_by_another_source(setup_beliefs, db):
- """Trying to copy beliefs from one source to another should double the number of beliefs."""
- # Set a reference for the number of beliefs stored
- sensor = get_test_sensor(db)
- bdf = sensor.search_beliefs(most_recent_beliefs_only=False)
- num_beliefs_before = len(bdf)
- # See what happens when storing all belief with their source updated
- new_source = DataSource(name="Not Seita", type="demo script")
- bdf = tb_utils.replace_multi_index_level(
- bdf, "source", pd.Index([new_source] * num_beliefs_before)
- )
- save_to_db(bdf)
- # Verify that all the new beliefs were added
- bdf = sensor.search_beliefs(most_recent_beliefs_only=False)
- num_beliefs_after = len(bdf)
- assert num_beliefs_after == 2 * num_beliefs_before
- def test_do_not_drop_changed_probabilistic_belief(setup_beliefs, db):
- """Trying to save a changed probabilistic belief should result in saving the whole belief.
- For example, given a belief that defines both cp=0.2 and cp=0.5,
- if that belief becomes more certain (e.g. cp=0.3 and cp=0.5),
- we expect to see the full new belief stored, rather than just the cp=0.3 value.
- """
- # Set a reference for the number of beliefs stored
- sensor = get_test_sensor(db)
- bdf = sensor.search_beliefs(source="ENTSO-E", most_recent_beliefs_only=False)
- num_beliefs_before = len(bdf)
- # See what happens when storing a belief with more certainty one hour later
- old_belief = bdf.loc[
- (
- bdf.index.get_level_values("event_start")
- == pd.Timestamp("2021-03-28 16:00:00+00:00")
- )
- & (
- bdf.index.get_level_values("belief_time")
- == pd.Timestamp("2021-03-27 9:00:00+00:00")
- )
- ]
- new_belief = tb_utils.replace_multi_index_level(
- old_belief, "cumulative_probability", pd.Index([0.3, 0.5])
- )
- new_belief = tb_utils.replace_multi_index_level(
- new_belief, "belief_time", new_belief.belief_times + pd.Timedelta("1h")
- )
- save_to_db(new_belief)
- # Verify that the whole probabilistic belief was added
- bdf = sensor.search_beliefs(source="ENTSO-E", most_recent_beliefs_only=False)
- num_beliefs_after = len(bdf)
- assert num_beliefs_after == num_beliefs_before + len(new_belief)
|