power-grid-model 1.10.74__py3-none-win_amd64.whl → 1.12.119__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 (67) hide show
  1. power_grid_model/__init__.py +54 -29
  2. power_grid_model/_core/__init__.py +3 -3
  3. power_grid_model/_core/buffer_handling.py +507 -478
  4. power_grid_model/_core/data_handling.py +195 -141
  5. power_grid_model/_core/data_types.py +142 -0
  6. power_grid_model/_core/dataset_definitions.py +109 -109
  7. power_grid_model/_core/enum.py +226 -0
  8. power_grid_model/_core/error_handling.py +215 -202
  9. power_grid_model/_core/errors.py +134 -0
  10. power_grid_model/_core/index_integer.py +17 -17
  11. power_grid_model/_core/options.py +71 -69
  12. power_grid_model/_core/power_grid_core.py +577 -597
  13. power_grid_model/_core/power_grid_dataset.py +545 -528
  14. power_grid_model/_core/power_grid_meta.py +262 -244
  15. power_grid_model/_core/power_grid_model.py +1025 -692
  16. power_grid_model/_core/power_grid_model_c/__init__.py +3 -0
  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 -0
  19. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/basics.h +251 -0
  20. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/buffer.h +108 -0
  21. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/dataset.h +332 -0
  22. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/dataset_definitions.h +1060 -0
  23. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/handle.h +111 -0
  24. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/meta_data.h +189 -0
  25. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/model.h +130 -0
  26. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/options.h +142 -0
  27. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c/serialization.h +118 -0
  28. power_grid_model/_core/power_grid_model_c/include/power_grid_model_c.h +36 -0
  29. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/basics.hpp +65 -0
  30. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/buffer.hpp +61 -0
  31. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/dataset.hpp +224 -0
  32. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/handle.hpp +108 -0
  33. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/meta_data.hpp +84 -0
  34. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/model.hpp +63 -0
  35. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/options.hpp +52 -0
  36. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/serialization.hpp +124 -0
  37. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp/utils.hpp +81 -0
  38. power_grid_model/_core/power_grid_model_c/include/power_grid_model_cpp.hpp +19 -0
  39. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelConfig.cmake +37 -0
  40. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelConfigVersion.cmake +65 -0
  41. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelTargets-release.cmake +19 -0
  42. power_grid_model/_core/power_grid_model_c/lib/cmake/power_grid_model/power_grid_modelTargets.cmake +144 -0
  43. power_grid_model/_core/power_grid_model_c/lib/power_grid_model_c.lib +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 +319 -317
  47. power_grid_model/_core/typing.py +20 -0
  48. power_grid_model/{_utils.py → _core/utils.py} +798 -783
  49. power_grid_model/data_types.py +321 -319
  50. power_grid_model/enum.py +27 -214
  51. power_grid_model/errors.py +37 -123
  52. power_grid_model/typing.py +43 -48
  53. power_grid_model/utils.py +529 -400
  54. power_grid_model/validation/__init__.py +25 -14
  55. power_grid_model/validation/_rules.py +1167 -904
  56. power_grid_model/validation/_validation.py +1172 -980
  57. power_grid_model/validation/assertions.py +93 -92
  58. power_grid_model/validation/errors.py +602 -520
  59. power_grid_model/validation/utils.py +313 -318
  60. {power_grid_model-1.10.74.dist-info → power_grid_model-1.12.119.dist-info}/METADATA +162 -171
  61. power_grid_model-1.12.119.dist-info/RECORD +65 -0
  62. {power_grid_model-1.10.74.dist-info → power_grid_model-1.12.119.dist-info}/WHEEL +1 -1
  63. power_grid_model-1.12.119.dist-info/entry_points.txt +3 -0
  64. power_grid_model/_core/_power_grid_core.dll +0 -0
  65. power_grid_model-1.10.74.dist-info/RECORD +0 -32
  66. power_grid_model-1.10.74.dist-info/top_level.txt +0 -1
  67. {power_grid_model-1.10.74.dist-info → power_grid_model-1.12.119.dist-info}/licenses/LICENSE +0 -0
@@ -1,317 +1,319 @@
1
- # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
- #
3
- # SPDX-License-Identifier: MPL-2.0
4
-
5
- """
6
- Power grid model (de)serialization
7
- """
8
-
9
- from abc import ABC, abstractmethod
10
- from ctypes import byref
11
- from enum import IntEnum
12
-
13
- from power_grid_model._core.dataset_definitions import DatasetType, _map_to_component_types, _str_to_datatype
14
- from power_grid_model._core.error_handling import assert_no_error
15
- from power_grid_model._core.index_integer import IdxC
16
- from power_grid_model._core.power_grid_core import (
17
- CharPtr,
18
- DeserializerPtr,
19
- SerializerPtr,
20
- WritableDatasetPtr,
21
- power_grid_core as pgc,
22
- )
23
- from power_grid_model._core.power_grid_dataset import CConstDataset, CWritableDataset
24
- from power_grid_model.data_types import Dataset
25
- from power_grid_model.errors import PowerGridSerializationError
26
- from power_grid_model.typing import ComponentAttributeMapping
27
-
28
-
29
- class SerializationType(IntEnum):
30
- """Serialization Format Types"""
31
-
32
- JSON = 0
33
- MSGPACK = 1
34
-
35
-
36
- class Deserializer:
37
- """
38
- Deserializer for the Power grid model
39
- """
40
-
41
- _deserializer: DeserializerPtr
42
- _dataset_ptr: WritableDatasetPtr
43
- _dataset: CWritableDataset
44
- _data_filter: ComponentAttributeMapping
45
-
46
- def __new__(
47
- cls,
48
- data: str | bytes,
49
- serialization_type: SerializationType,
50
- data_filter: ComponentAttributeMapping,
51
- ):
52
- instance = super().__new__(cls)
53
-
54
- raw_data = data if isinstance(data, bytes) else data.encode()
55
- instance._deserializer = pgc.create_deserializer_from_binary_buffer(
56
- raw_data, len(raw_data), serialization_type.value
57
- )
58
- assert_no_error()
59
-
60
- instance._dataset_ptr = pgc.deserializer_get_dataset(instance._deserializer)
61
- assert_no_error()
62
-
63
- instance._data_filter = data_filter
64
- instance._dataset = CWritableDataset(instance._dataset_ptr, data_filter=data_filter)
65
- assert_no_error()
66
-
67
- return instance
68
-
69
- def __del__(self):
70
- if hasattr(self, "_deserializer"):
71
- pgc.destroy_deserializer(self._deserializer)
72
-
73
- def load(self) -> Dataset:
74
- """
75
- Load the deserialized data to a new dataset.
76
-
77
- Raises:
78
- ValueError: if the data is inconsistent with the rest of the dataset or a component is unknown.
79
- PowerGridError: if there was an internal error.
80
-
81
- Returns:
82
- A tuple containing the deserialized dataset in Power grid model input format and the type of the dataset.
83
- """
84
- pgc.deserializer_parse_to_buffer(self._deserializer)
85
- return self._dataset.get_data()
86
-
87
-
88
- class Serializer(ABC):
89
- """
90
- Serializer for the Power grid model
91
- """
92
-
93
- _data: Dataset
94
- _dataset: CConstDataset
95
- _serializer: SerializerPtr
96
-
97
- def __new__(cls, data: Dataset, serialization_type: SerializationType, dataset_type: DatasetType | None = None):
98
- instance = super().__new__(cls)
99
-
100
- instance._data = data
101
- instance._dataset = CConstDataset(instance._data, dataset_type=dataset_type)
102
- assert_no_error()
103
-
104
- instance._serializer = pgc.create_serializer(instance._dataset.get_dataset_ptr(), serialization_type.value)
105
- assert_no_error()
106
-
107
- return instance
108
-
109
- def __del__(self):
110
- if hasattr(self, "_serializer"):
111
- pgc.destroy_serializer(self._serializer)
112
-
113
- def dump_str(self, *, use_compact_list: bool = False, indent: int = 2) -> str:
114
- """
115
- Dump the data to a decoded str; if supported.
116
-
117
- Args:
118
- use_compact_list: whether or not to use compact lists (sparse data). Defaults to False.
119
- indent:
120
- use specified indentation to make data more readable
121
- Use 0 or negative value for no indentation. Defaults to 2
122
-
123
- Returns:
124
- A serialized string containing the dataset.
125
- """
126
- data = pgc.serializer_get_to_zero_terminated_string(self._serializer, int(use_compact_list), indent)
127
- assert_no_error()
128
- return data
129
-
130
- def dump_bytes(self, *, use_compact_list: bool = False) -> bytes:
131
- """
132
- Dump the data to a bytes object; if supported.
133
-
134
- Args:
135
- use_compact_list (bool, optional): whether or not to use compact lists (sparse data). Defaults to False.
136
-
137
- Returns:
138
- The raw bytes of the serialization of the datast.
139
- """
140
- raw_data = CharPtr() # pylint: disable(not-callable)
141
- size = IdxC() # pylint: disable(not-callable)
142
- pgc.serializer_get_to_binary_buffer(self._serializer, int(use_compact_list), byref(raw_data), byref(size))
143
- assert_no_error()
144
-
145
- result = raw_data[: size.value]
146
- if not isinstance(result, bytes):
147
- raise PowerGridSerializationError("Invalid output data type")
148
-
149
- return result
150
-
151
- @abstractmethod
152
- def dump(self, *args, **kwargs):
153
- """
154
- Dump the data in the recommended data format (e.g. str or bytes, depending on the serialization_type).
155
-
156
- Args:
157
- *: any serialization_type dependent args
158
- """
159
-
160
-
161
- class _BytesSerializer(Serializer):
162
- """
163
- Base type for serialization to bytes
164
- """
165
-
166
- dump = Serializer.dump_bytes
167
-
168
-
169
- class _StringSerializer(Serializer):
170
- """
171
- Base type for serialization to str
172
- """
173
-
174
- dump = Serializer.dump_str
175
-
176
-
177
- class JsonDeserializer(Deserializer): # pylint: disable=too-few-public-methods
178
- """
179
- JSON deserializer for the Power grid model
180
- """
181
-
182
- def __new__(cls, data: str | bytes, data_filter: ComponentAttributeMapping):
183
- return super().__new__(cls, data, SerializationType.JSON, data_filter=data_filter)
184
-
185
-
186
- class MsgpackDeserializer(Deserializer): # pylint: disable=too-few-public-methods
187
- """
188
- msgpack deserializer for the Power grid model
189
- """
190
-
191
- def __new__(cls, data: bytes, data_filter: ComponentAttributeMapping):
192
- return super().__new__(cls, data, SerializationType.MSGPACK, data_filter=data_filter)
193
-
194
-
195
- class JsonSerializer(_StringSerializer): # pylint: disable=too-few-public-methods
196
- """
197
- JSON deserializer for the Power grid model
198
- """
199
-
200
- def __new__(cls, data: Dataset, dataset_type: DatasetType | None = None):
201
- return super().__new__(cls, data, SerializationType.JSON, dataset_type=dataset_type)
202
-
203
-
204
- class MsgpackSerializer(_BytesSerializer): # pylint: disable=too-few-public-methods
205
- """
206
- msgpack deserializer for the Power grid model
207
- """
208
-
209
- def __new__(cls, data: Dataset, dataset_type: DatasetType | None = None):
210
- return super().__new__(cls, data, SerializationType.MSGPACK, dataset_type=dataset_type)
211
-
212
-
213
- def json_deserialize(
214
- data: str | bytes,
215
- data_filter: ComponentAttributeMapping = None,
216
- ) -> Dataset:
217
- """
218
- Load serialized JSON data to a new dataset.
219
-
220
- Args:
221
- data: the data to deserialize.
222
- data_filter: the data filter to apply to the dataset.
223
-
224
- Raises:
225
- ValueError: if the data is inconsistent with the rest of the dataset or a component is unknown.
226
- PowerGridError: if there was an internal error.
227
-
228
- Returns:
229
- A tuple containing the deserialized dataset in Power grid model input format and the type of the dataset.
230
- """
231
- result = JsonDeserializer(data, data_filter=data_filter).load()
232
- assert_no_error()
233
- return result
234
-
235
-
236
- def json_serialize(
237
- data: Dataset,
238
- dataset_type: DatasetType | None = None,
239
- use_compact_list: bool = False,
240
- indent: int = 2,
241
- ) -> str:
242
- """
243
- Dump data to a JSON str.
244
-
245
- If the dataset_type is not specified or None, it will be deduced from the dataset if possible.
246
- Deduction is not possible in case data is empty.
247
-
248
- Args:
249
- data: the dataset
250
- dataset_type: the type of the dataset. Defaults to None. Required str-type if data is empty.
251
- use_compact_list: whether or not to use compact lists (sparse data). Defaults to False.
252
- indent:
253
- use specified indentation to make data more readable
254
- Use 0 or negative value for no indentation. Defaults to 2
255
-
256
- Raises:
257
- PowerGridError: if there was an internal error.
258
-
259
- Returns:
260
- A serialized string containing the dataset.
261
- """
262
- data = _map_to_component_types(data)
263
- if dataset_type is not None:
264
- dataset_type = _str_to_datatype(dataset_type)
265
- result = JsonSerializer(data=data, dataset_type=dataset_type).dump(use_compact_list=use_compact_list, indent=indent)
266
- assert_no_error()
267
- return result
268
-
269
-
270
- def msgpack_deserialize(data: bytes, data_filter: ComponentAttributeMapping = None) -> Dataset:
271
- """
272
- Load serialized msgpack data to a new dataset.
273
-
274
- Args:
275
- data: the data to deserialize.
276
-
277
- Raises:
278
- ValueError: if the data is inconsistent with the rest of the dataset or a component is unknown.
279
- PowerGridError: if there was an internal error.
280
-
281
- Returns:
282
- A tuple containing the deserialized dataset in Power grid model input format and the type of the dataset.
283
- """
284
- result = MsgpackDeserializer(data, data_filter=data_filter).load()
285
- assert_no_error()
286
- return result
287
-
288
-
289
- def msgpack_serialize(
290
- data: Dataset,
291
- dataset_type: DatasetType | None = None,
292
- use_compact_list: bool = False,
293
- ) -> bytes:
294
- """
295
- Dump the data to raw msgpack bytes.
296
-
297
- If the dataset_type is not specified or None, it will be deduced from the dataset if possible.
298
- Deduction is not possible in case data is empty.
299
-
300
- Args:
301
- data: the dataset
302
- dataset_type: the type of the dataset. Defaults to None. Required str-type if data is empty.
303
- use_compact_list: whether or not to use compact lists (sparse data). Defaults to False.
304
-
305
- Raises:
306
- KeyError: if the dataset_type was not provided and could not be deduced from the dataset (i.e. it was empty).
307
- PowerGridError: if there was an internal error.
308
-
309
- Returns:
310
- A serialized string containing the dataset.
311
- """
312
- data = _map_to_component_types(data)
313
- if dataset_type is not None:
314
- dataset_type = _str_to_datatype(dataset_type)
315
- result = MsgpackSerializer(data=data, dataset_type=dataset_type).dump(use_compact_list=use_compact_list)
316
- assert_no_error()
317
- return result
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+
5
+ """
6
+ Power grid model (de)serialization
7
+ """
8
+
9
+ from abc import ABC, abstractmethod
10
+ from ctypes import byref
11
+ from enum import IntEnum
12
+
13
+ from power_grid_model._core.data_types import Dataset
14
+ from power_grid_model._core.dataset_definitions import DatasetType, _map_to_component_types, _str_to_datatype
15
+ from power_grid_model._core.error_handling import assert_no_error
16
+ from power_grid_model._core.errors import PowerGridSerializationError
17
+ from power_grid_model._core.index_integer import IdxC
18
+ from power_grid_model._core.power_grid_core import (
19
+ CharPtr,
20
+ DeserializerPtr,
21
+ SerializerPtr,
22
+ WritableDatasetPtr,
23
+ get_power_grid_core as get_pgc,
24
+ )
25
+ from power_grid_model._core.power_grid_dataset import CConstDataset, CWritableDataset
26
+ from power_grid_model._core.typing import ComponentAttributeMapping
27
+
28
+
29
+ class SerializationType(IntEnum):
30
+ """Serialization Format Types"""
31
+
32
+ JSON = 0
33
+ MSGPACK = 1
34
+
35
+
36
+ class Deserializer:
37
+ """
38
+ Deserializer for the Power grid model
39
+ """
40
+
41
+ _deserializer: DeserializerPtr
42
+ _dataset_ptr: WritableDatasetPtr
43
+ _dataset: CWritableDataset
44
+ _data_filter: ComponentAttributeMapping
45
+
46
+ def __new__(
47
+ cls,
48
+ data: str | bytes,
49
+ serialization_type: SerializationType,
50
+ data_filter: ComponentAttributeMapping,
51
+ ):
52
+ instance = super().__new__(cls)
53
+
54
+ raw_data = data if isinstance(data, bytes) else data.encode()
55
+ instance._deserializer = get_pgc().create_deserializer_from_binary_buffer(
56
+ raw_data, len(raw_data), serialization_type.value
57
+ )
58
+ assert_no_error()
59
+
60
+ instance._dataset_ptr = get_pgc().deserializer_get_dataset(instance._deserializer)
61
+ assert_no_error()
62
+
63
+ instance._data_filter = data_filter
64
+ instance._dataset = CWritableDataset(instance._dataset_ptr, data_filter=data_filter)
65
+ assert_no_error()
66
+
67
+ return instance
68
+
69
+ def __del__(self):
70
+ if hasattr(self, "_deserializer"):
71
+ get_pgc().destroy_deserializer(self._deserializer)
72
+
73
+ def load(self) -> Dataset:
74
+ """
75
+ Load the deserialized data to a new dataset.
76
+
77
+ Raises:
78
+ ValueError: if the data is inconsistent with the rest of the dataset or a component is unknown.
79
+ PowerGridError: if there was an internal error.
80
+
81
+ Returns:
82
+ A tuple containing the deserialized dataset in Power grid model input format and the type of the dataset.
83
+ """
84
+ get_pgc().deserializer_parse_to_buffer(self._deserializer)
85
+ return self._dataset.get_data()
86
+
87
+
88
+ class Serializer(ABC):
89
+ """
90
+ Serializer for the Power grid model
91
+ """
92
+
93
+ _data: Dataset
94
+ _dataset: CConstDataset
95
+ _serializer: SerializerPtr
96
+
97
+ def __new__(cls, data: Dataset, serialization_type: SerializationType, dataset_type: DatasetType | None = None):
98
+ instance = super().__new__(cls)
99
+
100
+ instance._data = data
101
+ instance._dataset = CConstDataset(instance._data, dataset_type=dataset_type)
102
+ assert_no_error()
103
+
104
+ instance._serializer = get_pgc().create_serializer(
105
+ instance._dataset.get_dataset_ptr(), serialization_type.value
106
+ )
107
+ assert_no_error()
108
+
109
+ return instance
110
+
111
+ def __del__(self):
112
+ if hasattr(self, "_serializer"):
113
+ get_pgc().destroy_serializer(self._serializer)
114
+
115
+ def dump_str(self, *, use_compact_list: bool = False, indent: int = 2) -> str:
116
+ """
117
+ Dump the data to a decoded str; if supported.
118
+
119
+ Args:
120
+ use_compact_list: whether or not to use compact lists (sparse data). Defaults to False.
121
+ indent:
122
+ use specified indentation to make data more readable
123
+ Use 0 or negative value for no indentation. Defaults to 2
124
+
125
+ Returns:
126
+ A serialized string containing the dataset.
127
+ """
128
+ data = get_pgc().serializer_get_to_zero_terminated_string(self._serializer, int(use_compact_list), indent)
129
+ assert_no_error()
130
+ return data
131
+
132
+ def dump_bytes(self, *, use_compact_list: bool = False) -> bytes:
133
+ """
134
+ Dump the data to a bytes object; if supported.
135
+
136
+ Args:
137
+ use_compact_list (bool, optional): whether or not to use compact lists (sparse data). Defaults to False.
138
+
139
+ Returns:
140
+ The raw bytes of the serialization of the datast.
141
+ """
142
+ raw_data = CharPtr()
143
+ size = IdxC()
144
+ get_pgc().serializer_get_to_binary_buffer(self._serializer, int(use_compact_list), byref(raw_data), byref(size))
145
+ assert_no_error()
146
+
147
+ result = raw_data[: size.value]
148
+ if not isinstance(result, bytes):
149
+ raise PowerGridSerializationError("Invalid output data type")
150
+
151
+ return result
152
+
153
+ @abstractmethod
154
+ def dump(self, *args, **kwargs):
155
+ """
156
+ Dump the data in the recommended data format (e.g. str or bytes, depending on the serialization_type).
157
+
158
+ Args:
159
+ *: any serialization_type dependent args
160
+ """
161
+
162
+
163
+ class _BytesSerializer(Serializer):
164
+ """
165
+ Base type for serialization to bytes
166
+ """
167
+
168
+ dump = Serializer.dump_bytes
169
+
170
+
171
+ class _StringSerializer(Serializer):
172
+ """
173
+ Base type for serialization to str
174
+ """
175
+
176
+ dump = Serializer.dump_str
177
+
178
+
179
+ class JsonDeserializer(Deserializer):
180
+ """
181
+ JSON deserializer for the Power grid model
182
+ """
183
+
184
+ def __new__(cls, data: str | bytes, data_filter: ComponentAttributeMapping):
185
+ return super().__new__(cls, data, SerializationType.JSON, data_filter=data_filter)
186
+
187
+
188
+ class MsgpackDeserializer(Deserializer):
189
+ """
190
+ msgpack deserializer for the Power grid model
191
+ """
192
+
193
+ def __new__(cls, data: bytes, data_filter: ComponentAttributeMapping):
194
+ return super().__new__(cls, data, SerializationType.MSGPACK, data_filter=data_filter)
195
+
196
+
197
+ class JsonSerializer(_StringSerializer):
198
+ """
199
+ JSON deserializer for the Power grid model
200
+ """
201
+
202
+ def __new__(cls, data: Dataset, dataset_type: DatasetType | None = None):
203
+ return super().__new__(cls, data, SerializationType.JSON, dataset_type=dataset_type)
204
+
205
+
206
+ class MsgpackSerializer(_BytesSerializer):
207
+ """
208
+ msgpack deserializer for the Power grid model
209
+ """
210
+
211
+ def __new__(cls, data: Dataset, dataset_type: DatasetType | None = None):
212
+ return super().__new__(cls, data, SerializationType.MSGPACK, dataset_type=dataset_type)
213
+
214
+
215
+ def json_deserialize(
216
+ data: str | bytes,
217
+ data_filter: ComponentAttributeMapping = None,
218
+ ) -> Dataset:
219
+ """
220
+ Load serialized JSON data to a new dataset.
221
+
222
+ Args:
223
+ data: the data to deserialize.
224
+ data_filter: the data filter to apply to the dataset.
225
+
226
+ Raises:
227
+ ValueError: if the data is inconsistent with the rest of the dataset or a component is unknown.
228
+ PowerGridError: if there was an internal error.
229
+
230
+ Returns:
231
+ A tuple containing the deserialized dataset in Power grid model input format and the type of the dataset.
232
+ """
233
+ result = JsonDeserializer(data, data_filter=data_filter).load()
234
+ assert_no_error()
235
+ return result
236
+
237
+
238
+ def json_serialize(
239
+ data: Dataset,
240
+ dataset_type: DatasetType | None = None,
241
+ use_compact_list: bool = False,
242
+ indent: int = 2,
243
+ ) -> str:
244
+ """
245
+ Dump data to a JSON str.
246
+
247
+ If the dataset_type is not specified or None, it will be deduced from the dataset if possible.
248
+ Deduction is not possible in case data is empty.
249
+
250
+ Args:
251
+ data: the dataset
252
+ dataset_type: the type of the dataset. Defaults to None. Required str-type if data is empty.
253
+ use_compact_list: whether or not to use compact lists (sparse data). Defaults to False.
254
+ indent:
255
+ use specified indentation to make data more readable
256
+ Use 0 or negative value for no indentation. Defaults to 2
257
+
258
+ Raises:
259
+ PowerGridError: if there was an internal error.
260
+
261
+ Returns:
262
+ A serialized string containing the dataset.
263
+ """
264
+ data = _map_to_component_types(data)
265
+ if dataset_type is not None:
266
+ dataset_type = _str_to_datatype(dataset_type)
267
+ result = JsonSerializer(data=data, dataset_type=dataset_type).dump(use_compact_list=use_compact_list, indent=indent)
268
+ assert_no_error()
269
+ return result
270
+
271
+
272
+ def msgpack_deserialize(data: bytes, data_filter: ComponentAttributeMapping = None) -> Dataset:
273
+ """
274
+ Load serialized msgpack data to a new dataset.
275
+
276
+ Args:
277
+ data: the data to deserialize.
278
+
279
+ Raises:
280
+ ValueError: if the data is inconsistent with the rest of the dataset or a component is unknown.
281
+ PowerGridError: if there was an internal error.
282
+
283
+ Returns:
284
+ A tuple containing the deserialized dataset in Power grid model input format and the type of the dataset.
285
+ """
286
+ result = MsgpackDeserializer(data, data_filter=data_filter).load()
287
+ assert_no_error()
288
+ return result
289
+
290
+
291
+ def msgpack_serialize(
292
+ data: Dataset,
293
+ dataset_type: DatasetType | None = None,
294
+ use_compact_list: bool = False,
295
+ ) -> bytes:
296
+ """
297
+ Dump the data to raw msgpack bytes.
298
+
299
+ If the dataset_type is not specified or None, it will be deduced from the dataset if possible.
300
+ Deduction is not possible in case data is empty.
301
+
302
+ Args:
303
+ data: the dataset
304
+ dataset_type: the type of the dataset. Defaults to None. Required str-type if data is empty.
305
+ use_compact_list: whether or not to use compact lists (sparse data). Defaults to False.
306
+
307
+ Raises:
308
+ KeyError: if the dataset_type was not provided and could not be deduced from the dataset (i.e. it was empty).
309
+ PowerGridError: if there was an internal error.
310
+
311
+ Returns:
312
+ A serialized string containing the dataset.
313
+ """
314
+ data = _map_to_component_types(data)
315
+ if dataset_type is not None:
316
+ dataset_type = _str_to_datatype(dataset_type)
317
+ result = MsgpackSerializer(data=data, dataset_type=dataset_type).dump(use_compact_list=use_compact_list)
318
+ assert_no_error()
319
+ return result
@@ -0,0 +1,20 @@
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+
5
+ """
6
+ Type hints for for library-internal use.
7
+ """
8
+
9
+ from power_grid_model._core.dataset_definitions import ComponentType, ComponentTypeVar
10
+ from power_grid_model._core.enum import ComponentAttributeFilterOptions
11
+
12
+ ComponentAttributeMappingDict = dict[ComponentType, set[str] | list[str] | None | ComponentAttributeFilterOptions]
13
+
14
+ ComponentAttributeMapping = (
15
+ set[ComponentTypeVar]
16
+ | list[ComponentTypeVar]
17
+ | ComponentAttributeFilterOptions
18
+ | None
19
+ | ComponentAttributeMappingDict
20
+ )