feat(forecast): commission corrected Lihrenmoos profile
This commit is contained in:
@@ -9,7 +9,7 @@ from bisect import bisect_right
|
||||
from collections import defaultdict
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from hashlib import sha256
|
||||
from math import isfinite
|
||||
from math import ceil, isfinite
|
||||
from statistics import median
|
||||
from zoneinfo import ZoneInfo
|
||||
import json
|
||||
@@ -34,6 +34,16 @@ def epoch(value):
|
||||
return int(t.timestamp())
|
||||
|
||||
|
||||
def availability_epoch(value):
|
||||
if not isinstance(value, str):
|
||||
raise ValueError('UTC timestamp required')
|
||||
t = datetime.fromisoformat(value.replace('Z', '+00:00'))
|
||||
if t.tzinfo is None or t.utcoffset().total_seconds() != 0:
|
||||
raise ValueError('Explicit UTC timestamp required')
|
||||
# Never claim an input existed before its sub-second observation completed.
|
||||
return int(ceil(t.timestamp()))
|
||||
|
||||
|
||||
def iso(t):
|
||||
return datetime.fromtimestamp(t, UTC).isoformat()
|
||||
|
||||
@@ -479,7 +489,7 @@ def apply_load_forecast(con,plant,dataset,forecast,decision):
|
||||
raise ValueError('No current external SDL request for the persistence scenario')
|
||||
sdl=r['value']*s['factorToW']
|
||||
result=json.loads(canonical(forecast)); result['families']={}
|
||||
result['observedAt']=iso(max(epoch(forecast['observedAt']),model['trainedAt'],last['capturedAt']))
|
||||
result['observedAt']=iso(max(availability_epoch(forecast['observedAt']),model['trainedAt'],last['capturedAt']))
|
||||
for family,old in forecast['families'].items():
|
||||
if family not in FAMILIES: continue
|
||||
points=[]
|
||||
|
||||
Reference in New Issue
Block a user