diff --git a/doc/file_specification/index.rst b/doc/file_specification/index.rst index 527363795..792f60ab1 100644 --- a/doc/file_specification/index.rst +++ b/doc/file_specification/index.rst @@ -34,7 +34,7 @@ MRC (CCP-EM) The :ref:`MRC ` file format is a standard open file format for electron microscopy data and is defined by `Cheng et al `_. The file format is described in -detail following the link as well: `MRC2014 `_. +detail following the link as well: `MRC2014 `_. Additionally Direct Electron saves a couple of files along with the ``.mrc`` file. In general, the file naming scheme is CurrentDate_MovieNumber_suffix_movie.mrc with the metadata file named CurrentDate_MovieNumber_suffix_info.txt. diff --git a/doc/supported_formats/mrcz.rst b/doc/supported_formats/mrcz.rst index bd2784ce9..2478dd56f 100644 --- a/doc/supported_formats/mrcz.rst +++ b/doc/supported_formats/mrcz.rst @@ -8,7 +8,7 @@ MRCZ format required. The ``mrcz`` format is an extension of the CCP-EM MRC2014 file format. -`CCP-EM MRC2014 `_ file format. +`CCP-EM MRC2014 `_ file format. It uses the `blosc` meta-compression library to bitshuffle and compress files in a blocked, multi-threaded environment. The supported data types are ``float32``, ``int8``, ``uint16``, ``int16`` and ``complex64``. diff --git a/rsciio/emd/_api.py b/rsciio/emd/_api.py index acd471456..a05ba5c40 100644 --- a/rsciio/emd/_api.py +++ b/rsciio/emd/_api.py @@ -25,6 +25,7 @@ import json import logging +from pathlib import Path import h5py @@ -95,6 +96,9 @@ def _is_EMD_velox(file): return True return False + if isinstance(file, Path): + file = str(file) + if isinstance(file, str): with h5py.File(file, "r") as f: return _is_EMD_velox(f) @@ -173,6 +177,9 @@ def file_reader( ModuleNotFoundError When reading spectrum image from Velox EMD file and the ``sparse`` library is missing. """ + if isinstance(filename, Path): + filename = str(filename) + file = h5py.File(filename, "r") dictionaries = [] try: @@ -230,6 +237,8 @@ def file_writer(filename, signal, chunks=None, **kwds): Dictionary containing metadata, which will be written as attribute of the root group. """ + if isinstance(filename, Path): + filename = str(filename) from ._emd_ncem import EMD_NCEM EMD_NCEM().write_file(filename, signal, chunks=chunks, **kwds) diff --git a/rsciio/hspy/_api.py b/rsciio/hspy/_api.py index f5bd6f5e7..0602c0b96 100644 --- a/rsciio/hspy/_api.py +++ b/rsciio/hspy/_api.py @@ -212,7 +212,10 @@ def file_writer( folder = signal["tmp_parameters"].get("original_folder", "") fname = signal["tmp_parameters"].get("original_filename", "") ext = signal["tmp_parameters"].get("original_extension", "") - original_path = Path(folder, f"{fname}.{ext}") + if ext and not ext.startswith("."): + # add a dot if not present + ext = f".{ext}" + original_path = Path(folder, f"{fname}{ext}") f = None if signal["attributes"]["_lazy"] and Path(filename).absolute() == original_path: diff --git a/rsciio/tests/test_bruker.py b/rsciio/tests/test_bruker.py index 52cb40995..b38cb8f06 100644 --- a/rsciio/tests/test_bruker.py +++ b/rsciio/tests/test_bruker.py @@ -3,7 +3,9 @@ import numpy as np import pytest +from packaging.version import Version +import rsciio from rsciio.bruker import export_metadata, file_reader from rsciio.utils.tests import assert_deep_almost_equal @@ -147,8 +149,12 @@ def test_hyperspy_wrap(): "FileIO": { "0": { "operation": "load", + "folder": str(TEST_DATA_DIR), + "filename": "30x30_instructively_packed_16bit_compressed", + "extension": ".bcf", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.bruker", + "rosettasciio_version": rsciio.__version__, } }, }, @@ -207,7 +213,13 @@ def test_hyperspy_wrap(): # original_metadata: omd_ref = json.load(fn) # delete FileIO timestamp since it's runtime dependent - del hype.metadata.General.FileIO.Number_0.timestamp + del hype.metadata.General.FileIO[0].timestamp + if Version(hs.__version__) < Version("2.4.0.dev64"): + del md_ref["General"]["FileIO"]["0"]["folder"] + del md_ref["General"]["FileIO"]["0"]["filename"] + del md_ref["General"]["FileIO"]["0"]["extension"] + del md_ref["General"]["FileIO"]["0"]["rosettasciio_version"] + assert_deep_almost_equal(hype.metadata.as_dictionary(), md_ref) assert_deep_almost_equal(hype.original_metadata.as_dictionary(), omd_ref) assert hype.metadata.General.date == "2018-10-04" diff --git a/rsciio/tests/test_delmic.py b/rsciio/tests/test_delmic.py index d91444571..c6d8d01dd 100644 --- a/rsciio/tests/test_delmic.py +++ b/rsciio/tests/test_delmic.py @@ -2,6 +2,7 @@ import numpy as np import pytest +from packaging.version import Version hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") pytest.importorskip("h5py", reason="h5py not installed") @@ -9,6 +10,10 @@ testfile_dir = (Path(__file__).parent / "data" / "delmic").resolve() testfile_hyperspectral_path = (testfile_dir / "test_hyperspectral.h5").resolve() +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "Delmic"} ref = np.array( [ @@ -529,7 +534,7 @@ def test_read(): - s = hs.load(testfile_hyperspectral_path, reader="Delmic") + s = hs.load(testfile_hyperspectral_path, **hs_load_kwargs) np.testing.assert_allclose(s.axes_manager[0].scale, 0.00010759749808557962) np.testing.assert_allclose(s.axes_manager[0].offset, 0) diff --git a/rsciio/tests/test_digitalmicrograph.py b/rsciio/tests/test_digitalmicrograph.py index f909f701b..930a5f35c 100644 --- a/rsciio/tests/test_digitalmicrograph.py +++ b/rsciio/tests/test_digitalmicrograph.py @@ -22,7 +22,9 @@ import numpy as np import pytest +from packaging.version import Version +import rsciio from rsciio.digitalmicrograph._api import ( DigitalMicrographReader, ImageObject, @@ -533,8 +535,12 @@ def test_multi_signal(): "FileIO": { "0": { "operation": "load", + "folder": str(DM_2D_PATH), + "filename": fname.stem, + "extension": ".dm3", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.digitalmicrograph", + "rosettasciio_version": rsciio.__version__, } }, }, @@ -580,8 +586,12 @@ def test_multi_signal(): "FileIO": { "0": { "operation": "load", + "folder": str(DM_2D_PATH), + "filename": fname.stem, + "extension": ".dm3", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.digitalmicrograph", + "rosettasciio_version": rsciio.__version__, } }, }, @@ -594,8 +604,14 @@ def test_multi_signal(): }, } # remove timestamps from metadata since these are runtime dependent - del s1.metadata.General.FileIO.Number_0.timestamp - del s2.metadata.General.FileIO.Number_0.timestamp + del s1.metadata.General.FileIO[0].timestamp + del s2.metadata.General.FileIO[0].timestamp + for md in [s1_md_truth, s2_md_truth]: + if Version(hs.__version__) < Version("2.4.0.dev64"): + del md["General"]["FileIO"]["0"]["folder"] + del md["General"]["FileIO"]["0"]["filename"] + del md["General"]["FileIO"]["0"]["extension"] + del md["General"]["FileIO"]["0"]["rosettasciio_version"] # make sure the metadata dictionaries are as we expect assert s1.metadata.as_dictionary() == s1_md_truth diff --git a/rsciio/tests/test_emd_velox.py b/rsciio/tests/test_emd_velox.py index 084fd6446..3d8b08476 100644 --- a/rsciio/tests/test_emd_velox.py +++ b/rsciio/tests/test_emd_velox.py @@ -31,7 +31,9 @@ import numpy as np import pytest from dateutil import tz +from packaging.version import Version +import rsciio from rsciio.utils.tests import assert_deep_almost_equal from rsciio.utils.tools import dummy_context_manager @@ -94,8 +96,12 @@ def test_fei_emd_image(self, lazy): "FileIO": { "0": { "operation": "load", + "folder": str(self.fei_files_path), + "filename": "fei_emd_image", + "extension": ".emd", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.emd", + "rosettasciio_version": rsciio.__version__, } }, }, @@ -119,7 +125,13 @@ def test_fei_emd_image(self, lazy): signal = hs.load(self.fei_files_path / "fei_emd_image.emd", lazy=lazy) # delete timestamp from metadata since it's runtime dependent - del signal.metadata.General.FileIO.Number_0.timestamp + del signal.metadata.General.FileIO[0].timestamp + if Version(hs.__version__) < Version("2.4.0.dev64"): + del md["General"]["FileIO"]["0"]["folder"] + del md["General"]["FileIO"]["0"]["filename"] + del md["General"]["FileIO"]["0"]["extension"] + del md["General"]["FileIO"]["0"]["rosettasciio_version"] + if lazy: assert signal._lazy signal.compute(close_file=True) diff --git a/rsciio/tests/test_empad.py b/rsciio/tests/test_empad.py index 0e79f9d94..47fee7bc6 100644 --- a/rsciio/tests/test_empad.py +++ b/rsciio/tests/test_empad.py @@ -35,6 +35,11 @@ FILENAME_STACK_RAW = DATA_DIR / "series_x10.raw" FILENAME_MAP_RAW = DATA_DIR / "scan_x4_y4.raw" +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "EMPAD"} + def _create_raw_data(filename, shape): size = np.prod(shape) @@ -61,7 +66,7 @@ def teardown_module(module): @pytest.mark.parametrize("lazy", (False, True)) def test_read_stack(lazy): # xml file version 0.51 211118 - s = hs.load(DATA_DIR / "stack_images.xml", lazy=lazy, reader="EMPAD") + s = hs.load(DATA_DIR / "stack_images.xml", lazy=lazy, **hs_load_kwargs) assert s.data.dtype == "float32" ref_data = np.arange(166400).reshape((10, 130, 128))[..., :128, :] np.testing.assert_allclose(s.data, ref_data.astype("float32")) @@ -92,7 +97,7 @@ def test_read_stack(lazy): @pytest.mark.parametrize("lazy", (False, True)) def test_read_map(lazy): # xml file version 0.51 211118 - s = hs.load(DATA_DIR / "map4x4.xml", lazy=lazy, reader="EMPAD") + s = hs.load(DATA_DIR / "map4x4.xml", lazy=lazy, **hs_load_kwargs) assert s.data.dtype == "float32" ref_data = np.arange(266240).reshape((4, 4, 130, 128))[..., :128, :] np.testing.assert_allclose(s.data, ref_data.astype("float32")) diff --git a/rsciio/tests/test_hamamatsu.py b/rsciio/tests/test_hamamatsu.py index 00cb37d2b..60c091d35 100644 --- a/rsciio/tests/test_hamamatsu.py +++ b/rsciio/tests/test_hamamatsu.py @@ -22,6 +22,7 @@ import numpy as np import pytest +from packaging.version import Version hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") @@ -33,11 +34,16 @@ testfile_shading_path = (testfile_dir / "shading_file.img").resolve() testfile_xaxisother_path = (testfile_dir / "xaxis_other.img").resolve() +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "Hamamatsu"} + class TestOperate: @classmethod def setup_class(cls): - cls.s = hs.load(testfile_operate_mode_path, reader="Hamamatsu") + cls.s = hs.load(testfile_operate_mode_path, **hs_load_kwargs) @classmethod def teardown_class(cls): @@ -329,7 +335,7 @@ def test_lumispy(self): class TestFocus: @classmethod def setup_class(cls): - cls.s_focus = hs.load(testfile_focus_mode_path, reader="Hamamatsu") + cls.s_focus = hs.load(testfile_focus_mode_path, **hs_load_kwargs) @classmethod def teardown_class(cls): @@ -363,7 +369,7 @@ def test_axes_focus(self): class TestPhotonCount: @classmethod def setup_class(cls): - cls.s = hs.load(testfile_photon_count_path, reader="Hamamatsu") + cls.s = hs.load(testfile_photon_count_path, **hs_load_kwargs) @classmethod def teardown_class(cls): @@ -390,7 +396,7 @@ def test_metadata(self): class TestShading: @classmethod def setup_class(cls): - cls.s = hs.load(testfile_shading_path, reader="Hamamatsu") + cls.s = hs.load(testfile_shading_path, **hs_load_kwargs) @classmethod def teardown_class(cls): @@ -410,7 +416,7 @@ def test_data(self): class TestOther: @classmethod def setup_class(cls): - cls.s = hs.load(testfile_xaxisother_path, reader="Hamamatsu") + cls.s = hs.load(testfile_xaxisother_path, **hs_load_kwargs) @classmethod def teardown_class(cls): diff --git a/rsciio/tests/test_hspy.py b/rsciio/tests/test_hspy.py index 56d64a9a6..c81d331f2 100644 --- a/rsciio/tests/test_hspy.py +++ b/rsciio/tests/test_hspy.py @@ -25,8 +25,9 @@ import dask.array as da import numpy as np import pytest +from packaging.version import Version -from rsciio.utils.tests import assert_deep_almost_equal +import rsciio from rsciio.utils.tools import get_file_handle hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") @@ -53,6 +54,11 @@ else: zspy_marker = pytest.mark.parametrize("file", ["test.hspy", "test.zspy"]) +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "HSPY"} + data = np.array( [ @@ -145,7 +151,7 @@ def test_original_metadata(self): class TestExample1_12(Example1): def setup_method(self, method): - self.s = hs.load(TEST_DATA_PATH / "example1_v1.2.hdf5", reader="HSPY") + self.s = hs.load(TEST_DATA_PATH / "example1_v1.2.hdf5", **hs_load_kwargs) def test_date(self): assert self.s.metadata.General.date == "1991-10-01" @@ -156,17 +162,17 @@ def test_time(self): class TestExample1_10(Example1): def setup_method(self, method): - self.s = hs.load(TEST_DATA_PATH / "example1_v1.0.hdf5", reader="HSPY") + self.s = hs.load(TEST_DATA_PATH / "example1_v1.0.hdf5", **hs_load_kwargs) class TestExample1_11(Example1): def setup_method(self, method): - self.s = hs.load(TEST_DATA_PATH / "example1_v1.1.hdf5", reader="HSPY") + self.s = hs.load(TEST_DATA_PATH / "example1_v1.1.hdf5", **hs_load_kwargs) class TestLoadingNewSavedMetadata: def setup_method(self, method): - self.s = hs.load(TEST_DATA_PATH / "with_lists_etc.hdf5", reader="HSPY") + self.s = hs.load(TEST_DATA_PATH / "with_lists_etc.hdf5", **hs_load_kwargs) def test_signal_inside(self): np.testing.assert_array_almost_equal( @@ -386,8 +392,12 @@ def test_metadata_update_to_v3_1(self): "FileIO": { "0": { "operation": "load", + "folder": str(TEST_DATA_PATH), + "filename": "example2_v3.1", + "extension": ".hspy", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.hspy", + "rosettasciio_version": rsciio.__version__, } }, }, @@ -409,12 +419,17 @@ def test_metadata_update_to_v3_1(self): } s = hs.load(TEST_DATA_PATH / "example2_v3.1.hspy") # delete timestamp from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp - assert_deep_almost_equal(s.metadata.as_dictionary(), md) + del s.metadata.General.FileIO[0].timestamp + if Version(hs.__version__) < Version("2.4.0.dev64"): + del md["General"]["FileIO"]["0"]["folder"] + del md["General"]["FileIO"]["0"]["filename"] + del md["General"]["FileIO"]["0"]["extension"] + del md["General"]["FileIO"]["0"]["rosettasciio_version"] + assert s.metadata.as_dictionary() == md def test_none_metadata(): - s = hs.load(TEST_DATA_PATH / "none_metadata.hdf5", reader="HSPY") + s = hs.load(TEST_DATA_PATH / "none_metadata.hdf5", **hs_load_kwargs) assert s.metadata.should_be_None is None @@ -422,7 +437,7 @@ def test_rgba16(): print(TEST_DATA_PATH) # noqa: T201 with pytest.warns(VisibleDeprecationWarning): # The binned attribute has been moved from metadata.Signal - s = hs.load(TEST_DATA_PATH / "test_rgba16.hdf5", reader="HSPY") + s = hs.load(TEST_DATA_PATH / "test_rgba16.hdf5", **hs_load_kwargs) data = np.load(TEST_NPZ_DATA_PATH / "test_rgba16.npz")["a"] assert (s.data == data).all() @@ -491,7 +506,7 @@ def test_lazy_loading(tmp_path): s.create_dataset("data", shape=shape, dtype="float64", chunks=True) f.close() - s = hs.load(fname, lazy=True, reader="HSPY") + s = hs.load(fname, lazy=True, **hs_load_kwargs) assert shape == s.data.shape assert isinstance(s.data, da.Array) assert s._lazy @@ -779,7 +794,7 @@ def test_load_unknown_marker_type(self): # where one of them has an unknown marker type and raise an error fname = TEST_DATA_PATH / "test_marker_bad_marker_type.hdf5" with pytest.raises(AttributeError): - _ = hs.load(fname, reader="HSPY") + _ = hs.load(fname, **hs_load_kwargs) def test_load_missing_y2_value(self): # test_marker_point_y2_data_deleted.hdf5 has 5 markers, @@ -789,7 +804,7 @@ def test_load_missing_y2_value(self): fname = TEST_DATA_PATH / "test_marker_point_y2_data_deleted.hdf5" with pytest.warns(VisibleDeprecationWarning): # The binned attribute has been moved from metadata.Signal - s = hs.load(fname, reader="HSPY") + s = hs.load(fname, **hs_load_kwargs) assert len(s.metadata.Markers) == 5 def test_save_variable_length_markers(self, tmp_path): diff --git a/rsciio/tests/test_io.py b/rsciio/tests/test_io.py index 256df0969..3efaa6107 100644 --- a/rsciio/tests/test_io.py +++ b/rsciio/tests/test_io.py @@ -25,7 +25,9 @@ import numpy as np import pytest +from packaging.version import Version +import rsciio from rsciio import IO_PLUGINS hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") @@ -36,6 +38,10 @@ TEST_DATA_PATH = Path(__file__).parent / "data" FULLFILENAME = Path(__file__).parent / "test_io_overwriting.hspy" +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) + class TestIOOverwriting: def setup_method(self, method): @@ -199,8 +205,10 @@ def test_file_reader_error(tmp_path): f = tmp_path / "temp.hspy" s.save(f) + hs_load_kwargs = {argument_name: 123} + with pytest.raises(ValueError, match="reader"): - _ = hs.load(f, reader=123) + _ = hs.load(f, **hs_load_kwargs) def test_file_reader_warning(caplog, tmp_path): @@ -209,8 +217,9 @@ def test_file_reader_warning(caplog, tmp_path): f = tmp_path / "temp.hspy" s.save(f) try: + hs_load_kwargs = {argument_name: "some_unknown_file_extension"} with caplog.at_level(logging.WARNING): - _ = hs.load(f, reader="some_unknown_file_extension") + _ = hs.load(f, **hs_load_kwargs) assert "Unable to infer file type from extension" in caplog.text except (ValueError, OSError): @@ -218,49 +227,58 @@ def test_file_reader_warning(caplog, tmp_path): pass -def test_file_reader_options(): +def test_file_reader_options(tmp_path): s = hs.signals.Signal1D(np.arange(10)) - with tempfile.TemporaryDirectory() as dirpath: - f = os.path.join(dirpath, "temp.hspy") - s.save(f) - f2 = os.path.join(dirpath, "temp.emd") - s.save(f2) + f = tmp_path / "temp.hspy" + s.save(f) + f2 = tmp_path / "temp.emd" + s.save(f2) - # Test string reader - t = hs.load(Path(dirpath, "temp.hspy"), reader="hspy") - assert len(t) == 1 - np.testing.assert_allclose(t.data, np.arange(10)) + argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" + ) + hs_load_kwargs = {argument_name: "hspy"} - # Test string reader uppercase - t = hs.load(Path(dirpath, "temp.hspy"), reader="HSpy") - assert len(t) == 1 - np.testing.assert_allclose(t.data, np.arange(10)) + # Test string reader + t = hs.load(f, **hs_load_kwargs) + assert len(t) == 1 + np.testing.assert_allclose(t.data, np.arange(10)) - # Test string reader alias - t = hs.load(Path(dirpath, "temp.hspy"), reader="hyperspy") - assert len(t) == 1 - np.testing.assert_allclose(t.data, np.arange(10)) + # Test string reader uppercase + t = hs.load(tmp_path / "temp.hspy", **hs_load_kwargs) + assert len(t) == 1 + np.testing.assert_allclose(t.data, np.arange(10)) - # Test string reader name - t = hs.load(Path(dirpath, "temp.emd"), reader="emd") - assert len(t) == 1 - np.testing.assert_allclose(t.data, np.arange(10)) + # Test string reader alias + hs_load_kwargs = {argument_name: "hyperspy"} + t = hs.load(tmp_path / "temp.hspy", **hs_load_kwargs) + assert len(t) == 1 + np.testing.assert_allclose(t.data, np.arange(10)) - # Test string reader aliases - t = hs.load(Path(dirpath, "temp.emd"), reader="Electron Microscopy Data (EMD)") - assert len(t) == 1 - np.testing.assert_allclose(t.data, np.arange(10)) - t = hs.load(Path(dirpath, "temp.emd"), reader="Electron Microscopy Data") - assert len(t) == 1 - np.testing.assert_allclose(t.data, np.arange(10)) + # Test string reader name + hs_load_kwargs = {argument_name: "emd"} + t = hs.load(tmp_path / "temp.emd", **hs_load_kwargs) + assert len(t) == 1 + np.testing.assert_allclose(t.data, np.arange(10)) - # Test object reader - from rsciio import hspy + # Test string reader aliases + hs_load_kwargs = {argument_name: "Electron Microscopy Data (EMD)"} + t = hs.load(tmp_path / "temp.emd", **hs_load_kwargs) + assert len(t) == 1 + np.testing.assert_allclose(t.data, np.arange(10)) + hs_load_kwargs = {argument_name: "Electron Microscopy Data"} + t = hs.load(tmp_path / "temp.emd", **hs_load_kwargs) + assert len(t) == 1 + np.testing.assert_allclose(t.data, np.arange(10)) - t = hs.load(Path(dirpath, "temp.hspy"), reader=hspy) - assert len(t) == 1 - np.testing.assert_allclose(t.data, np.arange(10)) + # Test object reader + from rsciio import hspy + + hs_load_kwargs = {argument_name: hspy} + t = hs.load(tmp_path / "temp.hspy", **hs_load_kwargs) + assert len(t) == 1 + np.testing.assert_allclose(t.data, np.arange(10)) def test_save_default_format(tmp_path): @@ -288,7 +306,7 @@ def test_load_original_metadata(tmp_path): assert t.original_metadata.as_dictionary() == {} -def test_load_save_filereader_metadata(): +def test_load_save_filereader_metadata(tmp_path): # tests that original FileReader metadata is correctly persisted and # appended through a save and load cycle s = hs.load(TEST_DATA_PATH / "msa" / "example1.msa") @@ -296,33 +314,49 @@ def test_load_save_filereader_metadata(): assert s.metadata.General.FileIO.Number_0.operation == "load" assert s.metadata.General.FileIO.Number_0.hyperspy_version == hs.__version__ - with tempfile.TemporaryDirectory() as dirpath: - f = os.path.join(dirpath, "temp") - s.save(f) - expected = { - "0": { - "io_plugin": "rsciio.msa", - "operation": "load", - "hyperspy_version": hs.__version__, - }, - "1": { - "io_plugin": "rsciio.hspy", - "operation": "save", - "hyperspy_version": hs.__version__, - }, - "2": { - "io_plugin": "rsciio.hspy", - "operation": "load", - "hyperspy_version": hs.__version__, - }, - } - del s.metadata.General.FileIO.Number_0.timestamp # runtime dependent - del s.metadata.General.FileIO.Number_1.timestamp # runtime dependent - assert s.metadata.General.FileIO.Number_0.as_dictionary() == expected["0"] - assert s.metadata.General.FileIO.Number_1.as_dictionary() == expected["1"] - - t = hs.load(Path(dirpath, "temp.hspy")) - del t.metadata.General.FileIO.Number_0.timestamp # runtime dependent - del t.metadata.General.FileIO.Number_1.timestamp # runtime dependent - del t.metadata.General.FileIO.Number_2.timestamp # runtime dependent - assert t.metadata.General.FileIO.as_dictionary() == expected + s.save(tmp_path / "temp.hspy") + expected = { + "0": { + "io_plugin": "rsciio.msa", + "operation": "load", + "folder": str(TEST_DATA_PATH / "msa"), + "filename": "example1", + "extension": ".msa", + "hyperspy_version": hs.__version__, + "rosettasciio_version": rsciio.__version__, + }, + "1": { + "io_plugin": "rsciio.hspy", + "operation": "save", + "folder": str(tmp_path), + "filename": "temp", + "extension": ".hspy", + "hyperspy_version": hs.__version__, + "rosettasciio_version": rsciio.__version__, + }, + "2": { + "io_plugin": "rsciio.hspy", + "operation": "load", + "folder": str(tmp_path), + "filename": "temp", + "extension": ".hspy", + "hyperspy_version": hs.__version__, + "rosettasciio_version": rsciio.__version__, + }, + } + if Version(hs.__version__) < Version("2.4.0.dev64"): + for i in range(3): + del expected[str(i)]["folder"] + del expected[str(i)]["filename"] + del expected[str(i)]["extension"] + del expected[str(i)]["rosettasciio_version"] + del s.metadata.General.FileIO.Number_0.timestamp # runtime dependent + del s.metadata.General.FileIO.Number_1.timestamp # runtime dependent + assert s.metadata.General.FileIO.Number_0.as_dictionary() == expected["0"] + assert s.metadata.General.FileIO.Number_1.as_dictionary() == expected["1"] + + t = hs.load(tmp_path / "temp.hspy") + del t.metadata.General.FileIO.Number_0.timestamp # runtime dependent + del t.metadata.General.FileIO.Number_1.timestamp # runtime dependent + del t.metadata.General.FileIO.Number_2.timestamp # runtime dependent + assert t.metadata.General.FileIO.as_dictionary() == expected diff --git a/rsciio/tests/test_jeol.py b/rsciio/tests/test_jeol.py index 3f20d9300..b43c3e9d5 100644 --- a/rsciio/tests/test_jeol.py +++ b/rsciio/tests/test_jeol.py @@ -22,6 +22,9 @@ import numpy as np import pytest +from packaging.version import Version + +import rsciio hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") @@ -77,12 +80,17 @@ def teardown_module(module): "Dummy-Data_0000024.APB", ] +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "jeol"} + def test_load_project(): pytest.importorskip("numba") # test load all elements of the project rawdata.ASW filename = TESTS_FILE_PATH / TEST_FILES[0] - s = hs.load(filename, reader="JEOL") + s = hs.load(filename, **hs_load_kwargs) # first file is always a 16bit image of the work area assert s[0].data.dtype == np.uint8 assert s[0].data.shape == (512, 512) @@ -118,12 +126,12 @@ def test_load_project(): # check scale (image) filename = TESTS_FILE_PATH / "Sample" / "00_View000" / TEST_FILES[1] - s1 = hs.load(filename, reader="JEOL") + s1 = hs.load(filename, **hs_load_kwargs) np.testing.assert_allclose(s[0].axes_manager[0].scale, s1.axes_manager[0].scale) assert s[0].axes_manager[0].units == s1.axes_manager[0].units # check scale (pts) filename = TESTS_FILE_PATH / "Sample" / "00_View000" / TEST_FILES[7] - s2 = hs.load(filename, reader="JEOL") + s2 = hs.load(filename, **hs_load_kwargs) np.testing.assert_allclose(s[6].axes_manager[0].scale, s2.axes_manager[0].scale) assert s[6].axes_manager[0].units == s2.axes_manager[0].units @@ -131,7 +139,7 @@ def test_load_project(): def test_load_image(): # test load work area haadf image filename = TESTS_FILE_PATH / "Sample" / "00_View000" / TEST_FILES[1] - s = hs.load(filename, reader="JEOL") + s = hs.load(filename, **hs_load_kwargs) assert s.data.dtype == np.uint8 assert s.data.shape == (512, 512) assert s.axes_manager.signal_dimension == 2 @@ -148,7 +156,7 @@ def test_load_datacube(SI_dtype): pytest.importorskip("numba") # test load eds datacube filename = TESTS_FILE_PATH / "Sample" / "00_View000" / TEST_FILES[7] - s = hs.load(filename, SI_dtype=SI_dtype, cutoff_at_kV=5, reader="JEOL") + s = hs.load(filename, SI_dtype=SI_dtype, cutoff_at_kV=5, **hs_load_kwargs) assert s.data.dtype == SI_dtype assert s.data.shape == (512, 512, 596) assert s.axes_manager.signal_dimension == 1 @@ -168,20 +176,20 @@ def test_load_datacube(SI_dtype): def test_load_datacube_rebin_energy(): pytest.importorskip("numba") filename = TESTS_FILE_PATH / "Sample" / "00_View000" / TEST_FILES[7] - s = hs.load(filename, cutoff_at_kV=0.1, reader="JEOL") + s = hs.load(filename, cutoff_at_kV=0.1, **hs_load_kwargs) s_sum = s.sum() ref_data = hs.signals.Signal1D(np.array([3, 23, 77, 200, 487, 984, 1599, 2391])) np.testing.assert_allclose(s_sum.data[88:96], ref_data.data) rebin_energy = 8 - s2 = hs.load(filename, rebin_energy=rebin_energy, reader="JEOL") + s2 = hs.load(filename, rebin_energy=rebin_energy, **hs_load_kwargs) s2_sum = s2.sum() np.testing.assert_allclose(s2_sum.data[11:12], ref_data.data.sum()) with pytest.raises(ValueError, match="must be a divisor"): - _ = hs.load(filename, rebin_energy=10, reader="JEOL") + _ = hs.load(filename, rebin_energy=10, **hs_load_kwargs) def test_load_datacube_cutoff_at_kV(): @@ -189,8 +197,8 @@ def test_load_datacube_cutoff_at_kV(): gc.collect() cutoff_at_kV = 10.0 filename = TESTS_FILE_PATH / "Sample" / "00_View000" / TEST_FILES[7] - s = hs.load(filename, cutoff_at_kV=None, reader="JEOL") - s2 = hs.load(filename, cutoff_at_kV=cutoff_at_kV, reader="JEOL") + s = hs.load(filename, cutoff_at_kV=None, **hs_load_kwargs) + s2 = hs.load(filename, cutoff_at_kV=cutoff_at_kV, **hs_load_kwargs) assert s2.axes_manager[-1].size == 1096 np.testing.assert_allclose(s2.axes_manager[2].scale, 0.00999866) @@ -203,8 +211,8 @@ def test_load_datacube_downsample(): pytest.importorskip("numba") downsample = 8 filename = TESTS_FILE_PATH / TEST_FILES[0] - s = hs.load(filename, downsample=1, reader="JEOL")[-1] - s2 = hs.load(filename, downsample=downsample, reader="JEOL")[-1] + s = hs.load(filename, downsample=1, **hs_load_kwargs)[-1] + s2 = hs.load(filename, downsample=downsample, **hs_load_kwargs)[-1] s_sum = s.sum(-1).rebin(scale=(downsample, downsample)) s2_sum = s2.sum(-1) @@ -221,34 +229,34 @@ def test_load_datacube_downsample(): np.testing.assert_allclose(s_sum.data, s2_sum.data) with pytest.raises(ValueError, match="must be a divisor"): - _ = hs.load(filename, downsample=10, reader="JEOL")[-1] + _ = hs.load(filename, downsample=10, **hs_load_kwargs)[-1] with pytest.raises( ValueError, match="`downsample` can't be an iterable of length different from 2.", ): - _ = hs.load(filename, downsample=[2, 2, 2], reader="JEOL")[-1] + _ = hs.load(filename, downsample=[2, 2, 2], **hs_load_kwargs)[-1] downsample = [8, 16] - s = hs.load(filename, downsample=downsample, reader="JEOL")[-1] + s = hs.load(filename, downsample=downsample, **hs_load_kwargs)[-1] assert s.axes_manager["x"].size * downsample[0] == 512 assert s.axes_manager["y"].size * downsample[1] == 512 with pytest.raises(ValueError, match="must be a divisor"): - _ = hs.load(filename, downsample=[256, 100], reader="JEOL")[-1] + _ = hs.load(filename, downsample=[256, 100], **hs_load_kwargs)[-1] with pytest.raises(ValueError, match="must be a divisor"): - _ = hs.load(filename, downsample=[100, 256], reader="JEOL")[-1] + _ = hs.load(filename, downsample=[100, 256], **hs_load_kwargs)[-1] def test_load_datacube_frames(): pytest.importorskip("numba") rebin_energy = 2048 filename = TESTS_FILE_PATH / "Sample" / "00_View000" / TEST_FILES[7] - s = hs.load(filename, sum_frames=True, rebin_energy=rebin_energy, reader="JEOL") + s = hs.load(filename, sum_frames=True, rebin_energy=rebin_energy, **hs_load_kwargs) assert s.data.shape == (512, 512, 2) s_frame = hs.load( - filename, sum_frames=False, rebin_energy=rebin_energy, reader="JEOL" + filename, sum_frames=False, rebin_energy=rebin_energy, **hs_load_kwargs ) assert s_frame.data.shape == (14, 512, 512, 2) np.testing.assert_allclose(s_frame.sum(axis="Frame").data, s.data) @@ -282,7 +290,7 @@ def test_load_eds_file(filename_as_string): filename = TESTS_FILE_PATH / "met03.EDS" if filename_as_string: filename = str(filename) - s = hs.load(filename, reader="JEOL") + s = hs.load(filename, **hs_load_kwargs) assert s.metadata.Signal.signal_type == "EDS_TEM" assert isinstance(s, hs.signals.Signal1D) assert s.data.shape == (2048,) @@ -292,11 +300,7 @@ def test_load_eds_file(filename_as_string): assert axis.offset == -0.00176612 assert axis.scale == 0.0100004 - # delete timestamp from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp - - md_dict = s.metadata.as_dictionary() - assert md_dict["General"] == { + md_ref = { "original_filename": "met03.EDS", "time": "14:14:51", "date": "2018-06-25", @@ -304,11 +308,25 @@ def test_load_eds_file(filename_as_string): "FileIO": { "0": { "operation": "load", + "folder": str(TESTS_FILE_PATH), + "filename": "met03", + "extension": ".EDS", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.jeol", + "rosettasciio_version": rsciio.__version__, } }, } + # delete timestamp from metadata since it's runtime dependent + del s.metadata.General.FileIO[0].timestamp + if Version(hs.__version__) < Version("2.4.0.dev64"): + del md_ref["FileIO"]["0"]["folder"] + del md_ref["FileIO"]["0"]["filename"] + del md_ref["FileIO"]["0"]["extension"] + del md_ref["FileIO"]["0"]["rosettasciio_version"] + + md_dict = s.metadata.as_dictionary() + assert md_dict["General"] == md_ref TEM_dict = md_dict["Acquisition_instrument"]["TEM"] assert TEM_dict == { "beam_energy": 200.0, @@ -332,7 +350,7 @@ def test_shift_jis_encoding(): with open(filename, "br"): pass try: - _ = hs.load(filename, reader="JEOL") + _ = hs.load(filename, **hs_load_kwargs) except FileNotFoundError: # we don't have the other files required to open the data pass @@ -362,7 +380,7 @@ def test_number_of_frames(): downsample=[32, 32], rebin_energy=512, SI_dtype=np.int32, - reader="JEOL", + **hs_load_kwargs, ) assert data.axes_manager["Frame"].size == frames @@ -374,7 +392,7 @@ def test_number_of_frames(): downsample=[32, 32], rebin_energy=512, SI_dtype=np.int32, - reader="JEOL", + **hs_load_kwargs, ) assert data.axes_manager["Frame"].size == valid @@ -391,7 +409,7 @@ def test_em_image_in_pts(): read_em_image=False, only_valid_data=False, cutoff_at_kV=1, - reader="JEOL", + **hs_load_kwargs, ) assert len(s) == 7 @@ -400,7 +418,7 @@ def test_em_image_in_pts(): read_em_image=True, only_valid_data=False, cutoff_at_kV=1, - reader="JEOL", + **hs_load_kwargs, ) assert len(s) == 7 @@ -410,7 +428,7 @@ def test_em_image_in_pts(): read_em_image=False, only_valid_data=False, cutoff_at_kV=1, - reader="JEOL", + **hs_load_kwargs, ) assert len(s) == 22 s = hs.load( @@ -418,7 +436,7 @@ def test_em_image_in_pts(): read_em_image=True, only_valid_data=False, cutoff_at_kV=1, - reader="JEOL", + **hs_load_kwargs, ) assert len(s) == 25 assert ( @@ -436,7 +454,7 @@ def test_em_image_in_pts(): sum_frames=True, cutoff_at_kV=1, frame_list=[0, 0, 0, 1], - reader="JEOL", + **hs_load_kwargs, ) assert s[1].data[0, 0] == 87 * 4 assert s[1].data[63, 63] == 87 * 3 @@ -447,7 +465,7 @@ def test_em_image_in_pts(): only_valid_data=False, sum_frames=False, cutoff_at_kV=1, - reader="JEOL", + **hs_load_kwargs, ) s2 = hs.load( dir2p / TEST_FILES2[16], @@ -455,7 +473,7 @@ def test_em_image_in_pts(): only_valid_data=False, sum_frames=True, cutoff_at_kV=1, - reader="JEOL", + **hs_load_kwargs, ) s1 = [s[0].data.sum(axis=0), s[1].data.sum(axis=0)] assert np.array_equal(s1[0], s2[0].data) @@ -472,7 +490,7 @@ def test_pts_lazy(): only_valid_data=False, sum_frames=False, lazy=True, - reader="JEOL", + **hs_load_kwargs, ) s1 = [s[0].data.sum(axis=0).compute(), s[1].data.sum(axis=0).compute()] s2 = hs.load( @@ -481,7 +499,7 @@ def test_pts_lazy(): only_valid_data=False, sum_frames=True, lazy=False, - reader="JEOL", + **hs_load_kwargs, ) assert np.array_equal(s1[0], s2[0].data) assert np.array_equal(s1[1], s2[1].data) @@ -498,7 +516,7 @@ def test_pts_frame_shift(): only_valid_data=False, sum_frames=False, lazy=False, - reader="JEOL", + **hs_load_kwargs, ) # x, y, en points = [[24, 23, 106], [21, 16, 106]] @@ -528,7 +546,7 @@ def test_pts_frame_shift(): sum_frames=False, frame_shifts=shifts, lazy=False, - reader="JEOL", + **hs_load_kwargs, ) for frame in range(s0[0].axes_manager["Frame"].size): @@ -546,7 +564,7 @@ def test_pts_frame_shift(): sum_frames=False, frame_shifts=shifts, lazy=True, - reader="JEOL", + **hs_load_kwargs, ) dt = s1[0].data.compute() for frame in range(s0[0].axes_manager["Frame"].size): @@ -562,7 +580,11 @@ def test_pts_frame_shift(): min_sfts = sfts.min(axis=0) fs = sfts - max_sfts s = hs.load( - file, frame_shifts=sfts, sum_frames=False, only_valid_data=False, reader="JEOL" + file, + frame_shifts=sfts, + sum_frames=False, + only_valid_data=False, + **hs_load_kwargs, ) sz = min_sfts - max_sfts + ref[0].data.shape[1:3] assert s.data.shape == (2, sz[0], sz[1], 4096) @@ -583,10 +605,10 @@ def test_broken_files(tmp_path): if file.suffix == ".asw": # in case of asw, valid data can not be obtained with pytest.raises(ValueError, match="Not a valid JEOL asw format"): - _ = hs.load(file, reader="JEOL") + _ = hs.load(file, **hs_load_kwargs) else: # just skipping broken files - s = hs.load(file, reader="JEOL") + s = hs.load(file, **hs_load_kwargs) assert s == [] @@ -604,7 +626,7 @@ def test_seq_eds_files(tmp_path): zipped.extractall(tmp_path) # test reading sequential acuired EDS spectrum - s = hs.load(tmp_path / "1" / "1.ASW", reader="JEOL") + s = hs.load(tmp_path / "1" / "1.ASW", **hs_load_kwargs) # check if three subfiles are in file (img, eds, eds) assert len(s) == 3 # check positional information in subfiles @@ -634,7 +656,7 @@ def test_seq_eds_files(tmp_path): data2[0x42D] = 0x30 with open(fname2, "wb") as f: f.write(data2) - dat = hs.load(fname2, reader="JEOL") + dat = hs.load(fname2, **hs_load_kwargs) assert len(dat) == 0 # No ViewInfo @@ -642,7 +664,7 @@ def test_seq_eds_files(tmp_path): data2[0x1AD] = 0x30 with open(fname2, "wb") as f: f.write(data2) - dat = hs.load(fname2, reader="JEOL") + dat = hs.load(fname2, **hs_load_kwargs) assert len(dat) == 0 # No SampleInfo @@ -650,7 +672,7 @@ def test_seq_eds_files(tmp_path): data2[0x6E] = 0x30 with open(fname2, "wb") as f: f.write(data2) - dat = hs.load(fname2, reader="JEOL") + dat = hs.load(fname2, **hs_load_kwargs) assert len(dat) == 0 # test read for pseudo SEM eds/img data @@ -665,7 +687,7 @@ def test_seq_eds_files(tmp_path): data[0x75BD] = 0x41 with open(sub_dir / ("x" + test_files[0]), "wb") as f: f.write(data) - s = hs.load(sub_dir / ("x" + test_files[0]), reader="JEOL") + s = hs.load(sub_dir / ("x" + test_files[0]), **hs_load_kwargs) assert "SEM" in s.metadata["Acquisition_instrument"] # .eds @@ -674,7 +696,7 @@ def test_seq_eds_files(tmp_path): data[0x4B13] = 0x34 with open(sub_dir / ("x" + test_files[1]), "wb") as f: f.write(data) - s = hs.load(sub_dir / ("x" + test_files[1]), reader="JEOL") + s = hs.load(sub_dir / ("x" + test_files[1]), **hs_load_kwargs) assert s.metadata.Signal.signal_type == "EDS_SEM" assert isinstance(s, hs.signals.Signal1D) assert "SEM" in s.metadata["Acquisition_instrument"] @@ -707,7 +729,7 @@ def test_frame_start_index(tmp_path): downsample=[32, 32], rebin_energy=512, SI_dtype=np.int32, - reader="JEOL", + **hs_load_kwargs, ) frame_start_index = ref.original_metadata.jeol_pts_frame_start_index assert np.array_equal(frame_start_index, frame_start_index_ref) @@ -718,7 +740,7 @@ def test_frame_start_index(tmp_path): downsample=[32, 32], rebin_energy=512, SI_dtype=np.int32, - reader="JEOL", + **hs_load_kwargs, ) frame_start_index = s.original_metadata.jeol_pts_frame_start_index assert np.array_equal(frame_start_index[0:6], frame_start_index_ref[0:6]) @@ -731,7 +753,7 @@ def test_frame_start_index(tmp_path): downsample=[32, 32], rebin_energy=512, SI_dtype=np.int32, - reader="JEOL", + **hs_load_kwargs, ) frame_start_index = s.original_metadata.jeol_pts_frame_start_index assert np.array_equal(frame_start_index[0:10], frame_start_index_ref[0:10]) @@ -745,7 +767,7 @@ def test_frame_start_index(tmp_path): downsample=[32, 32], rebin_energy=512, SI_dtype=np.int32, - reader="JEOL", + **hs_load_kwargs, ) assert s.data.shape == (2, 16, 16, 8) @@ -763,6 +785,6 @@ def test_frame_start_index(tmp_path): downsample=[32, 32], rebin_energy=512, SI_dtype=np.int32, - reader="JEOL", + **hs_load_kwargs, ) assert s.metadata["Signal"]["signal_type"] == "EDS_SEM" diff --git a/rsciio/tests/test_jobinyvon.py b/rsciio/tests/test_jobinyvon.py index c2c5f5742..19e736197 100644 --- a/rsciio/tests/test_jobinyvon.py +++ b/rsciio/tests/test_jobinyvon.py @@ -27,6 +27,7 @@ import numpy as np import pytest +from packaging.version import Version hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") @@ -49,37 +50,43 @@ lumispy_installed = True +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "JobinYvon"} + + class TestSpec: @classmethod def setup_class(cls): cls.s = hs.load( testfile_spec_wavelength_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=True, ) cls.s_non_uniform = hs.load( testfile_spec_wavelength_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=False, ) cls.s_wn = hs.load( testfile_spec_wavenumber_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=True, ) cls.s_abs_wn = hs.load( testfile_spec_abs_wavenumber_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=True, ) cls.s_ev = hs.load( testfile_spec_energy_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=True, ) cls.s_count = hs.load( testfile_spec_count_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=True, ) @@ -101,7 +108,7 @@ def test_lumispectrum(self): lum = pytest.importorskip("lumispy", reason="lumispy not installed") s_lum = hs.load( testfile_spec_wavelength_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=True, ) assert isinstance(s_lum, lum.signals.luminescence_spectrum.LumiSpectrum) @@ -447,12 +454,12 @@ class TestLinescan: def setup_class(cls): cls.s = hs.load( testfile_linescan_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=True, ) cls.s_non_uniform = hs.load( testfile_linescan_path, - reader="JobinYvon", + **hs_load_kwargs, use_uniform_signal_axis=False, ) @@ -680,12 +687,12 @@ class TestMap: @classmethod def setup_class(cls): cls.s = hs.load( - testfile_map_path, reader="JobinYvon", use_uniform_signal_axis=True + testfile_map_path, **hs_load_kwargs, use_uniform_signal_axis=True ) cls.s_non_uniform = hs.load( - testfile_map_path, reader="JobinYvon", use_uniform_signal_axis=False + testfile_map_path, **hs_load_kwargs, use_uniform_signal_axis=False ) - cls.s_rotated = hs.load(testfile_map_rotated_path, reader="JobinYvon") + cls.s_rotated = hs.load(testfile_map_rotated_path, **hs_load_kwargs) @classmethod def teardown_class(cls): @@ -987,10 +994,10 @@ class TestGlue: @classmethod def setup_class(cls): cls.s = hs.load( - testfile_glue_path, reader="JobinYvon", use_uniform_signal_axis=True + testfile_glue_path, **hs_load_kwargs, use_uniform_signal_axis=True ) cls.s_non_uniform = hs.load( - testfile_glue_path, reader="JobinYvon", use_uniform_signal_axis=False + testfile_glue_path, **hs_load_kwargs, use_uniform_signal_axis=False ) @classmethod diff --git a/rsciio/tests/test_mrcz.py b/rsciio/tests/test_mrcz.py index 1dba234f6..1503baca5 100644 --- a/rsciio/tests/test_mrcz.py +++ b/rsciio/tests/test_mrcz.py @@ -19,7 +19,6 @@ import importlib import os import tempfile -from datetime import datetime from time import perf_counter, sleep import numpy as np @@ -84,20 +83,6 @@ def compareSaveLoad( if lazy: testSignal = testSignal.as_lazy() - # Add "File" metadata to testSignal - testSignal.metadata.General.add_dictionary( - { - "FileIO": { - "0": { - "operation": "load", - "hyperspy_version": hs.__version__, - "io_plugin": "rsciio.mrcz", - "timestamp": datetime.now().astimezone().isoformat(), - } - } - } - ) - # Unfortunately one cannot iterate over axes_manager in a Pythonic way # for axis in testSignal.axes_manager: testSignal.axes_manager[0].name = "z" @@ -147,9 +132,7 @@ def compareSaveLoad( print("Warning: file {} left on disk".format(mrcName)) # noqa: T201 # change file timestamp to make the metadata of both signals equal - testSignal.metadata.General.FileIO.Number_0.timestamp = ( - reSignal.metadata.General.FileIO.Number_0.timestamp - ) + del testSignal.metadata.General.FileIO npt.assert_array_almost_equal(testSignal.data.shape, reSignal.data.shape) npt.assert_array_almost_equal(testSignal.data, reSignal.data) @@ -176,7 +159,7 @@ def compareSaveLoad( assert isinstance(reSignal, hs.signals.Signal2D) # delete last load operation from reSignal metadata so we can compare - del reSignal.metadata.General.FileIO.Number_2 + del reSignal.metadata.General.FileIO assert_deep_almost_equal( testSignal.axes_manager.as_dictionary(), reSignal.axes_manager.as_dictionary(), diff --git a/rsciio/tests/test_msa.py b/rsciio/tests/test_msa.py index eee9c53c4..afefaec16 100644 --- a/rsciio/tests/test_msa.py +++ b/rsciio/tests/test_msa.py @@ -2,8 +2,9 @@ from pathlib import Path import pytest +from packaging.version import Version -from rsciio.utils.tests import assert_deep_almost_equal +import rsciio hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") @@ -38,8 +39,12 @@ "FileIO": { "0": { "operation": "load", + "folder": str(TEST_DATA_PATH), + "filename": "example1", + "extension": ".msa", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.msa", + "rosettasciio_version": rsciio.__version__, } }, }, @@ -135,8 +140,12 @@ "FileIO": { "0": { "operation": "load", + "folder": str(TEST_DATA_PATH), + "filename": "example2", + "extension": ".msa", "hyperspy_version": hs.__version__, "io_plugin": "rsciio.msa", + "rosettasciio_version": rsciio.__version__, } }, }, @@ -233,36 +242,42 @@ def test_parameters(self): assert example1_parameters == self.s.original_metadata.as_dictionary() def test_metadata(self): - assert_deep_almost_equal(self.s.metadata.as_dictionary(), example1_metadata) + s = self.s + md = copy.copy(example1_metadata) + if Version(hs.__version__) < Version("2.4.0.dev64"): + del md["General"]["FileIO"]["0"]["folder"] + del md["General"]["FileIO"]["0"]["filename"] + del md["General"]["FileIO"]["0"]["extension"] + del md["General"]["FileIO"]["0"]["rosettasciio_version"] + assert s.metadata.as_dictionary() == md def test_write_load_cycle(self, tmp_path): fname2 = tmp_path / "example1-export.msa" - self.s.save(fname2) + s = self.s + s.save(fname2) s2 = hs.load(fname2) - # delete timestamp from metadata since it's runtime dependent - del s2.metadata.General.FileIO.Number_0.timestamp - del self.s.metadata.General.FileIO.Number_1 - if "timestamp" in self.s.metadata.General.FileIO.Number_0: - del self.s.metadata.General.FileIO.Number_0.timestamp + # delete FileIO that will differ + del s2.metadata.General.FileIO + del s.metadata.General.FileIO assert s2.metadata.General.original_filename == "example1-export.msa" s2.metadata.General.original_filename = "example1.msa" - assert_deep_almost_equal( - self.s.metadata.as_dictionary(), s2.metadata.as_dictionary() - ) + assert s.metadata.as_dictionary() == s2.metadata.as_dictionary() class TestExample1WrongDate: def setup_method(self, method): self.s = hs.load(TEST_DATA_PATH / "example1_wrong_date.msa") # delete timestamp from metadata since it's runtime dependent - del self.s.metadata.General.FileIO.Number_0.timestamp + del self.s.metadata.General.FileIO def test_metadata(self): + s = self.s md = copy.copy(example1_metadata) + md["General"]["original_filename"] = "example1_wrong_date.msa" + del md["General"]["FileIO"] del md["General"]["date"] del md["General"]["time"] - md["General"]["original_filename"] = "example1_wrong_date.msa" - assert_deep_almost_equal(self.s.metadata.as_dictionary(), md) + assert s.metadata.as_dictionary() == md class TestExample2: @@ -359,20 +374,25 @@ def test_parameters(self): assert example2_parameters == self.s.original_metadata.as_dictionary() def test_metadata(self): - assert_deep_almost_equal(self.s.metadata.as_dictionary(), example2_metadata) + md = copy.copy(example2_metadata) + if Version(hs.__version__) < Version("2.4.0.dev64"): + del md["General"]["FileIO"]["0"]["folder"] + del md["General"]["FileIO"]["0"]["filename"] + del md["General"]["FileIO"]["0"]["extension"] + del md["General"]["FileIO"]["0"]["rosettasciio_version"] + assert self.s.metadata.as_dictionary() == md def test_write_load_cycle(self, tmp_path): fname2 = tmp_path / "example2-export.msa" - self.s.save(fname2) + s = self.s + s.save(fname2) s2 = hs.load(fname2) assert s2.metadata.General.original_filename == "example2-export.msa" s2.metadata.General.original_filename = "example2.msa" - # delete timestamp from metadata since it's runtime dependent - del s2.metadata.General.FileIO.Number_0.timestamp - del self.s.metadata.General.FileIO.Number_1 - assert_deep_almost_equal( - self.s.metadata.as_dictionary(), s2.metadata.as_dictionary() - ) + # delete FileIO that will be different + del s.metadata.General.FileIO + del s2.metadata.General.FileIO + assert s.metadata.as_dictionary() == s2.metadata.as_dictionary() def test_minimum_metadata_example(): diff --git a/rsciio/tests/test_protochips.py b/rsciio/tests/test_protochips.py index a8130d2c2..e3f5e6026 100644 --- a/rsciio/tests/test_protochips.py +++ b/rsciio/tests/test_protochips.py @@ -20,6 +20,7 @@ import numpy as np import pytest +from packaging.version import Version from rsciio.protochips._api import ProtochipsCSV, invalid_file_error @@ -37,6 +38,12 @@ def create_numpy_file(filename, obj): np.save(filename, data.T) +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "protochips"} + + ####################### # Protochips gas cell # ####################### @@ -44,7 +51,7 @@ def create_numpy_file(filename, obj): def test_read_protochips_gas_cell(): filename = TEST_DATA_PATH / "protochips_gas_cell.csv" - s = hs.load(filename, reader="protochips") + s = hs.load(filename, **hs_load_kwargs) assert len(s) == 5 assert s[0].metadata.General.title == "Holder Temperature (Degrees C)" assert s[0].metadata.Signal.signal_type == "" @@ -84,14 +91,14 @@ def test_loading_random_csv_file(): def test_loading_invalid_protochips_file(): filename = TEST_DATA_PATH / "invalid_protochips_file.csv" with pytest.raises(IOError) as cm: - hs.load(filename, reader="protochips") + hs.load(filename, **hs_load_kwargs) cm.match(invalid_file_error) class TestProtochipsGasCellCSV: def setup_method(self, method): filename = TEST_DATA_PATH / "protochips_gas_cell.csv" - self.s_list = hs.load(filename, reader="protochips") + self.s_list = hs.load(filename, **hs_load_kwargs) def test_read_metadata(self): date, time, dt_np = datetime_gas_cell @@ -123,7 +130,7 @@ def test_read_original_metadata(self): class TestProtochipsGasCellCSVNoUser: def setup_method(self, method): filename = TEST_DATA_PATH / "protochips_gas_cell_no_user.csv" - self.s_list = hs.load(filename, reader="protochips") + self.s_list = hs.load(filename, **hs_load_kwargs) def test_read_metadata(self): date, time, dt_np = datetime_gas_cell_no_user @@ -198,7 +205,7 @@ def test_read_metadata_header(self): def test_read_protochips_electrical(): filename = TEST_DATA_PATH / "protochips_electrical.csv" - s = hs.load(filename, reader="protochips") + s = hs.load(filename, **hs_load_kwargs) assert len(s) == 6 assert s[0].metadata.General.title == "Channel A Current (Amps)" assert s[0].metadata.Signal.signal_type == "" @@ -259,7 +266,7 @@ def test_read_data(self): def test_read_protochips_thermal(): filename = TEST_DATA_PATH / "protochips_thermal.csv" - s = hs.load(filename, reader="protochips") + s = hs.load(filename, **hs_load_kwargs) assert s.metadata.General.title == "Channel A Temperature (Degrees C)" assert s.metadata.Signal.signal_type == "" assert s.metadata.Signal.quantity == "Temperature (Degrees C)" @@ -296,7 +303,7 @@ def test_read_data(self): def test_read_protochips_electrothermal(): filename = TEST_DATA_PATH / "protochips_electrothermal.csv" - s = hs.load(filename, reader="protochips") + s = hs.load(filename, **hs_load_kwargs) assert len(s) == 4 assert s[0].metadata.General.title == "Channel A Temperature (Degrees C)" assert s[0].metadata.Signal.signal_type == "" diff --git a/rsciio/tests/test_renishaw.py b/rsciio/tests/test_renishaw.py index 7afa46bce..a8f83536e 100644 --- a/rsciio/tests/test_renishaw.py +++ b/rsciio/tests/test_renishaw.py @@ -54,13 +54,11 @@ class TestSpec: def setup_class(cls): cls.s = hs.load( testfile_spec, - reader="Renishaw", use_uniform_signal_axis=True, ) cls.s_non_uniform = hs.load( testfile_spec, - reader="Renishaw", use_uniform_signal_axis=False, ) @@ -893,11 +891,7 @@ def test_metadata(self): class TestLinescan: @classmethod def setup_class(cls): - cls.s = hs.load( - testfile_linescan, - reader="Renishaw", - use_uniform_signal_axis=True, - )[0] + cls.s = hs.load(testfile_linescan, use_uniform_signal_axis=True)[0] @classmethod def teardown_class(cls): @@ -975,7 +969,6 @@ class TestMap: def setup_class(cls): cls.s = hs.load( testfile_map, - reader="Renishaw", use_uniform_signal_axis=True, )[0] @@ -1110,7 +1103,6 @@ class TestZscan: def setup_class(cls): cls.s = hs.load( testfile_zscan, - reader="Renishaw", use_uniform_signal_axis=True, ) @@ -1158,7 +1150,6 @@ class TestUndefined: def setup_class(cls): cls.s = hs.load( testfile_undefined, - reader="Renishaw", use_uniform_signal_axis=True, ) @@ -1184,7 +1175,6 @@ class TestStreamline: def setup_class(cls): cls.s = hs.load( testfile_streamline, - reader="Renishaw", use_uniform_signal_axis=True, )[0] @@ -1205,7 +1195,6 @@ def test_data(self): def test_WHTL(self): s = hs.load( testfile_streamline, - reader="Renishaw", )[1] expected_WTHL = { "FocalPlaneResolutionUnit": 5, @@ -1288,7 +1277,6 @@ class TestMapBlock: def setup_class(cls): cls.s = hs.load( testfile_map_block, - reader="Renishaw", use_uniform_signal_axis=True, )[0] @@ -1328,7 +1316,6 @@ class TestTimeseries: def setup_class(cls): cls.s = hs.load( testfile_timeseries, - reader="Renishaw", use_uniform_signal_axis=True, ) @@ -1360,7 +1347,6 @@ class TestFocusTrack: def setup_class(cls): cls.s = hs.load( testfile_focustrack, - reader="Renishaw", use_uniform_signal_axis=True, ) @@ -1480,17 +1466,14 @@ class TestIntegrationtime: def setup_class(cls): cls.s_11 = hs.load( testfile_acc1_exptime1, - reader="Renishaw", use_uniform_signal_axis=False, ) cls.s_21 = hs.load( testfile_acc2_exptime1, - reader="Renishaw", use_uniform_signal_axis=False, ) cls.s_110 = hs.load( testfile_acc1_exptime10, - reader="Renishaw", use_uniform_signal_axis=False, ) diff --git a/rsciio/tests/test_tiff.py b/rsciio/tests/test_tiff.py index ab117dcf0..0608fbfb3 100644 --- a/rsciio/tests/test_tiff.py +++ b/rsciio/tests/test_tiff.py @@ -475,13 +475,6 @@ class TestReadFEIHelios: "authors": "supervisor", "date": "2016-06-13", "time": "17:06:40", - "FileIO": { - "0": { - "operation": "load", - "hyperspy_version": hs.__version__, - "io_plugin": "rsciio.tiff", - } - }, }, "Signal": {"signal_type": ""}, "_HyperSpy": { @@ -509,7 +502,6 @@ class TestReadFEIHelios: "date": "2022-05-17", "time": "09:07:08", "authors": "user", - "FileIO": {"0": {"operation": "load", "io_plugin": "rsciio.tiff"}}, }, "Signal": {"signal_type": ""}, "Acquisition_instrument": { @@ -544,7 +536,7 @@ def test_read_FEI_SEM_scale_metadata_8bits(self): np.testing.assert_allclose(s.axes_manager[1].scale, 3.3724, rtol=1e-5) assert s.data.dtype == "uint8" # delete timestamp from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp + del s.metadata.General.FileIO self.FEI_Helios_metadata["General"]["original_filename"] = ( "FEI-Helios-Ebeam-8bits.tif" ) @@ -561,7 +553,7 @@ def test_read_FEI_SEM_scale_metadata_16bits(self): np.testing.assert_allclose(s.axes_manager[1].scale, 3.3724, rtol=1e-5) assert s.data.dtype == "uint16" # delete timestamp from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp + del s.metadata.General.FileIO self.FEI_Helios_metadata["General"]["original_filename"] = ( "FEI-Helios-Ebeam-16bits.tif" ) @@ -578,8 +570,7 @@ def test_read_FEI_navcam_metadata(self): np.testing.assert_allclose(s.axes_manager[1].scale, 0.2640, rtol=0.0001) assert s.data.dtype == "uint8" # delete timestamp and version from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp - del s.metadata.General.FileIO.Number_0.hyperspy_version + del s.metadata.General.FileIO self.FEI_navcam_metadata["General"]["original_filename"] = ( "FEI-Helios-navcam.tif" ) @@ -596,8 +587,7 @@ def test_read_FEI_navcam_no_IRBeam_metadata(self): np.testing.assert_allclose(s.axes_manager[1].scale, 1, rtol=0) assert s.data.dtype == "uint8" # delete timestamp and version from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp - del s.metadata.General.FileIO.Number_0.hyperspy_version + del s.metadata.General.FileIO self.FEI_navcam_metadata["General"]["original_filename"] = ( "FEI-Helios-navcam-with-no-IRBeam.tif" ) @@ -609,8 +599,7 @@ def test_read_FEI_navcam_no_IRBeam_bad_floats_metadata(self): assert s.axes_manager.signal_shape == (768, 551) assert s.axes_manager.navigation_shape == () # delete timestamp and version from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp - del s.metadata.General.FileIO.Number_0.hyperspy_version + del s.metadata.General.FileIO self.FEI_navcam_metadata["General"]["original_filename"] = ( "FEI-Helios-navcam-with-no-IRBeam-bad-floats.tif" ) @@ -658,13 +647,6 @@ def test_read_Zeiss_SEM_scale_metadata_1k_image(self): "original_filename": "test_tiff_Zeiss_SEM_1k.tif", "time": "09:40:32", "title": "", - "FileIO": { - "0": { - "operation": "load", - "hyperspy_version": hs.__version__, - "io_plugin": "rsciio.tiff", - } - }, }, "Signal": {"signal_type": ""}, "_HyperSpy": { @@ -688,7 +670,7 @@ def test_read_Zeiss_SEM_scale_metadata_1k_image(self): np.testing.assert_allclose(s.axes_manager[1].scale, 2.614514, rtol=1e-6) assert s.data.dtype == "uint8" # delete timestamp from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp + del s.metadata.General.FileIO assert_deep_almost_equal(s.metadata.as_dictionary(), md) def test_read_Zeiss_SEM_scale_metadata_512_image(self): @@ -714,13 +696,6 @@ def test_read_Zeiss_SEM_scale_metadata_512_image(self): "original_filename": "test_tiff_Zeiss_SEM_512pix.tif", "time": "08:20:42", "title": "", - "FileIO": { - "0": { - "operation": "load", - "hyperspy_version": hs.__version__, - "io_plugin": "rsciio.tiff", - } - }, }, "Signal": {"signal_type": ""}, "_HyperSpy": { @@ -743,7 +718,7 @@ def test_read_Zeiss_SEM_scale_metadata_512_image(self): np.testing.assert_allclose(s.axes_manager[1].scale, 0.011649976, rtol=1e-6) assert s.data.dtype == "uint8" # delete timestamp from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp + del s.metadata.General.FileIO assert_deep_almost_equal(s.metadata.as_dictionary(), md) def test_zeiss_multipage_as_separate_signals(self): @@ -883,13 +858,6 @@ def test_read_TVIPS_metadata(tmp_path): "original_filename": "TVIPS_bin4.tif", "time": "9:01:17", "title": "", - "FileIO": { - "0": { - "operation": "load", - "hyperspy_version": hs.__version__, - "io_plugin": "rsciio.tiff", - } - }, }, "Signal": {"signal_type": ""}, "_HyperSpy": { @@ -915,7 +883,7 @@ def test_read_TVIPS_metadata(tmp_path): np.testing.assert_allclose(s.axes_manager[0].scale, 1.42080, rtol=1e-5) np.testing.assert_allclose(s.axes_manager[1].scale, 1.42080, rtol=1e-5) # delete timestamp from metadata since it's runtime dependent - del s.metadata.General.FileIO.Number_0.timestamp + del s.metadata.General.FileIO assert_deep_almost_equal(s.metadata.as_dictionary(), md) diff --git a/rsciio/tests/test_trivista.py b/rsciio/tests/test_trivista.py index a0743d4fe..b69bd3baa 100644 --- a/rsciio/tests/test_trivista.py +++ b/rsciio/tests/test_trivista.py @@ -52,13 +52,11 @@ class TestSpec: def setup_class(cls): cls.s = hs.load( testfile_spec_path, - reader="TriVista", use_uniform_signal_axis=True, filter_original_metadata=True, ) cls.s_non_uniform_unfiltered = hs.load( testfile_spec_path, - reader="TriVista", use_uniform_signal_axis=False, filter_original_metadata=False, ) @@ -1538,11 +1536,10 @@ def test_unfiltered_original_metadata(self): class TestLinescan: @classmethod def setup_class(cls): - cls.s = hs.load( - testfile_linescan_path, reader="TriVista", use_uniform_signal_axis=True - ) + cls.s = hs.load(testfile_linescan_path, use_uniform_signal_axis=True) cls.s_non_uniform = hs.load( - testfile_linescan_path, reader="TriVista", use_uniform_signal_axis=False + testfile_linescan_path, + use_uniform_signal_axis=False, ) @classmethod @@ -1646,12 +1643,8 @@ def test_original_metadata(self): class TestMap: @classmethod def setup_class(cls): - cls.s = hs.load( - testfile_map_path, reader="TriVista", use_uniform_signal_axis=True - ) - cls.s_non_uniform = hs.load( - testfile_map_path, reader="TriVista", use_uniform_signal_axis=False - ) + cls.s = hs.load(testfile_map_path, use_uniform_signal_axis=True) + cls.s_non_uniform = hs.load(testfile_map_path, use_uniform_signal_axis=False) @classmethod def teardown_class(cls): @@ -1787,7 +1780,6 @@ class Test3Spectrometers: def setup_class(cls): cls.s = hs.load( testfile_triple_add_path, - reader="TriVista", use_uniform_signal_axis=True, filter_original_metadata=True, ) @@ -2335,14 +2327,12 @@ class TestStepAndGlue: def setup_class(cls): cls.glued = hs.load( testfile_step_and_glue_path, - reader="TriVista", use_uniform_signal_axis=True, filter_original_metadata=True, glued_data_as_stack=False, ) cls.stack = hs.load( testfile_step_and_glue_path, - reader="TriVista", use_uniform_signal_axis=False, filter_original_metadata=True, glued_data_as_stack=True, @@ -2418,13 +2408,11 @@ class TestTimeSeries: def setup_class(cls): cls.timeseries = hs.load( testfile_spec_timeseries_path, - reader="TriVista", use_uniform_signal_axis=True, filter_original_metadata=True, ) cls.frames = hs.load( testfile_spec_2frames_path, - reader="TriVista", use_uniform_signal_axis=True, filter_original_metadata=True, ) @@ -2509,7 +2497,6 @@ class TestSpecIntegrationTime: def setup_class(cls): cls.s_2acc = hs.load( testfile_spec_2acc_path, - reader="TriVista", use_uniform_signal_axis=True, filter_original_metadata=True, glued_data_as_stack=True, @@ -2519,7 +2506,6 @@ def setup_class(cls): ## non-glued datasets cls.s_2acc_no_average = hs.load( testfile_spec_2acc_no_average_path, - reader="TriVista", use_uniform_signal_axis=True, filter_original_metadata=True, glued_data_as_stack=True, diff --git a/rsciio/tests/test_usid.py b/rsciio/tests/test_usid.py index 1b5226a97..79a5634dc 100644 --- a/rsciio/tests/test_usid.py +++ b/rsciio/tests/test_usid.py @@ -21,6 +21,7 @@ import dask.array as da import numpy as np import pytest +from packaging.version import Version hs = pytest.importorskip("hyperspy.api", reason="hyperspy not installed") usid = pytest.importorskip("pyUSID", reason="pyUSID not installed") @@ -29,6 +30,11 @@ # ##################### HELPER FUNCTIONS ###################################### +argument_name = ( + "reader" if Version(hs.__version__) < Version("2.4.0.dev33") else "file_format" +) +hs_load_kwargs = {argument_name: "USID"} + def _array_translator_basic_checks(h5_f): assert len(h5_f.items()) == 1 @@ -516,7 +522,7 @@ def test_n_pos_0_spec(self): slow_to_fast=slow_to_fast, ) - new_sig = hs.load(file_path, reader="USID") + new_sig = hs.load(file_path, **hs_load_kwargs) compare_signal_from_usid( file_path, ndata, new_sig, sig_type=hs.signals.BaseSignal, axes_to_spec=[] ) @@ -542,7 +548,7 @@ def test_0_pos_n_spec(self): slow_to_fast=slow_to_fast, ) - new_sig = hs.load(file_path, reader="USID") + new_sig = hs.load(file_path, **hs_load_kwargs) compare_signal_from_usid( file_path, ndata, new_sig, sig_type=hs.signals.BaseSignal, axes_to_spec=[] ) @@ -567,7 +573,7 @@ def test_base_n_pos_m_spec(self, lazy, slow_to_fast=True): slow_to_fast=slow_to_fast, ) - new_sig = hs.load(file_path, reader="USID", lazy=lazy) + new_sig = hs.load(file_path, lazy=lazy, **hs_load_kwargs) compare_signal_from_usid( file_path, ndata, @@ -601,7 +607,7 @@ def test_complex(self): slow_to_fast=slow_to_fast, ) - new_sig = hs.load(file_path, reader="USID") + new_sig = hs.load(file_path, **hs_load_kwargs) compare_signal_from_usid( file_path, ndata, @@ -630,7 +636,7 @@ def test_compound(self): slow_to_fast=slow_to_fast, ) - objects = hs.load(file_path, reader="USID") + objects = hs.load(file_path, **hs_load_kwargs) assert isinstance(objects, list) assert len(objects) == 2 @@ -673,10 +679,10 @@ def test_non_uniform_dimension(self): ) with pytest.raises(ValueError): - _ = hs.load(file_path, reader="USID", ignore_non_uniform_dims=False) + _ = hs.load(file_path, ignore_non_uniform_dims=False, **hs_load_kwargs) with pytest.warns(UserWarning) as _: - new_sig = hs.load(file_path, reader="USID") + new_sig = hs.load(file_path, **hs_load_kwargs) compare_signal_from_usid( file_path, ndata, @@ -730,7 +736,7 @@ def test_pick_specific(self): ) dataset_path = "/Measurement_001/Channel_000/Raw_Data" - new_sig = hs.load(file_path, dataset_path=dataset_path, reader="USID") + new_sig = hs.load(file_path, dataset_path=dataset_path, **hs_load_kwargs) compare_signal_from_usid(file_path, ndata_2, new_sig, dataset_path=dataset_path) def test_read_all_by_default(self): @@ -772,7 +778,7 @@ def test_read_all_by_default(self): slow_to_fast=slow_to_fast, ) - objects = hs.load(file_path, reader="USID") + objects = hs.load(file_path, **hs_load_kwargs) assert isinstance(objects, list) assert len(objects) == 2 diff --git a/upcoming_changes/425.maintenance.rst b/upcoming_changes/425.maintenance.rst new file mode 100644 index 000000000..71014ac42 --- /dev/null +++ b/upcoming_changes/425.maintenance.rst @@ -0,0 +1 @@ +Use ``file_format`` instead of deprecated ``reader`` in hyperspy load function. Update test suite for changes in ``FileIO`` hyperspy metadata. \ No newline at end of file