From 59f406103ce6d5bc66cf533cfe84a297832b7844 Mon Sep 17 00:00:00 2001 From: Thijs Baaijen <13253091+Thijss@users.noreply.github.com> Date: Mon, 19 Jan 2026 14:56:08 +0100 Subject: [PATCH 1/2] Add typehint Signed-off-by: Thijs Baaijen <13253091+Thijss@users.noreply.github.com> --- src/power_grid_model_ds/_core/utils/misc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/power_grid_model_ds/_core/utils/misc.py b/src/power_grid_model_ds/_core/utils/misc.py index bf64df42..8e4e3b64 100644 --- a/src/power_grid_model_ds/_core/utils/misc.py +++ b/src/power_grid_model_ds/_core/utils/misc.py @@ -5,7 +5,7 @@ """Misc utils""" from collections.abc import Sequence -from typing import Type, get_type_hints +from typing import Type, get_type_hints, Any import numpy as np @@ -23,7 +23,7 @@ def is_sequence(seq): return isinstance(seq, Sequence) -def get_inherited_attrs(cls: Type, *private_attributes): +def get_inherited_attrs(cls: Type, *private_attributes) -> dict[str, Any]: """ Get the attribute from the object and all its parents """ From 72f6894f001d562a6d6231d1f175a4d4eed42007 Mon Sep 17 00:00:00 2001 From: Thijs Baaijen <13253091+Thijss@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:14:52 +0100 Subject: [PATCH 2/2] Add to_pgm_input_array Signed-off-by: Thijs Baaijen <13253091+Thijss@users.noreply.github.com> --- .../_core/model/dtypes/utils.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/power_grid_model_ds/_core/model/dtypes/utils.py diff --git a/src/power_grid_model_ds/_core/model/dtypes/utils.py b/src/power_grid_model_ds/_core/model/dtypes/utils.py new file mode 100644 index 00000000..97671ee7 --- /dev/null +++ b/src/power_grid_model_ds/_core/model/dtypes/utils.py @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: Contributors to the Power Grid Model project +# +# SPDX-License-Identifier: MPL-2.0 + +from numpy.typing import NDArray + +from power_grid_model_ds._core.model.arrays.base.array import FancyArray +from power_grid_model_ds._core.model.dtypes.appliances import SymLoad, SymGen, Source +from power_grid_model_ds._core.model.dtypes.branches import Link, Line, Transformer, GenericBranch, AsymLine, \ + ThreeWindingTransformer +from power_grid_model_ds._core.model.dtypes.nodes import Node +from power_grid_model_ds._core.model.dtypes.regulators import TransformerTapRegulator +from power_grid_model_ds._core.model.dtypes.sensors import SymPowerSensor, SymVoltageSensor, SymCurrentSensor, \ + AsymPowerSensor, AsymVoltageSensor, AsymCurrentSensor +from power_grid_model_ds._core.utils.misc import get_inherited_attrs + +_PGM_DTYPES = ( + SymLoad, + SymGen, + Source, + Node, + Link, + Line, + Transformer, + GenericBranch, + AsymLine, + ThreeWindingTransformer, + TransformerTapRegulator, + SymPowerSensor, + SymVoltageSensor, + SymCurrentSensor, + AsymPowerSensor, + AsymVoltageSensor, + AsymCurrentSensor +) + + +def to_pgm_input_array(array: FancyArray) -> NDArray: + """Convert to corresponding pgm array""" + for dtype in _PGM_DTYPES: + # Note: opted for issubclass instead of isinstance so .data is still understood by type checker + if issubclass(array.__class__, dtype): + return array.data[list(get_inherited_attrs(dtype).keys())] + raise TypeError(f"{array.__class__.__name__} is not a PGM array") \ No newline at end of file