Skip to content

Commit

Permalink
fix: more accurate schema validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Jon Hagg committed Mar 10, 2022
1 parent 6c76ea1 commit b240822
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 28 deletions.
5 changes: 5 additions & 0 deletions powersimdata/input/change_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
scale_congested_mesh_branches,
scale_renewable_stubs,
)
from powersimdata.input.changes.electrification import add_electrification
from powersimdata.input.changes.helpers import ordinal
from powersimdata.input.changes.storage import add_storage_capacity
from powersimdata.input.transform_grid import TransformGrid
Expand Down Expand Up @@ -496,6 +497,10 @@ def add_storage_capacity(self, info):
"""
add_storage_capacity(self, info)

def add_electrification(self, kind, info):
"""TODO"""
add_electrification(self, kind, info)

def add_dcline(self, info):
"""Adds HVDC line(s).
Expand Down
31 changes: 15 additions & 16 deletions powersimdata/input/changes/electrification.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,27 @@


def _check_scale_factors(scale_factors):
for sf in scale_factors:
vals = list(sf.values())
if any(v < 0 for v in vals):
raise ValueError("scaling factor must be non negative")
if sum(vals) > 1:
raise ValueError("scaling factors must sum to between 0 and 1")
if not all(isinstance(k, str) for k in scale_factors):
raise ValueError("profile name must be str")
if not all(isinstance(d, (int, float)) for d in scale_factors.values()):
raise ValueError("scale factors must be numeric")
vals = list(scale_factors.values())
if any(v < 0 for v in vals):
raise ValueError("scaling factor must be non negative")
if sum(vals) > 1:
raise ValueError("scaling factors must sum to between 0 and 1")


def _check_zone_scaling(obj, info):
if not all(isinstance(k, str) for k in info):
raise ValueError("unrecognized structure")
raise ValueError("zone name must be str")
if all(isinstance(d, dict) for d in info.values()):
obj._check_zone(info.keys())
_check_scale_factors(list(info.values()))

else:
raise ValueError("zone scaling must be specified via a dict")

def _check_grid_scaling(info):
if not all(isinstance(k, str) for k in info):
raise ValueError("keys must be str")
if not all(isinstance(d, (int, float)) for d in info.values()):
raise ValueError("scale factors must be numeric")
_check_scale_factors([info])
for sf in list(info.values()):
_check_scale_factors(sf)


def add_electrification(obj, kind, info):
Expand All @@ -41,7 +40,7 @@ def add_electrification(obj, kind, info):
zone = info.get("zone", {})
grid = info.get("grid", {})
_check_zone_scaling(obj, zone)
_check_grid_scaling(grid)
_check_scale_factors(grid)

curr = obj.ct.get(kind)
if curr is None:
Expand Down
18 changes: 6 additions & 12 deletions powersimdata/input/changes/tests/test_add_electrification.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,13 @@

from powersimdata.input.change_table import ChangeTable
from powersimdata.input.changes.electrification import (
_check_grid_scaling,
_check_scale_factors,
_check_zone_scaling,
add_electrification,
)
from powersimdata.input.grid import Grid


def test_check_grid():
info = {"tech1": 0.8}
_check_grid_scaling(info)

with pytest.raises(ValueError):
info = {"tech1": 4}
_check_grid_scaling(info)


def test_check_zone():
obj = ChangeTable(Grid("Texas"))
info = {"Coast": {"standard_heat_pump_v1": 0.2}}
Expand All @@ -30,13 +20,17 @@ def test_check_zone():


def test_check_scale_factors():
with pytest.raises(ValueError):
info = {"tech1": "foo"}
_check_scale_factors(info)

info = {"standard_heat_pump_v1": 0.7, "advanced_heat_pump_v2": -3}
with pytest.raises(ValueError):
_check_scale_factors([info])
_check_scale_factors(info)

with pytest.raises(ValueError):
info = {"standard_heat_pump_v1": 0.7, "advanced_heat_pump_v2": 0.8}
_check_scale_factors([info])
_check_scale_factors(info)


def test_add_electrification():
Expand Down

0 comments on commit b240822

Please sign in to comment.