power-grid-model 1.12.57__py3-none-win_amd64.whl → 1.12.59__py3-none-win_amd64.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 (59) hide show
  1. power_grid_model/__init__.py +54 -54
  2. power_grid_model/_core/__init__.py +3 -3
  3. power_grid_model/_core/buffer_handling.py +493 -493
  4. power_grid_model/_core/data_handling.py +141 -141
  5. power_grid_model/_core/data_types.py +132 -132
  6. power_grid_model/_core/dataset_definitions.py +109 -109
  7. power_grid_model/_core/enum.py +226 -226
  8. power_grid_model/_core/error_handling.py +206 -206
  9. power_grid_model/_core/errors.py +130 -130
  10. power_grid_model/_core/index_integer.py +17 -17
  11. power_grid_model/_core/options.py +71 -71
  12. power_grid_model/_core/power_grid_core.py +563 -563
  13. power_grid_model/_core/power_grid_dataset.py +535 -535
  14. power_grid_model/_core/power_grid_meta.py +243 -243
  15. power_grid_model/_core/power_grid_model.py +686 -686
  16. power_grid_model/_core/power_grid_model_c/__init__.py +3 -3
  17. power_grid_model/_core/power_grid_model_c/bin/power_grid_model_c.dll +0 -0
  18. power_grid_model/_core/power_grid_model_c/get_pgm_dll_path.py +63 -63
  19. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/basics.h +255 -255
  20. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/buffer.h +108 -108
  21. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/dataset.h +316 -316
  22. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/dataset_definitions.h +1052 -1052
  23. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/handle.h +99 -99
  24. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/meta_data.h +189 -189
  25. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/model.h +125 -125
  26. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/options.h +142 -142
  27. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/serialization.h +118 -118
  28. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c.h +36 -36
  29. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/basics.hpp +65 -65
  30. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/buffer.hpp +61 -61
  31. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/dataset.hpp +220 -220
  32. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/handle.hpp +108 -108
  33. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/meta_data.hpp +84 -84
  34. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/model.hpp +63 -63
  35. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/options.hpp +52 -52
  36. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/serialization.hpp +124 -124
  37. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/utils.hpp +81 -81
  38. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp.hpp +19 -19
  39. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelConfigVersion.cmake +3 -3
  40. power_grid_model/_core/serialization.py +317 -317
  41. power_grid_model/_core/typing.py +20 -20
  42. power_grid_model/_core/utils.py +798 -798
  43. power_grid_model/data_types.py +321 -321
  44. power_grid_model/enum.py +27 -27
  45. power_grid_model/errors.py +37 -37
  46. power_grid_model/typing.py +43 -43
  47. power_grid_model/utils.py +473 -473
  48. power_grid_model/validation/__init__.py +25 -25
  49. power_grid_model/validation/_rules.py +1171 -1171
  50. power_grid_model/validation/_validation.py +1172 -1172
  51. power_grid_model/validation/assertions.py +93 -93
  52. power_grid_model/validation/errors.py +602 -602
  53. power_grid_model/validation/utils.py +313 -313
  54. {power_grid_model-1.12.57.dist-info → power_grid_model-1.12.59.dist-info}/METADATA +1 -1
  55. power_grid_model-1.12.59.dist-info/RECORD +65 -0
  56. power_grid_model-1.12.57.dist-info/RECORD +0 -65
  57. {power_grid_model-1.12.57.dist-info → power_grid_model-1.12.59.dist-info}/WHEEL +0 -0
  58. {power_grid_model-1.12.57.dist-info → power_grid_model-1.12.59.dist-info}/entry_points.txt +0 -0
  59. {power_grid_model-1.12.57.dist-info → power_grid_model-1.12.59.dist-info}/licenses/LICENSE +0 -0
@@ -1,243 +1,243 @@
1
- # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
- #
3
- # SPDX-License-Identifier: MPL-2.0
4
-
5
- """
6
- Load meta data from C core and define numpy structured array
7
- """
8
-
9
- from dataclasses import dataclass
10
- from enum import IntEnum
11
- from typing import Any
12
-
13
- import numpy as np
14
-
15
- from power_grid_model._core.data_types import AttributeType, DenseBatchArray, SingleArray
16
- from power_grid_model._core.dataset_definitions import (
17
- ComponentTypeLike,
18
- ComponentTypeVar,
19
- DatasetType,
20
- DatasetTypeLike,
21
- _str_to_component_type,
22
- _str_to_datatype,
23
- )
24
- from power_grid_model._core.power_grid_core import AttributePtr, ComponentPtr, DatasetPtr, power_grid_core as pgc
25
-
26
-
27
- # constant enum for ctype
28
- class PGMCType(IntEnum):
29
- """enumeration for ctype"""
30
-
31
- int32 = 0
32
- int8 = 1
33
- double = 2
34
- double3 = 3
35
-
36
-
37
- _CTYPE_NUMPY_MAP = {PGMCType.double: "f8", PGMCType.int32: "i4", PGMCType.int8: "i1", PGMCType.double3: "(3,)f8"}
38
- _ENDIANNESS = "<" if pgc.is_little_endian() == 1 else ">"
39
- _NAN_VALUE_MAP = {
40
- f"{_ENDIANNESS}f8": np.nan,
41
- f"{_ENDIANNESS}(3,)f8": np.nan,
42
- f"{_ENDIANNESS}i4": np.iinfo(f"{_ENDIANNESS}i4").min,
43
- f"{_ENDIANNESS}i1": np.iinfo(f"{_ENDIANNESS}i1").min,
44
- }
45
-
46
-
47
- @dataclass
48
- class ComponentMetaData:
49
- """
50
- Data class for component metadata
51
- """
52
-
53
- dtype: np.dtype
54
- dtype_dict: dict[str, Any]
55
- nans: dict[str, float | int]
56
- nan_scalar: np.ndarray
57
-
58
- def __getitem__(self, item):
59
- """
60
- Get item of dataclass
61
-
62
- Args:
63
- item: item name
64
-
65
- Returns:
66
-
67
- """
68
- return getattr(self, item)
69
-
70
-
71
- DatasetMetaData = dict[ComponentTypeVar, ComponentMetaData]
72
- PowerGridMetaData = dict[DatasetType, DatasetMetaData]
73
- """
74
- The data types for all dataset types and components used by the Power Grid Model.
75
- """
76
-
77
-
78
- def _generate_meta_data() -> PowerGridMetaData:
79
- """
80
-
81
- Returns: meta data for all dataset
82
-
83
- """
84
- py_meta_data = {}
85
- n_datasets = pgc.meta_n_datasets()
86
- for i in range(n_datasets):
87
- dataset = pgc.meta_get_dataset_by_idx(i)
88
- py_meta_data[_str_to_datatype(pgc.meta_dataset_name(dataset))] = _generate_meta_dataset(dataset)
89
- return py_meta_data
90
-
91
-
92
- def _generate_meta_dataset(dataset: DatasetPtr) -> DatasetMetaData:
93
- """
94
-
95
- Args:
96
- dataset: dataset
97
-
98
- Returns: meta data for one dataset
99
-
100
- """
101
- py_meta_dataset = {}
102
- n_components = pgc.meta_n_components(dataset)
103
- for i in range(n_components):
104
- component = pgc.meta_get_component_by_idx(dataset, i)
105
- py_meta_dataset[_str_to_component_type(pgc.meta_component_name(component))] = _generate_meta_component(
106
- component
107
- )
108
- return py_meta_dataset
109
-
110
-
111
- def _generate_meta_component(component: ComponentPtr) -> ComponentMetaData:
112
- """
113
-
114
- Args:
115
- component: component
116
-
117
- Returns: meta data for one component
118
-
119
- """
120
-
121
- dtype_dict = _generate_meta_attributes(component)
122
- dtype = np.dtype({k: v for k, v in dtype_dict.items() if k != "nans"}) # type: ignore
123
- nans = dict(zip(dtype_dict["names"], dtype_dict["nans"]))
124
- if dtype.alignment != pgc.meta_component_alignment(component):
125
- raise TypeError(f'Aligment mismatch for component type: "{pgc.meta_component_name(component)}" !')
126
- # get single nan scalar
127
- nan_scalar = np.empty(1, dtype=dtype)
128
- for key, value in nans.items():
129
- nan_scalar[key] = value
130
- return ComponentMetaData(dtype=dtype, dtype_dict=dtype_dict, nans=nans, nan_scalar=nan_scalar)
131
-
132
-
133
- def _generate_meta_attributes(component: ComponentPtr) -> dict:
134
- """
135
-
136
- Args:
137
- component: component
138
-
139
- Returns: meta data for all attributes
140
-
141
- """
142
- names = []
143
- formats = []
144
- offsets = []
145
- nans = []
146
- n_attrs = pgc.meta_n_attributes(component)
147
- for i in range(n_attrs):
148
- attribute: AttributePtr = pgc.meta_get_attribute_by_idx(component, i)
149
- attr_name: str = pgc.meta_attribute_name(attribute)
150
- attr_ctype: int = pgc.meta_attribute_ctype(attribute)
151
- attr_offset: int = pgc.meta_attribute_offset(attribute)
152
- attr_np_type = f"{_ENDIANNESS}{_CTYPE_NUMPY_MAP[PGMCType(attr_ctype)]}"
153
- attr_nan = _NAN_VALUE_MAP[attr_np_type]
154
- names.append(attr_name)
155
- formats.append(attr_np_type)
156
- offsets.append(attr_offset)
157
- nans.append(attr_nan)
158
- return {
159
- "names": names,
160
- "formats": formats,
161
- "offsets": offsets,
162
- "itemsize": pgc.meta_component_size(component),
163
- "aligned": True,
164
- "nans": nans,
165
- }
166
-
167
-
168
- # store meta data
169
- power_grid_meta_data = _generate_meta_data()
170
- """
171
- The data types for all dataset types and components used by the Power Grid Model.
172
- """
173
-
174
-
175
- def initialize_array(
176
- data_type: DatasetTypeLike,
177
- component_type: ComponentTypeLike,
178
- shape: tuple | int,
179
- empty: bool = False,
180
- ) -> SingleArray | DenseBatchArray:
181
- """
182
- Initializes an array for use in Power Grid Model calculations
183
-
184
- Args:
185
- data_type: input, update, sym_output, or asym_output
186
- component_type: one component type, e.g. node
187
- shape: shape of initialization
188
- integer, it is a 1-dimensional array
189
- tuple, it is an N-dimensional (tuple.shape) array
190
- empty: if True, leave the memory block un-initialized
191
-
192
- Returns:
193
- np structured array with all entries as null value
194
- """
195
- data_type = _str_to_datatype(data_type)
196
- component_type = _str_to_component_type(component_type)
197
- if not isinstance(shape, tuple):
198
- shape = (shape,)
199
- if empty:
200
- return np.empty(shape=shape, dtype=power_grid_meta_data[data_type][component_type].dtype, order="C")
201
- return np.full(
202
- shape=shape,
203
- fill_value=power_grid_meta_data[data_type][component_type].nan_scalar,
204
- dtype=power_grid_meta_data[data_type][component_type].dtype,
205
- order="C",
206
- )
207
-
208
-
209
- def attribute_dtype(
210
- data_type: DatasetTypeLike, component_type: ComponentTypeLike, attribute: AttributeType
211
- ) -> np.dtype:
212
- """Gives out dtype of the attribute to be used in a columnar data format
213
-
214
- Args:
215
- data_type (DatasetTypeLike): The type of dataset (input, update, sym_output, or asym_output)
216
- component_type (ComponentTypeLike): The type of component (e.g., node)
217
- attribute (AttributeType): The attribute whose dtype is required
218
-
219
- Returns:
220
- np.dtype: The dtype of the specified attribute
221
- """
222
- data_type = _str_to_datatype(data_type)
223
- component_type = _str_to_component_type(component_type)
224
- return power_grid_meta_data[data_type][component_type].dtype[attribute]
225
-
226
-
227
- def attribute_empty_value(
228
- data_type: DatasetTypeLike, component_type: ComponentTypeLike, attribute: AttributeType
229
- ) -> np.ndarray:
230
- """
231
- Returns the empty value for a specific attribute in the Power Grid Model.
232
-
233
- Args:
234
- data_type (DatasetTypeLike): The type of dataset (input, update, sym_output, or asym_output)
235
- component_type (ComponentTypeLike): The type of component (e.g., node)
236
- attribute (AttributeType): The attribute whose empty value is required
237
-
238
- Returns:
239
- np.ndarray: The empty value for the specified attribute
240
- """
241
- data_type = _str_to_datatype(data_type)
242
- component_type = _str_to_component_type(component_type)
243
- return power_grid_meta_data[data_type][component_type].nan_scalar[attribute]
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+
5
+ """
6
+ Load meta data from C core and define numpy structured array
7
+ """
8
+
9
+ from dataclasses import dataclass
10
+ from enum import IntEnum
11
+ from typing import Any
12
+
13
+ import numpy as np
14
+
15
+ from power_grid_model._core.data_types import AttributeType, DenseBatchArray, SingleArray
16
+ from power_grid_model._core.dataset_definitions import (
17
+ ComponentTypeLike,
18
+ ComponentTypeVar,
19
+ DatasetType,
20
+ DatasetTypeLike,
21
+ _str_to_component_type,
22
+ _str_to_datatype,
23
+ )
24
+ from power_grid_model._core.power_grid_core import AttributePtr, ComponentPtr, DatasetPtr, power_grid_core as pgc
25
+
26
+
27
+ # constant enum for ctype
28
+ class PGMCType(IntEnum):
29
+ """enumeration for ctype"""
30
+
31
+ int32 = 0
32
+ int8 = 1
33
+ double = 2
34
+ double3 = 3
35
+
36
+
37
+ _CTYPE_NUMPY_MAP = {PGMCType.double: "f8", PGMCType.int32: "i4", PGMCType.int8: "i1", PGMCType.double3: "(3,)f8"}
38
+ _ENDIANNESS = "<" if pgc.is_little_endian() == 1 else ">"
39
+ _NAN_VALUE_MAP = {
40
+ f"{_ENDIANNESS}f8": np.nan,
41
+ f"{_ENDIANNESS}(3,)f8": np.nan,
42
+ f"{_ENDIANNESS}i4": np.iinfo(f"{_ENDIANNESS}i4").min,
43
+ f"{_ENDIANNESS}i1": np.iinfo(f"{_ENDIANNESS}i1").min,
44
+ }
45
+
46
+
47
+ @dataclass
48
+ class ComponentMetaData:
49
+ """
50
+ Data class for component metadata
51
+ """
52
+
53
+ dtype: np.dtype
54
+ dtype_dict: dict[str, Any]
55
+ nans: dict[str, float | int]
56
+ nan_scalar: np.ndarray
57
+
58
+ def __getitem__(self, item):
59
+ """
60
+ Get item of dataclass
61
+
62
+ Args:
63
+ item: item name
64
+
65
+ Returns:
66
+
67
+ """
68
+ return getattr(self, item)
69
+
70
+
71
+ DatasetMetaData = dict[ComponentTypeVar, ComponentMetaData]
72
+ PowerGridMetaData = dict[DatasetType, DatasetMetaData]
73
+ """
74
+ The data types for all dataset types and components used by the Power Grid Model.
75
+ """
76
+
77
+
78
+ def _generate_meta_data() -> PowerGridMetaData:
79
+ """
80
+
81
+ Returns: meta data for all dataset
82
+
83
+ """
84
+ py_meta_data = {}
85
+ n_datasets = pgc.meta_n_datasets()
86
+ for i in range(n_datasets):
87
+ dataset = pgc.meta_get_dataset_by_idx(i)
88
+ py_meta_data[_str_to_datatype(pgc.meta_dataset_name(dataset))] = _generate_meta_dataset(dataset)
89
+ return py_meta_data
90
+
91
+
92
+ def _generate_meta_dataset(dataset: DatasetPtr) -> DatasetMetaData:
93
+ """
94
+
95
+ Args:
96
+ dataset: dataset
97
+
98
+ Returns: meta data for one dataset
99
+
100
+ """
101
+ py_meta_dataset = {}
102
+ n_components = pgc.meta_n_components(dataset)
103
+ for i in range(n_components):
104
+ component = pgc.meta_get_component_by_idx(dataset, i)
105
+ py_meta_dataset[_str_to_component_type(pgc.meta_component_name(component))] = _generate_meta_component(
106
+ component
107
+ )
108
+ return py_meta_dataset
109
+
110
+
111
+ def _generate_meta_component(component: ComponentPtr) -> ComponentMetaData:
112
+ """
113
+
114
+ Args:
115
+ component: component
116
+
117
+ Returns: meta data for one component
118
+
119
+ """
120
+
121
+ dtype_dict = _generate_meta_attributes(component)
122
+ dtype = np.dtype({k: v for k, v in dtype_dict.items() if k != "nans"}) # type: ignore
123
+ nans = dict(zip(dtype_dict["names"], dtype_dict["nans"]))
124
+ if dtype.alignment != pgc.meta_component_alignment(component):
125
+ raise TypeError(f'Aligment mismatch for component type: "{pgc.meta_component_name(component)}" !')
126
+ # get single nan scalar
127
+ nan_scalar = np.empty(1, dtype=dtype)
128
+ for key, value in nans.items():
129
+ nan_scalar[key] = value
130
+ return ComponentMetaData(dtype=dtype, dtype_dict=dtype_dict, nans=nans, nan_scalar=nan_scalar)
131
+
132
+
133
+ def _generate_meta_attributes(component: ComponentPtr) -> dict:
134
+ """
135
+
136
+ Args:
137
+ component: component
138
+
139
+ Returns: meta data for all attributes
140
+
141
+ """
142
+ names = []
143
+ formats = []
144
+ offsets = []
145
+ nans = []
146
+ n_attrs = pgc.meta_n_attributes(component)
147
+ for i in range(n_attrs):
148
+ attribute: AttributePtr = pgc.meta_get_attribute_by_idx(component, i)
149
+ attr_name: str = pgc.meta_attribute_name(attribute)
150
+ attr_ctype: int = pgc.meta_attribute_ctype(attribute)
151
+ attr_offset: int = pgc.meta_attribute_offset(attribute)
152
+ attr_np_type = f"{_ENDIANNESS}{_CTYPE_NUMPY_MAP[PGMCType(attr_ctype)]}"
153
+ attr_nan = _NAN_VALUE_MAP[attr_np_type]
154
+ names.append(attr_name)
155
+ formats.append(attr_np_type)
156
+ offsets.append(attr_offset)
157
+ nans.append(attr_nan)
158
+ return {
159
+ "names": names,
160
+ "formats": formats,
161
+ "offsets": offsets,
162
+ "itemsize": pgc.meta_component_size(component),
163
+ "aligned": True,
164
+ "nans": nans,
165
+ }
166
+
167
+
168
+ # store meta data
169
+ power_grid_meta_data = _generate_meta_data()
170
+ """
171
+ The data types for all dataset types and components used by the Power Grid Model.
172
+ """
173
+
174
+
175
+ def initialize_array(
176
+ data_type: DatasetTypeLike,
177
+ component_type: ComponentTypeLike,
178
+ shape: tuple | int,
179
+ empty: bool = False,
180
+ ) -> SingleArray | DenseBatchArray:
181
+ """
182
+ Initializes an array for use in Power Grid Model calculations
183
+
184
+ Args:
185
+ data_type: input, update, sym_output, or asym_output
186
+ component_type: one component type, e.g. node
187
+ shape: shape of initialization
188
+ integer, it is a 1-dimensional array
189
+ tuple, it is an N-dimensional (tuple.shape) array
190
+ empty: if True, leave the memory block un-initialized
191
+
192
+ Returns:
193
+ np structured array with all entries as null value
194
+ """
195
+ data_type = _str_to_datatype(data_type)
196
+ component_type = _str_to_component_type(component_type)
197
+ if not isinstance(shape, tuple):
198
+ shape = (shape,)
199
+ if empty:
200
+ return np.empty(shape=shape, dtype=power_grid_meta_data[data_type][component_type].dtype, order="C")
201
+ return np.full(
202
+ shape=shape,
203
+ fill_value=power_grid_meta_data[data_type][component_type].nan_scalar,
204
+ dtype=power_grid_meta_data[data_type][component_type].dtype,
205
+ order="C",
206
+ )
207
+
208
+
209
+ def attribute_dtype(
210
+ data_type: DatasetTypeLike, component_type: ComponentTypeLike, attribute: AttributeType
211
+ ) -> np.dtype:
212
+ """Gives out dtype of the attribute to be used in a columnar data format
213
+
214
+ Args:
215
+ data_type (DatasetTypeLike): The type of dataset (input, update, sym_output, or asym_output)
216
+ component_type (ComponentTypeLike): The type of component (e.g., node)
217
+ attribute (AttributeType): The attribute whose dtype is required
218
+
219
+ Returns:
220
+ np.dtype: The dtype of the specified attribute
221
+ """
222
+ data_type = _str_to_datatype(data_type)
223
+ component_type = _str_to_component_type(component_type)
224
+ return power_grid_meta_data[data_type][component_type].dtype[attribute]
225
+
226
+
227
+ def attribute_empty_value(
228
+ data_type: DatasetTypeLike, component_type: ComponentTypeLike, attribute: AttributeType
229
+ ) -> np.ndarray:
230
+ """
231
+ Returns the empty value for a specific attribute in the Power Grid Model.
232
+
233
+ Args:
234
+ data_type (DatasetTypeLike): The type of dataset (input, update, sym_output, or asym_output)
235
+ component_type (ComponentTypeLike): The type of component (e.g., node)
236
+ attribute (AttributeType): The attribute whose empty value is required
237
+
238
+ Returns:
239
+ np.ndarray: The empty value for the specified attribute
240
+ """
241
+ data_type = _str_to_datatype(data_type)
242
+ component_type = _str_to_component_type(component_type)
243
+ return power_grid_meta_data[data_type][component_type].nan_scalar[attribute]