Coverage for install/scipp/serialization.py: 88%

25 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-04-28 01:28 +0000

1# SPDX-License-Identifier: BSD-3-Clause 

2# Copyright (c) 2023 Scipp contributors (https://github.com/scipp) 

3# @author Simon Heybrock 

4from typing import Dict, List, Tuple, Union 

5 

6from .core import DataArray, Dataset, Variable 

7 

8 

9def serialize(var: Union[Variable, DataArray, Dataset]) -> Tuple[Dict, List[bytes]]: 

10 """Serialize Scipp object.""" 

11 from io import BytesIO 

12 

13 import h5py 

14 

15 from .io.hdf5 import HDF5IO 

16 

17 header = {} 

18 buf = BytesIO() 

19 with h5py.File(buf, "w") as f: 

20 HDF5IO.write(f, var) 

21 frames = [buf.getvalue()] 

22 return header, frames 

23 

24 

25def deserialize( 

26 header: Dict, frames: List[bytes] 

27) -> Union[Variable, DataArray, Dataset]: 

28 """Deserialize Scipp object.""" 

29 from io import BytesIO 

30 

31 import h5py 

32 

33 from .io.hdf5 import HDF5IO 

34 

35 return HDF5IO.read(h5py.File(BytesIO(frames[0]), "r")) 

36 

37 

38try: 

39 from distributed.protocol import register_serialization 

40 

41 register_serialization(Variable, serialize, deserialize) 

42 register_serialization(DataArray, serialize, deserialize) 

43 register_serialization(Dataset, serialize, deserialize) 

44except ImportError: 

45 pass 

46__all__ = ['serialize', 'deserialize']