Source code for ran.utils._hdf5_load

# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Loader for HDF5 files from Matlab."""

from pathlib import Path
from typing import Any

import h5py  # type: ignore[import-untyped]
import numpy as np


[docs] def hdf5_load(filename: Path | str) -> dict[str, Any]: """ Load data from an HDF5 file. Args: filename (Path): Path object pointing to the HDF5 file Returns ------- dict: Dictionary containing datasets """ result = {} filename = Path(filename) with h5py.File(filename, "r") as f: for name, item in f["/"].items(): if not isinstance(item, h5py.Dataset): # Current implementation only supports datasets (not groups) raise TypeError(f"Expected dataset, got {type(item)}") data = item[()] # Check if this is a complex number dataset (has 're' and 'im' fields) if isinstance(data, np.ndarray) and data.dtype.names is not None: if set(data.dtype.names) == {"re", "im"}: # Reconstruct complex array result[name] = np.transpose(data["re"] + 1j * data["im"]) else: # Regular structured array result[name] = data else: # Regular array result[name] = np.transpose(data) return result