88from dataclasses import dataclass
99from pathlib import Path
1010from tempfile import TemporaryDirectory
11- from typing import Literal
1211
1312import numpy as np
1413import pytest
1817from power_grid_model_ds ._core .model .arrays .base .array import FancyArray
1918from power_grid_model_ds ._core .utils .serialization import (
2019 _extract_extensions_data ,
21- _get_serialization_path ,
2220 _restore_extensions_data ,
2321 load_grid_from_json ,
24- load_grid_from_msgpack ,
2522 save_grid_to_json ,
26- save_grid_to_msgpack ,
2723)
2824from power_grid_model_ds .arrays import LineArray
2925from power_grid_model_ds .arrays import NodeArray as BaseNodeArray
@@ -95,46 +91,25 @@ def extended_grid():
9591class TestSerializationFormats :
9692 """Test serialization across different formats and configurations"""
9793
98- @pytest .mark .parametrize (
99- "format_type,preserve_ext" , [("json" , True ), ("json" , False ), ("msgpack" , True ), ("msgpack" , False )]
100- )
101- def test_basic_serialization_roundtrip (
102- self , basic_grid : Grid , temp_dir : Path , format_type : str , preserve_ext : bool
103- ):
94+ @pytest .mark .parametrize ("preserve_ext" , [(True ), (False )])
95+ def test_basic_serialization_roundtrip (self , basic_grid : Grid , temp_dir : Path , preserve_ext : bool ):
10496 """Test basic serialization roundtrip for all formats"""
105- ext = "json" if format_type == "json" else "msgpack"
106- path = temp_dir / f"test.{ ext } "
107-
108- # Save
109- if format_type == "json" :
110- result_path = save_grid_to_json (basic_grid , path , preserve_extensions = preserve_ext )
111- else :
112- result_path = save_grid_to_msgpack (basic_grid , path , preserve_extensions = preserve_ext )
113-
97+ path = temp_dir / "test.json"
98+ result_path = save_grid_to_json (basic_grid , path , preserve_extensions = preserve_ext )
11499 assert result_path .exists ()
115100
116101 # Load and verify
117- if format_type == "json" :
118- loaded_grid = load_grid_from_json (path , target_grid_class = Grid )
119- else :
120- loaded_grid = load_grid_from_msgpack (path , target_grid_class = Grid )
102+ loaded_grid = load_grid_from_json (path , target_grid_class = Grid )
121103 assert loaded_grid .node .size == basic_grid .node .size
122104 assert loaded_grid .line .size == basic_grid .line .size
123105 assert list (loaded_grid .node .id ) == list (basic_grid .node .id )
124106
125- @pytest .mark .parametrize ("format_type" , ["json" , "msgpack" ])
126- def test_extended_serialization_roundtrip (self , extended_grid : ExtendedGrid , temp_dir : Path , format_type : str ):
107+ def test_extended_serialization_roundtrip (self , extended_grid : ExtendedGrid , temp_dir : Path ):
127108 """Test extended serialization preserving custom data"""
128- ext = "json" if format_type == "json" else "msgpack"
129- path = temp_dir / f"extended.{ ext } "
109+ path = temp_dir / "extended.json"
130110
131- # Save with extensions
132- if format_type == "json" :
133- save_grid_to_json (extended_grid , path , preserve_extensions = True )
134- loaded_grid = load_grid_from_json (path , target_grid_class = ExtendedGrid )
135- else :
136- save_grid_to_msgpack (extended_grid , path , preserve_extensions = True )
137- loaded_grid = load_grid_from_msgpack (path , target_grid_class = ExtendedGrid )
111+ save_grid_to_json (extended_grid , path , preserve_extensions = True )
112+ loaded_grid = load_grid_from_json (path , target_grid_class = ExtendedGrid )
138113
139114 # Verify core data
140115 assert loaded_grid .node .size == extended_grid .node .size
@@ -148,37 +123,25 @@ def test_extended_serialization_roundtrip(self, extended_grid: ExtendedGrid, tem
148123class TestCrossTypeCompatibility :
149124 """Test cross-type loading and compatibility"""
150125
151- @pytest .mark .parametrize ("format_type" , ["json" , "msgpack" ])
152- def test_basic_to_extended_loading (self , basic_grid : Grid , temp_dir : Path , format_type : str ):
126+ def test_basic_to_extended_loading (self , basic_grid : Grid , temp_dir : Path ):
153127 """Test loading basic grid into extended type"""
154- ext = "json" if format_type == "json" else "msgpack"
155- path = temp_dir / f"basic.{ ext } "
128+ path = temp_dir / "basic.json"
156129
157130 # Save basic grid
158- if format_type == "json" :
159- save_grid_to_json (basic_grid , path )
160- loaded_grid = load_grid_from_json (path , target_grid_class = ExtendedGrid )
161- else :
162- save_grid_to_msgpack (basic_grid , path )
163- loaded_grid = load_grid_from_msgpack (path , target_grid_class = ExtendedGrid )
131+ save_grid_to_json (basic_grid , path )
132+ loaded_grid = load_grid_from_json (path , target_grid_class = ExtendedGrid )
164133
165134 # Core data should transfer
166135 assert loaded_grid .node .size == basic_grid .node .size
167136 assert loaded_grid .line .size == basic_grid .line .size
168137
169- @pytest .mark .parametrize ("format_type" , ["json" , "msgpack" ])
170- def test_extended_to_basic_loading (self , extended_grid : ExtendedGrid , temp_dir : Path , format_type : str ):
138+ def test_extended_to_basic_loading (self , extended_grid : ExtendedGrid , temp_dir : Path ):
171139 """Test loading extended grid into basic type"""
172- ext = "json" if format_type == "json" else "msgpack"
173- path = temp_dir / f"extended.{ ext } "
140+ path = temp_dir / "extended.json"
174141
175142 # Save extended grid
176- if format_type == "json" :
177- save_grid_to_json (extended_grid , path , preserve_extensions = True )
178- loaded_grid = load_grid_from_json (path , target_grid_class = Grid )
179- else :
180- save_grid_to_msgpack (extended_grid , path , preserve_extensions = True )
181- loaded_grid = load_grid_from_msgpack (path , target_grid_class = Grid )
143+ save_grid_to_json (extended_grid , path , preserve_extensions = True )
144+ loaded_grid = load_grid_from_json (path , target_grid_class = Grid )
182145
183146 # Core data should transfer
184147 assert loaded_grid .node .size == extended_grid .node .size
@@ -251,46 +214,6 @@ class GridWithCustomArray(Grid):
251214 np .testing .assert_array_almost_equal (loaded_grid .custom_metadata .metadata_value , [1.5 , 2.5 , 3.5 ])
252215 np .testing .assert_array_equal (loaded_grid .custom_metadata .category , [1 , 2 , 1 ])
253216
254- # Test MessagePack serialization
255- msgpack_path = temp_dir / "custom_array.msgpack"
256- save_grid_to_msgpack (grid , msgpack_path , preserve_extensions = True )
257-
258- # Load back and verify
259- loaded_grid_mp = load_grid_from_msgpack (msgpack_path , target_grid_class = GridWithCustomArray )
260-
261- # Verify core data
262- assert loaded_grid_mp .node .size == 2
263- np .testing .assert_array_equal (loaded_grid_mp .node .id , [1 , 2 ])
264-
265- # Verify custom array was preserved
266- assert hasattr (loaded_grid_mp , "custom_metadata" )
267- assert loaded_grid_mp .custom_metadata .size == 3
268- np .testing .assert_array_equal (loaded_grid_mp .custom_metadata .id , [100 , 200 , 300 ])
269- np .testing .assert_array_almost_equal (loaded_grid_mp .custom_metadata .metadata_value , [1.5 , 2.5 , 3.5 ])
270- np .testing .assert_array_equal (loaded_grid_mp .custom_metadata .category , [1 , 2 , 1 ])
271-
272-
273- class TestUtilityFunctions :
274- """Test utility functions and path handling"""
275-
276- @pytest .mark .parametrize (
277- "input_path,format_type,expected" ,
278- [
279- ("test.json" , "auto" , "test.json" ),
280- ("test.msgpack" , "auto" , "test.msgpack" ),
281- ("test.mp" , "auto" , "test.mp" ),
282- ("test.xyz" , "auto" , "test.json" ), # Unknown defaults to JSON
283- ("test.xyz" , "json" , "test.json" ),
284- ("test.xyz" , "msgpack" , "test.msgpack" ),
285- ],
286- )
287- def test_serialization_path_handling (
288- self , input_path : str , format_type : Literal ["json" , "msgpack" , "auto" ], expected : str
289- ):
290- """Test path handling and format detection"""
291- result = _get_serialization_path (Path (input_path ), format_type )
292- assert result == Path (expected )
293-
294217
295218class TestSpecialCases :
296219 """Test special cases and edge scenarios"""
@@ -300,18 +223,13 @@ def test_empty_grid_handling(self, temp_dir: Path):
300223 empty_grid = Grid .empty ()
301224
302225 json_path = temp_dir / "empty.json"
303- msgpack_path = temp_dir / "empty.msgpack"
304226
305227 # Should handle empty grids
306228 save_grid_to_json (empty_grid , json_path )
307- save_grid_to_msgpack (empty_grid , msgpack_path )
308229
309230 # Should load back as empty
310231 loaded_json = load_grid_from_json (json_path , target_grid_class = Grid )
311- loaded_msgpack = load_grid_from_msgpack (msgpack_path , target_grid_class = Grid )
312-
313232 assert loaded_json .node .size == 0
314- assert loaded_msgpack .node .size == 0
315233
316234 def test_custom_array_extraction_edge_cases (self , temp_dir : Path ):
317235 """Test edge cases in custom array extraction"""
0 commit comments