Skip to content

Commit c725127

Browse files
Issue/blend negative values (#165)
* TDD: add test for negtaive values * fix for negative values * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent f9fb45a commit c725127

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

nowcasting_datamodel/read/blend.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,14 @@ def get_blend_forecast_values_latest(
208208
forecast_values = []
209209
logger.debug(forecast_values_blended)
210210
for i, row in forecast_values_blended.iterrows():
211+
# make sure we don't have negative values
212+
expected_power_generation_megawatts = row.expected_power_generation_megawatts
213+
if expected_power_generation_megawatts < 0:
214+
expected_power_generation_megawatts = 0
215+
211216
forecast_value = ForecastValue(
212217
target_time=row.target_time,
213-
expected_power_generation_megawatts=row.expected_power_generation_megawatts,
218+
expected_power_generation_megawatts=expected_power_generation_megawatts,
214219
)
215220
forecast_value._adjust_mw = row.adjust_mw
216221
forecast_values.append(forecast_value)

tests/read/test_blend.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,47 @@ def test_get_blend_forecast_values_latest_two_model_read_two(db_session):
207207
assert forecast_values_read[0]._adjust_mw == 0
208208
assert forecast_values_read[2]._adjust_mw == 50
209209
assert forecast_values_read[3]._adjust_mw == 100
210+
211+
212+
@freeze_time("2023-01-01 00:00:01")
213+
def test_get_blend_forecast_values_latest_negative(db_session):
214+
model_1 = get_model(session=db_session, name="test_1", version="0.0.1")
215+
model_2 = get_model(session=db_session, name="test_2", version="0.0.1")
216+
217+
for model in [model_1, model_2]:
218+
f1 = make_fake_forecasts(gsp_ids=[1, 2], session=db_session)
219+
f1[0].historic = True
220+
221+
if model == model_1:
222+
power = -1
223+
else:
224+
power = -2
225+
226+
forecast_horizon_minutes = [0, 30, 8 * 30, 15 * 30]
227+
f1[0].forecast_values_latest = [
228+
ForecastValueLatestSQL(
229+
gsp_id=1,
230+
expected_power_generation_megawatts=power,
231+
target_time=datetime(2023, 1, 1, tzinfo=timezone.utc) + timedelta(minutes=t),
232+
model_id=model.id,
233+
adjust_mw=1,
234+
)
235+
for t in forecast_horizon_minutes
236+
]
237+
238+
db_session.add_all(f1)
239+
assert len(db_session.query(ForecastValueLatestSQL).all()) == 8
240+
241+
forecast_values_read = get_blend_forecast_values_latest(
242+
session=db_session,
243+
gsp_id=f1[0].location.gsp_id,
244+
start_datetime=datetime(2023, 1, 1, 0, 0, tzinfo=timezone.utc),
245+
model_names=["test_1", "test_2"],
246+
)
247+
248+
assert len(forecast_values_read) == 4
249+
assert forecast_values_read[0].target_time == f1[0].forecast_values_latest[0].target_time
250+
assert forecast_values_read[0].expected_power_generation_megawatts == 0
251+
assert forecast_values_read[1].expected_power_generation_megawatts == 0
252+
assert forecast_values_read[2].expected_power_generation_megawatts == 0
253+
assert forecast_values_read[3].expected_power_generation_megawatts == 0

0 commit comments

Comments
 (0)