diff --git a/src/power_grid_model/validation/rules.py b/src/power_grid_model/validation/rules.py index 9e8553787f..b4edd15654 100644 --- a/src/power_grid_model/validation/rules.py +++ b/src/power_grid_model/validation/rules.py @@ -400,7 +400,7 @@ def all_valid_enum_values( was not a valid value in the supplied enum type. """ valid = [nan_type(component, field)] + list(enum) - invalid = np.isin(data[component][field], valid, invert=True) + invalid = np.isin(data[component][field], np.array(valid, dtype=np.int8), invert=True) if invalid.any(): ids = data[component]["id"][invalid].flatten().tolist() return [InvalidEnumValueError(component, field, ids, enum)] diff --git a/tests/unit/validation/test_rules.py b/tests/unit/validation/test_rules.py index c75ddeafe7..e9c6f612e2 100644 --- a/tests/unit/validation/test_rules.py +++ b/tests/unit/validation/test_rules.py @@ -266,6 +266,11 @@ class MyEnum(IntEnum): alpha = 2 bravo = 5 + # TODO replace this hack with some patch to power_grid_meta_data or nan_type + from power_grid_model import power_grid_meta_data + + power_grid_meta_data["input"]["test"] = {"nans": {"value": -128}} + valid = {"test": np.array([(1, 2), (2, 5)], dtype=[("id", "i4"), ("value", "i4")])} errors = all_valid_enum_values(valid, "test", "value", MyEnum) assert not errors @@ -274,6 +279,18 @@ class MyEnum(IntEnum): errors = all_valid_enum_values(invalid, "test", "value", MyEnum) assert len(errors) == 1 assert InvalidEnumValueError("test", "value", [2], MyEnum) in errors + # TODO replace this hack with some patch to power_grid_meta_data or nan_type + del power_grid_meta_data["input"]["test"] + + # try with a real enum LoadGenType + # this is a bug in numpy + from power_grid_model import LoadGenType, initialize_array + + valid = {"sym_load": initialize_array("input", "sym_load", 20)} + valid["sym_load"]["id"] = np.arange(20) + valid["sym_load"]["type"] = 0 + errors = all_valid_enum_values(valid, "sym_load", "type", LoadGenType) + assert not errors def test_all_valid_ids():