power-grid-model 1.12.69__py3-none-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of power-grid-model might be problematic. Click here for more details.

Files changed (65) hide show
  1. power_grid_model/__init__.py +54 -0
  2. power_grid_model/_core/__init__.py +3 -0
  3. power_grid_model/_core/buffer_handling.py +493 -0
  4. power_grid_model/_core/data_handling.py +195 -0
  5. power_grid_model/_core/data_types.py +143 -0
  6. power_grid_model/_core/dataset_definitions.py +109 -0
  7. power_grid_model/_core/enum.py +226 -0
  8. power_grid_model/_core/error_handling.py +206 -0
  9. power_grid_model/_core/errors.py +130 -0
  10. power_grid_model/_core/index_integer.py +17 -0
  11. power_grid_model/_core/options.py +71 -0
  12. power_grid_model/_core/power_grid_core.py +563 -0
  13. power_grid_model/_core/power_grid_dataset.py +535 -0
  14. power_grid_model/_core/power_grid_meta.py +257 -0
  15. power_grid_model/_core/power_grid_model.py +969 -0
  16. power_grid_model/_core/power_grid_model_c/__init__.py +3 -0
  17. power_grid_model/_core/power_grid_model_c/get_pgm_dll_path.py +63 -0
  18. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/basics.h +255 -0
  19. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/buffer.h +108 -0
  20. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/dataset.h +316 -0
  21. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/dataset_definitions.h +1052 -0
  22. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/handle.h +99 -0
  23. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/meta_data.h +189 -0
  24. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/model.h +125 -0
  25. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/options.h +142 -0
  26. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/serialization.h +118 -0
  27. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c.h +36 -0
  28. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/basics.hpp +65 -0
  29. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/buffer.hpp +61 -0
  30. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/dataset.hpp +220 -0
  31. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/handle.hpp +108 -0
  32. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/meta_data.hpp +84 -0
  33. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/model.hpp +63 -0
  34. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/options.hpp +52 -0
  35. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/serialization.hpp +124 -0
  36. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/utils.hpp +81 -0
  37. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp.hpp +19 -0
  38. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelConfig.cmake +37 -0
  39. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelConfigVersion.cmake +65 -0
  40. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelTargets-release.cmake +19 -0
  41. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelTargets.cmake +144 -0
  42. power_grid_model/_core/power_grid_model_c/lib64/libpower_grid_model_c.so +0 -0
  43. power_grid_model/_core/power_grid_model_c/lib64/libpower_grid_model_c.so.1.12.69 +0 -0
  44. power_grid_model/_core/power_grid_model_c/share/LICENSE +292 -0
  45. power_grid_model/_core/power_grid_model_c/share/README.md +15 -0
  46. power_grid_model/_core/serialization.py +317 -0
  47. power_grid_model/_core/typing.py +20 -0
  48. power_grid_model/_core/utils.py +798 -0
  49. power_grid_model/data_types.py +321 -0
  50. power_grid_model/enum.py +27 -0
  51. power_grid_model/errors.py +37 -0
  52. power_grid_model/py.typed +3 -0
  53. power_grid_model/typing.py +43 -0
  54. power_grid_model/utils.py +473 -0
  55. power_grid_model/validation/__init__.py +25 -0
  56. power_grid_model/validation/_rules.py +1171 -0
  57. power_grid_model/validation/_validation.py +1172 -0
  58. power_grid_model/validation/assertions.py +93 -0
  59. power_grid_model/validation/errors.py +602 -0
  60. power_grid_model/validation/utils.py +313 -0
  61. power_grid_model-1.12.69.dist-info/METADATA +178 -0
  62. power_grid_model-1.12.69.dist-info/RECORD +65 -0
  63. power_grid_model-1.12.69.dist-info/WHEEL +6 -0
  64. power_grid_model-1.12.69.dist-info/entry_points.txt +3 -0
  65. power_grid_model-1.12.69.dist-info/licenses/LICENSE +292 -0
@@ -0,0 +1,195 @@
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+
5
+ """
6
+ Data handling
7
+ """
8
+
9
+ from typing import Literal, overload
10
+
11
+ import numpy as np
12
+
13
+ from power_grid_model._core.data_types import (
14
+ BatchDataset,
15
+ Dataset,
16
+ DenseBatchArray,
17
+ SingleArray,
18
+ SingleColumnarData,
19
+ SingleDataset,
20
+ )
21
+ from power_grid_model._core.dataset_definitions import ComponentType, ComponentTypeVar, DatasetType
22
+ from power_grid_model._core.enum import CalculationType, ComponentAttributeFilterOptions
23
+ from power_grid_model._core.errors import PowerGridUnreachableHitError
24
+ from power_grid_model._core.power_grid_dataset import CConstDataset, CMutableDataset
25
+ from power_grid_model._core.power_grid_meta import initialize_array, power_grid_meta_data
26
+ from power_grid_model._core.typing import ComponentAttributeMapping, ComponentAttributeMappingDict
27
+ from power_grid_model._core.utils import process_data_filter
28
+ from power_grid_model.data_types import DenseBatchColumnarData
29
+
30
+
31
+ def get_output_type(*, calculation_type: CalculationType, symmetric: bool) -> DatasetType:
32
+ """
33
+ Get the output type based on the provided arguments.
34
+
35
+ Args:
36
+ calculation_type:
37
+ request the output type for a specific calculation type (power_flow, state_estimation, ...)
38
+ symmetric:
39
+ True: three-phase symmetric calculation, even for asymmetric loads/generations
40
+ False: three-phase asymmetric calculation
41
+
42
+ Returns:
43
+ the output type that fits the format requested by the output type
44
+ """
45
+ if calculation_type in (CalculationType.power_flow, CalculationType.state_estimation):
46
+ return DatasetType.sym_output if symmetric else DatasetType.asym_output
47
+
48
+ if calculation_type == CalculationType.short_circuit:
49
+ return DatasetType.sc_output
50
+
51
+ raise NotImplementedError
52
+
53
+
54
+ def prepare_input_view(input_data: SingleDataset) -> CConstDataset:
55
+ """
56
+ Create a view of the input data in a format compatible with the PGM core libary.
57
+
58
+ Args:
59
+ input_data:
60
+ the input data to create the view from
61
+
62
+ Returns:
63
+ instance of CConstDataset ready to be fed into C API
64
+ """
65
+ return CConstDataset(input_data, dataset_type=DatasetType.input)
66
+
67
+
68
+ def prepare_update_view(update_data: Dataset) -> CConstDataset:
69
+ """
70
+ Create a view of the update data, or an empty view if not provided, in a format compatible with the PGM core libary.
71
+
72
+ Args:
73
+ update_data:
74
+ the update data to create the view from. Defaults to None
75
+
76
+ Returns:
77
+ instance of CConstDataset ready to be fed into C API
78
+ """
79
+ return CConstDataset(update_data, dataset_type=DatasetType.update)
80
+
81
+
82
+ def prepare_output_view(output_data: Dataset, output_type: DatasetType) -> CMutableDataset:
83
+ """
84
+ create a view of the output data in a format compatible with the PGM core libary.
85
+
86
+ Args:
87
+ output_data:
88
+ the output data to create the view from
89
+ output_type:
90
+ the output type of the output_data
91
+
92
+ Returns:
93
+ instance of CMutableDataset ready to be fed into C API
94
+ """
95
+ return CMutableDataset(output_data, dataset_type=output_type)
96
+
97
+
98
+ @overload
99
+ def create_output_data(
100
+ output_component_types: None | set[ComponentTypeVar] | list[ComponentTypeVar],
101
+ output_type: DatasetType,
102
+ all_component_count: dict[ComponentType, int],
103
+ is_batch: Literal[False],
104
+ batch_size: int,
105
+ ) -> dict[ComponentType, SingleArray]: ...
106
+ @overload
107
+ def create_output_data(
108
+ output_component_types: None | set[ComponentTypeVar] | list[ComponentTypeVar],
109
+ output_type: DatasetType,
110
+ all_component_count: dict[ComponentType, int],
111
+ is_batch: Literal[True],
112
+ batch_size: int,
113
+ ) -> dict[ComponentType, DenseBatchArray]: ...
114
+ @overload
115
+ def create_output_data(
116
+ output_component_types: ComponentAttributeFilterOptions,
117
+ output_type: DatasetType,
118
+ all_component_count: dict[ComponentType, int],
119
+ is_batch: Literal[False],
120
+ batch_size: int,
121
+ ) -> dict[ComponentType, SingleColumnarData]: ...
122
+ @overload
123
+ def create_output_data(
124
+ output_component_types: ComponentAttributeFilterOptions,
125
+ output_type: DatasetType,
126
+ all_component_count: dict[ComponentType, int],
127
+ is_batch: Literal[True],
128
+ batch_size: int,
129
+ ) -> dict[ComponentType, DenseBatchColumnarData]: ...
130
+ @overload
131
+ def create_output_data(
132
+ output_component_types: ComponentAttributeMappingDict,
133
+ output_type: DatasetType,
134
+ all_component_count: dict[ComponentType, int],
135
+ is_batch: Literal[False],
136
+ batch_size: int,
137
+ ) -> SingleDataset: ...
138
+ @overload
139
+ def create_output_data(
140
+ output_component_types: ComponentAttributeMappingDict,
141
+ output_type: DatasetType,
142
+ all_component_count: dict[ComponentType, int],
143
+ is_batch: Literal[True],
144
+ batch_size: int,
145
+ ) -> BatchDataset: ...
146
+ def create_output_data(
147
+ output_component_types: ComponentAttributeMapping,
148
+ output_type: DatasetType,
149
+ all_component_count: dict[ComponentType, int],
150
+ is_batch: bool,
151
+ batch_size: int,
152
+ ) -> Dataset:
153
+ """
154
+ Create the output dataset based on component and batch size from the model; and output attributes requested by user.
155
+
156
+ Args:
157
+ output_component_types (ComponentAttributeMapping):
158
+ the output components the user seeks to extract
159
+ output_type:
160
+ the type of output that the user will see (as per the calculation options)
161
+ all_component_count:
162
+ the amount of components in the grid (as per the input data)
163
+ is_batch:
164
+ if the dataset is batch
165
+ batch_size:
166
+ the batch size
167
+
168
+ Returns:
169
+ Dataset: output dataset
170
+ """
171
+ processed_output_types = process_data_filter(output_type, output_component_types, list(all_component_count.keys()))
172
+
173
+ all_component_count = {k: v for k, v in all_component_count.items() if k in processed_output_types}
174
+
175
+ # create result dataset
176
+ result_dict: Dataset = {}
177
+
178
+ for name, count in all_component_count.items():
179
+ shape: tuple[int, int] | int = (batch_size, count) if is_batch else count
180
+
181
+ requested_component = processed_output_types[name]
182
+ dtype = power_grid_meta_data[output_type][name].dtype
183
+ if dtype.names is None:
184
+ raise PowerGridUnreachableHitError
185
+ if requested_component is None:
186
+ result_dict[name] = initialize_array(output_type, name, shape=shape, empty=True)
187
+ elif requested_component in [
188
+ ComponentAttributeFilterOptions.everything,
189
+ ComponentAttributeFilterOptions.relevant,
190
+ ]:
191
+ result_dict[name] = {attr: np.empty(shape=shape, dtype=dtype[attr]) for attr in dtype.names}
192
+ elif isinstance(requested_component, list | set):
193
+ result_dict[name] = {attr: np.empty(shape=shape, dtype=dtype[attr]) for attr in requested_component}
194
+
195
+ return result_dict
@@ -0,0 +1,143 @@
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+
5
+ """
6
+ Data types involving PGM datasets.
7
+
8
+ Data types for library-internal use. In an attempt to clarify type hints, some types
9
+ have been defined and explained in this file.
10
+ """
11
+
12
+ from typing import TypeAlias, TypedDict, TypeVar
13
+
14
+ import numpy as np
15
+
16
+ from power_grid_model._core.dataset_definitions import ComponentType, ComponentTypeVar
17
+
18
+ SingleArray: TypeAlias = np.ndarray
19
+
20
+ AttributeType: TypeAlias = str
21
+
22
+ SingleColumn: TypeAlias = np.ndarray
23
+
24
+ DenseBatchArray: TypeAlias = np.ndarray
25
+
26
+ SingleColumnarData = dict[AttributeType, SingleColumn]
27
+
28
+ _SingleComponentData = TypeVar("_SingleComponentData", SingleArray, SingleColumnarData) # deduction helper
29
+ SingleComponentData = SingleArray | SingleColumnarData
30
+
31
+ SingleRowBasedDataset = dict[ComponentTypeVar, SingleArray]
32
+ SingleColumnarDataset = dict[ComponentTypeVar, SingleColumnarData]
33
+ SingleDataset = dict[ComponentTypeVar, _SingleComponentData]
34
+
35
+ BatchList = list[SingleDataset]
36
+
37
+ BatchColumn: TypeAlias = np.ndarray
38
+
39
+ DenseBatchColumnarData = dict[AttributeType, BatchColumn]
40
+
41
+ IndexPointer: TypeAlias = np.ndarray
42
+
43
+
44
+ class SparseBatchColumnarData(TypedDict):
45
+ """
46
+ Sparse batch columnar data is a dictionary containing the keys `indptr` and `data`.
47
+
48
+ - data: a :class:`SingleColumnarData`. The exact supported attribute columns depend on the component type.
49
+ - indptr: an :class:`IndexPointer` representing the start and end indices for each batch scenario.
50
+
51
+ - Examples:
52
+
53
+ - structure: {"indptr": :class:`IndexPointer`, "data": :class:`SingleColumnarData`}
54
+ - concrete example: {"indptr": [0, 2, 2, 3], "data": {"id": [0, 1, 0], "status": [1, 1, 0]}}
55
+
56
+ - the scenario 0 sets the status of components with ids 0 and 1 to 1
57
+ (and keeps defaults for other components)
58
+ - scenario 1 keeps the default values for all components
59
+ - scenario 2 sets the status of component with id 0 to 0 (and keeps defaults for other components)
60
+ """
61
+
62
+ indptr: IndexPointer
63
+ data: SingleColumnarData
64
+
65
+
66
+ class SparseBatchArray(TypedDict):
67
+ """
68
+ A sparse batch array is a dictionary containing the keys `indptr` and `data`.
69
+
70
+ - data: a :class:`SingleArray`. The exact dtype depends on the type of component.
71
+ - indptr: an :class:`IndexPointer` representing the start and end indices for each batch scenario.
72
+
73
+ - Examples:
74
+
75
+ - structure: {"indptr": :class:`IndexPointer`, "data": :class:`SingleArray`}
76
+ - concrete example: {"indptr": [0, 2, 2, 3], "data": [(0, 1, 1), (1, 1, 1), (0, 0, 0)]}
77
+
78
+ - the scenario 0 sets the statuses of components with ids 0 and 1 to 1
79
+ (and keeps defaults for other components)
80
+ - scenario 1 keeps the default values for all components
81
+ - scenario 2 sets the statuses of component with id 0 to 0 (and keeps defaults for other components)
82
+ """
83
+
84
+ indptr: IndexPointer
85
+ data: SingleArray
86
+
87
+
88
+ SparseBatchData = SparseBatchArray | SparseBatchColumnarData
89
+
90
+ SparseDataComponentType: TypeAlias = str
91
+
92
+ BatchColumnarData = DenseBatchColumnarData | SparseBatchColumnarData
93
+
94
+ ColumnarData = SingleColumnarData | BatchColumnarData
95
+ BatchArray = DenseBatchArray | SparseBatchArray
96
+
97
+
98
+ BatchComponentData = BatchArray | BatchColumnarData
99
+
100
+ _BatchComponentData = TypeVar("_BatchComponentData", BatchArray, BatchColumnarData) # deduction helper
101
+
102
+
103
+ BatchDataset = dict[ComponentTypeVar, _BatchComponentData]
104
+
105
+
106
+ DataArray = SingleArray | BatchArray
107
+
108
+
109
+ _ComponentData = TypeVar("_ComponentData", SingleComponentData, BatchComponentData) # deduction helper
110
+ ComponentData = DataArray | ColumnarData
111
+
112
+ Dataset = dict[ComponentTypeVar, _ComponentData]
113
+
114
+
115
+ DenseBatchData = DenseBatchArray | DenseBatchColumnarData
116
+
117
+ # overloads that only match on latest PGM type
118
+ SingleRowBasedOutputDataset = dict[ComponentType, SingleArray]
119
+ SingleColumnarOutputDataset = dict[ComponentType, SingleColumnarData]
120
+ SingleOutputDataset = dict[ComponentType, SingleComponentData]
121
+ DenseBatchRowBasedOutputDataset = dict[ComponentType, DenseBatchArray]
122
+ DenseBatchColumnarOutputDataset = dict[ComponentType, DenseBatchColumnarData]
123
+ DenseBatchOutputDataset = dict[ComponentType, DenseBatchData]
124
+ OutputDataset = dict[ComponentType, ComponentData]
125
+
126
+
127
+ NominalValue = int
128
+
129
+ RealValue = float
130
+
131
+ AsymValue = tuple[RealValue, RealValue, RealValue]
132
+
133
+ AttributeValue = RealValue | NominalValue | AsymValue
134
+
135
+ Component = dict[AttributeType, AttributeValue | str]
136
+
137
+ ComponentList = list[Component]
138
+
139
+ SinglePythonDataset = dict[ComponentTypeVar, ComponentList]
140
+
141
+ BatchPythonDataset = list[SinglePythonDataset]
142
+
143
+ PythonDataset = SinglePythonDataset | BatchPythonDataset
@@ -0,0 +1,109 @@
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+
5
+ """Data types for power grid model dataset and component types."""
6
+
7
+ # This file is automatically generated. DO NOT modify it manually!
8
+
9
+ from collections.abc import Mapping
10
+ from enum import Enum, EnumMeta
11
+ from typing import Any, TypeAlias, TypeVar
12
+
13
+ # fmt: off
14
+
15
+ class _MetaEnum(EnumMeta):
16
+ def __contains__(cls, member):
17
+ """
18
+ Check if member is part of the Enum.
19
+
20
+ Args:
21
+ member: Member to check.
22
+
23
+ Returns:
24
+ bool: True if the member is part of the Enum, False otherwise.
25
+ """
26
+ return member in cls.__members__
27
+
28
+
29
+ class DatasetType(str, Enum, metaclass=_MetaEnum):
30
+ """
31
+ A DatasetType is the type of a :class:`Dataset` in power grid model.
32
+
33
+ - Examples:
34
+
35
+ - DatasetType.input = "input"
36
+ - DatasetType.update = "update"
37
+ """
38
+
39
+ input = "input"
40
+ sym_output = "sym_output"
41
+ asym_output = "asym_output"
42
+ update = "update"
43
+ sc_output = "sc_output"
44
+
45
+
46
+ class ComponentType(str, Enum, metaclass=_MetaEnum):
47
+ """
48
+ A ComponentType is the type of a grid component.
49
+
50
+ - Examples:
51
+
52
+ - ComponentType.node = "node"
53
+ - ComponentType.line = "line"
54
+ """
55
+
56
+ node = "node"
57
+ line = "line"
58
+ asym_line = "asym_line"
59
+ link = "link"
60
+ generic_branch = "generic_branch"
61
+ transformer = "transformer"
62
+ transformer_tap_regulator = "transformer_tap_regulator"
63
+ three_winding_transformer = "three_winding_transformer"
64
+ sym_load = "sym_load"
65
+ sym_gen = "sym_gen"
66
+ asym_load = "asym_load"
67
+ asym_gen = "asym_gen"
68
+ shunt = "shunt"
69
+ source = "source"
70
+ sym_voltage_sensor = "sym_voltage_sensor"
71
+ asym_voltage_sensor = "asym_voltage_sensor"
72
+ sym_power_sensor = "sym_power_sensor"
73
+ asym_power_sensor = "asym_power_sensor"
74
+ sym_current_sensor = "sym_current_sensor"
75
+ asym_current_sensor = "asym_current_sensor"
76
+ fault = "fault"
77
+
78
+
79
+ DatasetTypeLike: TypeAlias = DatasetType | str
80
+ DatasetTypeVar = TypeVar("DatasetTypeVar", bound=DatasetTypeLike) # helper used for type deduction
81
+
82
+ ComponentTypeLike: TypeAlias = ComponentType | str
83
+ ComponentTypeVar = TypeVar("ComponentTypeVar", bound=ComponentTypeLike) # helper used for type deduction
84
+
85
+
86
+ def _str_to_datatype(data_type: DatasetTypeLike) -> DatasetType:
87
+ """Helper function to transform data_type str to DatasetType."""
88
+ if isinstance(data_type, DatasetType):
89
+ return data_type
90
+ return DatasetType[data_type]
91
+
92
+
93
+ def _map_to_datatypes(data: Mapping[DatasetTypeVar, Any]) -> dict[DatasetType, Any]:
94
+ """Helper function to map datatype str keys to DatasetType."""
95
+ return {_str_to_datatype(key): value for key, value in data.items()}
96
+
97
+
98
+ def _str_to_component_type(component: ComponentTypeLike) -> ComponentType:
99
+ """Helper function to transform component str to ComponentType."""
100
+ if isinstance(component, ComponentType):
101
+ return component
102
+ return ComponentType[component]
103
+
104
+
105
+ def _map_to_component_types(data: Mapping[ComponentTypeVar, Any]) -> dict[ComponentType, Any]:
106
+ """Helper function to map componenttype str keys to ComponentType."""
107
+ return {_str_to_component_type(key): value for key, value in data.items()}
108
+
109
+ # fmt: on
@@ -0,0 +1,226 @@
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+
5
+ """
6
+ Common enumerations for library-internal use.
7
+
8
+ Note: these enumeration match the C++ arithmetic core, so don't change the values unless you change them in C++ as well
9
+
10
+ """
11
+
12
+ from enum import IntEnum
13
+
14
+ # Value names are defined in lower case instead of upper case
15
+
16
+
17
+ class CalculationType(IntEnum):
18
+ """Calculation Types"""
19
+
20
+ power_flow = 0
21
+ state_estimation = 1
22
+ short_circuit = 2
23
+
24
+
25
+ class CalculationMethod(IntEnum):
26
+ """Calculation Methods"""
27
+
28
+ linear = 0
29
+ newton_raphson = 1
30
+ iterative_linear = 2
31
+ iterative_current = 3
32
+ linear_current = 4
33
+ iec60909 = 5
34
+
35
+
36
+ class TapChangingStrategy(IntEnum):
37
+ """Tap Changing Strategies"""
38
+
39
+ disabled = 0
40
+ """
41
+ Disable automatic tap adjustment
42
+ """
43
+ any_valid_tap = 1
44
+ """
45
+ Adjust tap position automatically; optimize for any value in the voltage band
46
+ """
47
+ min_voltage_tap = 2
48
+ """
49
+ Adjust tap position automatically; optimize for the lower end of the voltage band
50
+ """
51
+ max_voltage_tap = 3
52
+ """
53
+ Adjust tap position automatically; optimize for the higher end of the voltage band
54
+ """
55
+ fast_any_tap = 4
56
+ """
57
+ Adjust tap position automatically; optimize for any value in the voltage band; binary search
58
+ """
59
+
60
+
61
+ class AngleMeasurementType(IntEnum):
62
+ """The type of the angle measurement for current sensors."""
63
+
64
+ local_angle = 0
65
+ """
66
+ The angle is relative to the local voltage angle
67
+ """
68
+ global_angle = 1
69
+ """
70
+ The angle is relative to the global voltage angle.
71
+ """
72
+
73
+
74
+ class ShortCircuitVoltageScaling(IntEnum):
75
+ """Voltage scaling for short circuit calculations"""
76
+
77
+ minimum = 0
78
+ maximum = 1
79
+
80
+
81
+ class _ExperimentalFeatures(IntEnum):
82
+ """Experimental features"""
83
+
84
+ disabled = 0
85
+ enabled = 1
86
+
87
+
88
+ class ComponentAttributeFilterOptions(IntEnum):
89
+ """Filter option component or attribute"""
90
+
91
+ everything = 0
92
+ """Filter all components/attributes"""
93
+ relevant = 1
94
+ """Filter only non-empty components/attributes that contain non-NaN values"""
95
+
96
+
97
+ class LoadGenType(IntEnum):
98
+ """Load and Generator Types"""
99
+
100
+ const_power = 0
101
+ const_impedance = 1
102
+ const_current = 2
103
+
104
+
105
+ class WindingType(IntEnum):
106
+ """Transformer Winding Types"""
107
+
108
+ wye = 0
109
+ wye_n = 1
110
+ delta = 2
111
+ zigzag = 3
112
+ zigzag_n = 4
113
+
114
+
115
+ class BranchSide(IntEnum):
116
+ """Branch Sides"""
117
+
118
+ from_side = 0
119
+ to_side = 1
120
+
121
+
122
+ class Branch3Side(IntEnum):
123
+ """Branch3 Sides"""
124
+
125
+ side_1 = 0
126
+ side_2 = 1
127
+ side_3 = 2
128
+
129
+
130
+ class MeasuredTerminalType(IntEnum):
131
+ """The type of asset measured by a (power) sensor"""
132
+
133
+ branch_from = 0
134
+ """
135
+ Measuring the from-terminal between a branch (except link) and a node
136
+ """
137
+ branch_to = 1
138
+ """
139
+ Measuring the to-terminal between a branch (except link) and a node
140
+ """
141
+ source = 2
142
+ """
143
+ Measuring the terminal between a source and a node
144
+ """
145
+ shunt = 3
146
+ """
147
+ Measuring the terminal between a shunt and a node
148
+ """
149
+ load = 4
150
+ """
151
+ Measuring the terminal between a load and a node
152
+ """
153
+ generator = 5
154
+ """
155
+ Measuring the terminal between a generator and a node
156
+ """
157
+ branch3_1 = 6
158
+ """
159
+ Measuring the terminal-1 between a branch3 and a node
160
+ """
161
+ branch3_2 = 7
162
+ """
163
+ Measuring the terminal-2 between a branch3 and a node
164
+ """
165
+ branch3_3 = 8
166
+ """
167
+ Measuring the terminal-3 between a branch3 and a node
168
+ """
169
+ node = 9
170
+ """
171
+ Measuring the total power injection into a node
172
+ """
173
+
174
+
175
+ class FaultType(IntEnum):
176
+ """The type of fault represented by a fault component"""
177
+
178
+ three_phase = 0
179
+ single_phase_to_ground = 1
180
+ two_phase = 2
181
+ two_phase_to_ground = 3
182
+ nan = -128
183
+ """
184
+ Unspecified fault type. Needs to be overloaded at the latest in the update_data
185
+ """
186
+
187
+
188
+ class FaultPhase(IntEnum):
189
+ """The faulty phase(s) affected by the provided fault type"""
190
+
191
+ abc = 0
192
+ """
193
+ All phases are faulty in a three-phase fault
194
+ """
195
+ a = 1
196
+ """
197
+ The first phase is faulty in a single-phase-to-ground fault
198
+ """
199
+ b = 2
200
+ """
201
+ The second phase is faulty in a single-phase-to-ground fault
202
+ """
203
+ c = 3
204
+ """
205
+ The third phase is faulty in a single-phase-to-ground fault
206
+ """
207
+ ab = 4
208
+ """
209
+ The first and second phase are faulty in a two-phase or two-phase-to-ground fault
210
+ """
211
+ ac = 5
212
+ """
213
+ The first and third phase are faulty in a two-phase or two-phase-to-ground fault
214
+ """
215
+ bc = 6
216
+ """
217
+ The second and third phase are faulty in a two-phase or two-phase-to-ground fault
218
+ """
219
+ default_value = -1
220
+ """
221
+ Use the default fault phase. Depends on the fault_type.
222
+ """
223
+ nan = -128
224
+ """
225
+ Unspecified fault phase. Needs to be overloaded at the latest in the update_data
226
+ """