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
« 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
6from .core import DataArray, Dataset, Variable
9def serialize(var: Union[Variable, DataArray, Dataset]) -> Tuple[Dict, List[bytes]]:
10 """Serialize Scipp object."""
11 from io import BytesIO
13 import h5py
15 from .io.hdf5 import HDF5IO
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
25def deserialize(
26 header: Dict, frames: List[bytes]
27) -> Union[Variable, DataArray, Dataset]:
28 """Deserialize Scipp object."""
29 from io import BytesIO
31 import h5py
33 from .io.hdf5 import HDF5IO
35 return HDF5IO.read(h5py.File(BytesIO(frames[0]), "r"))
38try:
39 from distributed.protocol import register_serialization
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']