Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions src/power_grid_model_ds/_core/model/dtypes/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
#
# 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

Check failure on line 15 in src/power_grid_model_ds/_core/model/dtypes/utils.py

View workflow job for this annotation

GitHub Actions / check-code-quality / check-code-quality (3.12)

Ruff (I001)

src/power_grid_model_ds/_core/model/dtypes/utils.py:5:1: I001 Import block is un-sorted or un-formatted

Check failure on line 15 in src/power_grid_model_ds/_core/model/dtypes/utils.py

View workflow job for this annotation

GitHub Actions / check-code-quality / check-code-quality (3.14)

Ruff (I001)

src/power_grid_model_ds/_core/model/dtypes/utils.py:5:1: I001 Import block is un-sorted or un-formatted

Check failure on line 15 in src/power_grid_model_ds/_core/model/dtypes/utils.py

View workflow job for this annotation

GitHub Actions / check-code-quality / check-code-quality (3.13)

Ruff (I001)

src/power_grid_model_ds/_core/model/dtypes/utils.py:5:1: I001 Import block is un-sorted or un-formatted

_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")
4 changes: 2 additions & 2 deletions src/power_grid_model_ds/_core/utils/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

"""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

Check failure on line 10 in src/power_grid_model_ds/_core/utils/misc.py

View workflow job for this annotation

GitHub Actions / check-code-quality / check-code-quality (3.12)

Ruff (I001)

src/power_grid_model_ds/_core/utils/misc.py:7:1: I001 Import block is un-sorted or un-formatted

Check failure on line 10 in src/power_grid_model_ds/_core/utils/misc.py

View workflow job for this annotation

GitHub Actions / check-code-quality / check-code-quality (3.14)

Ruff (I001)

src/power_grid_model_ds/_core/utils/misc.py:7:1: I001 Import block is un-sorted or un-formatted

Check failure on line 10 in src/power_grid_model_ds/_core/utils/misc.py

View workflow job for this annotation

GitHub Actions / check-code-quality / check-code-quality (3.13)

Ruff (I001)

src/power_grid_model_ds/_core/utils/misc.py:7:1: I001 Import block is un-sorted or un-formatted


def is_sequence(seq):
Expand All @@ -23,7 +23,7 @@
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
"""
Expand Down
Loading