Source code for deepmr.io.generic.matlab
"""I/O Routines for MATLAB files."""
__all__ = ["read_matfile"]
import scipy.io
import mat73
from .pathlib import get_filepath
[docs]def read_matfile(filepath, return_fullpath=False):
    """
    Read matfile as a Python dictionary.
    Automatically handle legacy and HDF5 (i.e., -v7.3) formats.
    Parameters
    ----------
    filepath : str
        Path of the file on disk.
    return_fullpath : bool, optional
        If True, also return expanded file path. The default is False.
    Returns
    -------
    dict
        Deserialized matfile.
    Example
    -------
    >>> from os.path import dirname, join as pjoin
    >>> import scipy.io as sio
    Get the filename for an example .mat file from the tests/data directory.
    >>> dir = pjoin(dirname(sio.__file__), 'matlab', 'tests', 'data')
    >>> filepath = pjoin(dir, 'testdouble_7.4_GLNX86.mat')
    Load the .mat file contents.
    >>> import deepmr.io
    >>> matfile = deepmr.io.read_matfile(filepath)
    The result is a dictionary, one key/value pair for each variable:
    >>> matfile.keys()
    ['testdouble']
    >>> matfile['testdouble']
    array([[0.        , 0.78539816, 1.57079633, 2.35619449, 3.14159265,
            3.92699082, 4.71238898, 5.49778714, 6.28318531]])
    Contrary to ``scipy.io``, this will load matlab v7.3 files as well, using ``mat73`` library [1].
    In addition, ``__global__``, ``__header__`` and ``__version__`` fields are automatically
    discarded.
    References
    ----------
    [1]: https://github.com/skjerns/mat7.3/tree/master
    """
    filepath = get_filepath(filepath, True, "mat")
    try:
        matfile = scipy.io.loadmat(filepath)
        matfile.pop("__globals__", None)
        matfile.pop("__header__", None)
        matfile.pop("__version__", None)
    except:
        matfile = mat73.loadmat(filepath)
    if return_fullpath:
        return matfile, filepath
    return matfile