@@ -15,12 +15,14 @@ def _add_forecast_value(
1515 horizon_minutes : Optional [int ] = None ,
1616 created_utc : Optional [dt .datetime ] = None ,
1717 model_name : Optional [str ] = None ,
18+ probabilistic_values : Optional [dict ] = None ,
1819):
1920 fv = ForecastValueSQL (
2021 forecast_uuid = forecast .forecast_uuid ,
2122 forecast_power_kw = power ,
2223 start_utc = ts ,
2324 end_utc = ts + dt .timedelta (minutes = 5 ),
25+ probabilistic_values = probabilistic_values if probabilistic_values is not None else {},
2426 )
2527 if horizon_minutes :
2628 fv .forecast_horizon_minutes = horizon_minutes
@@ -367,3 +369,64 @@ def test_get_latest_forecast_values_model_name(db_session, sites):
367369 )
368370 assert len (latest_forecast ) == 2
369371 assert len (latest_forecast [s1 ]) == 0
372+
373+
374+ def test_get_latest_forecast_values_probabilistic_value_limit2 (db_session , sites ):
375+ # Retrieve two sites for testing (limit(2))
376+ site_uuids = [site .site_uuid for site in db_session .query (SiteSQL .site_uuid ).limit (2 )]
377+ site1 , site2 = site_uuids
378+
379+ forecast_version = "123"
380+
381+ # Create a forecast for each site
382+ forecast1 = ForecastSQL (
383+ site_uuid = site1 ,
384+ forecast_version = forecast_version ,
385+ timestamp_utc = dt .datetime (2000 , 1 , 1 ),
386+ )
387+ forecast2 = ForecastSQL (
388+ site_uuid = site2 ,
389+ forecast_version = forecast_version ,
390+ timestamp_utc = dt .datetime (2000 , 1 , 1 ),
391+ )
392+ db_session .add_all ([forecast1 , forecast2 ])
393+ db_session .commit ()
394+
395+ d0 = dt .datetime (2000 , 1 , 1 , 0 , tzinfo = dt .timezone .utc )
396+
397+ # For site1: Add a forecast value with explicit probabilistic_values provided
398+ prob_values = {"p10" : 10 , "p50" : 50 , "p90" : 90 }
399+ _add_forecast_value (
400+ db_session , forecast1 , power = 1.0 , ts = d0 , horizon_minutes = 0 , probabilistic_values = prob_values
401+ )
402+
403+ # For site2: Add a forecast value without providing probabilistic_values (defaults to {})
404+ _add_forecast_value (
405+ db_session ,
406+ forecast2 ,
407+ power = 2.0 ,
408+ ts = d0 ,
409+ horizon_minutes = 0 ,
410+ )
411+
412+ db_session .commit ()
413+
414+ # Retrieve the latest forecast values starting from d0 for both sites
415+ latest_forecast = get_latest_forecast_values_by_site (db_session , site_uuids , d0 )
416+
417+ # Verify that forecast values exist for both sites
418+ assert site1 in latest_forecast
419+ assert site2 in latest_forecast
420+ # Expect one forecast value for each site
421+ assert len (latest_forecast [site1 ]) == 1
422+ assert len (latest_forecast [site2 ]) == 1
423+
424+ # Retrieve the forecast values for each site
425+ fv_site1 = latest_forecast [site1 ][0 ]
426+ fv_site2 = latest_forecast [site2 ][0 ]
427+
428+ # Assert that site1's forecast value has the explicit probabilistic values provided
429+ assert fv_site1 .probabilistic_values == prob_values
430+
431+ # Assert that site2's forecast value uses the default (empty dictionary)
432+ assert fv_site2 .probabilistic_values == {}
0 commit comments