Source code for arim.io.scat

__all__ = ["load_scat", "load_scat_from_matlab"]


class InvalidFileFormat(Exception):
    pass


[docs] def load_scat(filename, format="auto"): """ Load scattering from any supported source. Parameters ---------- filename : str Filename format : str 'auto' (default), 'matlab' Returns ------- arim.scat.ScatFromData """ formats = ["matlab"] if format == "matlab": return load_scat_from_matlab(filename) elif format == "auto": for format in formats: try: return load_scat(filename, format=format) except InvalidFileFormat: pass # at this point, everything failed raise NotImplementedError("cannot determine the file format") else: raise ValueError("invalid format")
[docs] def load_scat_from_matlab(filename): """ Load scattering from Matlab. Parameters ---------- filename Returns ------- arim.scat.ScatFromData """ import scipy.io as sio from .. import scat try: data = sio.loadmat(filename) except NotImplementedError as e: raise InvalidFileFormat() from e frequencies = data["frequencies"] numfreq = frequencies.size if frequencies.shape not in {(1, numfreq), (numfreq, 1), (numfreq,)}: raise ValueError("invalid shape for 'frequencies'") frequencies = frequencies.reshape((numfreq,)) matrices = dict() for scat_key in scat.SCAT_KEYS: try: matrices[scat_key] = data[f"scattering_{scat_key}"] except KeyError: pass return scat.ScatFromData.from_dict(frequencies, matrices)