Files
Enelix-EMS/services/netplan-v4/netplan_v4/forecast_quality.py
T

22 lines
1.1 KiB
Python

"""Minimal validity gates, not a claim of forecast accuracy or model ranking."""
from math import isfinite
def assess_family(family, *, minimum_steps=3):
points=family.get('points',[])
if len(points)<minimum_steps:
return {'valid':False,'reason':'Forecast has too few intervals'}
loads=[]
for point in points:
for key in ('loadW','pvW'):
value=point.get(key)
if isinstance(value,bool) or not isinstance(value,(int,float)) or not isfinite(value) or value<0:
return {'valid':False,'reason':'Forecast contains missing or invalid power'}
loads.append(point['loadW'])
# A PV-only plant or confirmed shutdown may legitimately forecast zero load.
# It must be explicit; missing observations filled with zero are not savings.
if max(loads)==0 and family.get('zeroLoadConfirmed') is not True:
return {'valid':False,'reason':'Unconfirmed all-zero load forecast; likely missing data, not zero electricity costs'}
return {'valid':True,'reason':None,'loadMaximumW':max(loads),
'loadZeroFraction':sum(v==0 for v in loads)/len(loads)}