diff --git a/powersimdata/input/change_table.py b/powersimdata/input/change_table.py index ff75f6da8..105d9b57f 100644 --- a/powersimdata/input/change_table.py +++ b/powersimdata/input/change_table.py @@ -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 @@ -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). diff --git a/powersimdata/input/changes/electrification.py b/powersimdata/input/changes/electrification.py index 1649317f3..93d77df4a 100644 --- a/powersimdata/input/changes/electrification.py +++ b/powersimdata/input/changes/electrification.py @@ -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): @@ -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: diff --git a/powersimdata/input/changes/tests/test_add_electrification.py b/powersimdata/input/changes/tests/test_add_electrification.py index 5443ce8e0..bc024b493 100644 --- a/powersimdata/input/changes/tests/test_add_electrification.py +++ b/powersimdata/input/changes/tests/test_add_electrification.py @@ -2,7 +2,6 @@ from powersimdata.input.change_table import ChangeTable from powersimdata.input.changes.electrification import ( - _check_grid_scaling, _check_scale_factors, _check_zone_scaling, add_electrification, @@ -10,15 +9,6 @@ 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}} @@ -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():