Source code for ewoksfluo.tests.utils.hdf5

from pathlib import Path
from typing import Any
from typing import Dict
from typing import Union

import h5py
import numpy

from ...io import hdf5


[docs] def assert_hdf5_content(file_path: Union[str, Path], expected: Dict[str, Any]) -> None: with h5py.File(file_path, "r") as f: actual = _read_content(f) assert actual == expected
def _read_content(group: hdf5.GroupType) -> Dict[str, Any]: info = dict() if group.attrs: info.update(_read_attrs("", dict(group.attrs))) for name, item in group.items(): if hdf5.is_group(item): info[name] = _read_content(item) else: info[f"{name}@shape"] = item.shape if item.attrs: info.update(_read_attrs(name, dict(item.attrs))) return info def _read_attrs(name, attrs: Dict[str, Any]) -> Dict[str, Any]: info = {} for attr_name in ( "long_name", "units", "axes", "interpretation", "NX_class", "creator", ): if attr_name in attrs: value = attrs.pop(attr_name) if isinstance(value, numpy.ndarray): value = value.tolist() info[f"{name}@{attr_name}"] = value signals = set() if "signal" in attrs: signals.add(attrs.pop("signal")) if "auxiliary_signals" in attrs: signals.update(attrs.pop("auxiliary_signals")) if signals: info[f"{name}@signals"] = signals if attrs: info[f"{name}@extra_attrs"] = set(attrs) return info