diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c0adab0eb3..e9316570c4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,15 @@ Release Notes ============= +2.0.1: 2024/03/18 +----------------- + +This is a bug fix version: + +* `silx.io.open`: Reverted behavior: `open` locks HDF5 files (PR #4074, #4084) +* Dependencies: Updated to advertise that `numpy` v2 is not supported (PR #4084) + + 2.0.0: 2024/01/30 ----------------- diff --git a/requirements.txt b/requirements.txt index f5074bdfb1..a69d1eab5a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ # From pyproject.toml wheel setuptools -numpy >= 1.12 +numpy >=1.12,<2 Cython >= 0.21.1 # From setup.py install_requires packaging diff --git a/setup.py b/setup.py index 75d72bc5fa..06ed4f4220 100644 --- a/setup.py +++ b/setup.py @@ -166,7 +166,7 @@ def get_project_configuration(): install_requires = [ # for most of the computation - "numpy%s" % numpy_requested_version, + "numpy%s,<2" % numpy_requested_version, # for version parsing "packaging", # for io support diff --git a/src/silx/_version.py b/src/silx/_version.py index 1edc9554f2..bc692ac17a 100644 --- a/src/silx/_version.py +++ b/src/silx/_version.py @@ -69,7 +69,7 @@ MAJOR = 2 MINOR = 0 -MICRO = 0 +MICRO = 1 RELEV = "final" # <16 SERIAL = 0 # <16 diff --git a/src/silx/gui/hdf5/test/test_hdf5.py b/src/silx/gui/hdf5/test/test_hdf5.py index cb08436935..1271b48a04 100755 --- a/src/silx/gui/hdf5/test/test_hdf5.py +++ b/src/silx/gui/hdf5/test/test_hdf5.py @@ -39,7 +39,6 @@ from silx.gui import hdf5 from silx.gui.utils.testutils import SignalListener from silx.io import commonh5 -from silx.io import h5py_utils from silx.io.url import DataUrl import weakref @@ -55,7 +54,7 @@ def useH5File(request, tmpdir_factory): tmp = tmpdir_factory.mktemp("test_hdf5") request.cls.filename = os.path.join(tmp, "data.h5") # create h5 data - with h5py_utils.File(request.cls.filename, "w") as f: + with h5py.File(request.cls.filename, "w") as f: g = f.create_group("arrays") g.create_dataset("scalar", data=10) yield @@ -87,7 +86,7 @@ def h5TempFile(self): fd, tmp_name = tempfile.mkstemp(suffix=".h5") os.close(fd) # create h5 data - h5file = h5py_utils.File(tmp_name, "w") + h5file = h5py.File(tmp_name, "w") g = h5file.create_group("arrays") g.create_dataset("scalar", data=10) h5file.close() @@ -162,7 +161,7 @@ def testRemoveObject(self): self.assertEqual(model.rowCount(qt.QModelIndex()), 0) def testSynchronizeObject(self): - h5 = h5py_utils.File(self.filename, mode="r") + h5 = h5py.File(self.filename, mode="r") model = hdf5.Hdf5TreeModel() model.insertH5pyObject(h5) self.assertEqual(model.rowCount(qt.QModelIndex()), 1) @@ -237,7 +236,7 @@ def testNotCloseFile(self): """A file inserted as an h5py object is not open (then not closed) internally.""" try: - h5File = h5py_utils.File(self.filename, mode="r") + h5File = h5py.File(self.filename, mode="r") model = hdf5.Hdf5TreeModel() self.assertEqual(model.rowCount(qt.QModelIndex()), 0) model.insertH5pyObject(h5File) @@ -421,7 +420,7 @@ class TestHdf5TreeModelSignals(TestCaseQt): def setUp(self): TestCaseQt.setUp(self) self.model = hdf5.Hdf5TreeModel() - self.h5 = h5py_utils.File(self.filename, mode="r") + self.h5 = h5py.File(self.filename, mode="r") self.model.insertH5pyObject(self.h5) self.listener = SignalListener() @@ -449,7 +448,7 @@ def waitForPendingOperations(self, model): raise RuntimeError("Still waiting for a pending operation") def testInsert(self): - h5 = h5py_utils.File(self.filename, mode="r") + h5 = h5py.File(self.filename, mode="r") self.model.insertH5pyObject(h5) self.assertEqual(self.listener.callCount(), 0) @@ -652,7 +651,7 @@ def useH5Model(request, tmpdir_factory): extH5FileName = os.path.join(tmp, "base__external.h5") extDatFileName = os.path.join(tmp, "base__external.dat") - externalh5 = h5py_utils.File(extH5FileName, mode="w") + externalh5 = h5py.File(extH5FileName, mode="w") externalh5["target/dataset"] = 50 externalh5["target/link"] = h5py.SoftLink("/target/dataset") externalh5["/ext/vds0"] = [0, 1] @@ -661,7 +660,7 @@ def useH5Model(request, tmpdir_factory): numpy.array([0, 1, 10, 10, 2, 3]).tofile(extDatFileName) - h5 = h5py_utils.File(filename, mode="w") + h5 = h5py.File(filename, mode="w") h5["group/dataset"] = 50 h5["link/soft_link"] = h5py.SoftLink("/group/dataset") h5["link/soft_link_to_group"] = h5py.SoftLink("/group") @@ -698,7 +697,7 @@ def useH5Model(request, tmpdir_factory): h5["/ext"].create_dataset("raw", shape=(2, 2), dtype=int, external=external) h5.close() - with h5py_utils.File(filename, mode="r") as h5File: + with h5py.File(filename, mode="r") as h5File: # Create model request.cls.model = hdf5.Hdf5TreeModel() request.cls.model.insertH5pyObject(h5File) diff --git a/src/silx/io/utils.py b/src/silx/io/utils.py index ae6a55bf5f..f15eb20b25 100644 --- a/src/silx/io/utils.py +++ b/src/silx/io/utils.py @@ -555,7 +555,10 @@ def _open_local_file(filename): ) if h5py.is_hdf5(filename): - return h5py_utils.File(filename, "r") + try: + return h5py.File(filename, "r") + except OSError: + return h5py.File(filename, "r", libver='latest', swmr=True) try: from . import fabioh5