From a4ed8a67ebe14bcf95ef3695d9434bef0d507bee Mon Sep 17 00:00:00 2001 From: SID Date: Tue, 30 Jun 2026 00:25:08 -0400 Subject: [PATCH 1/2] test(data): add affine regression coverage for single-slice pydicom metadata Signed-off-by: SID --- tests/data/test_init_reader.py | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tests/data/test_init_reader.py b/tests/data/test_init_reader.py index 169fd20a5f..bad58cd42f 100644 --- a/tests/data/test_init_reader.py +++ b/tests/data/test_init_reader.py @@ -19,6 +19,7 @@ from monai.data import ITKReader, NibabelReader, NrrdReader, NumpyReader, PILReader, PydicomReader from monai.transforms import LoadImage, LoadImaged +from monai.utils import MetaKeys from tests.test_utils import SkipIfNoModule @@ -100,6 +101,40 @@ def test_nibabel_reader_avoids_eager_c_order_copy(self): # (F-order) layout from nibabel should be preserved here. self.assertFalse(data.flags.c_contiguous) + @SkipIfNoModule("Pydicom") + def test_pydicom_reader_get_affine_single_slice_with_last_position(self): + reader = PydicomReader() + metadata = { + "00200037": {"Value": [1.0, 0.0, 0.0, 0.0, 1.0, 0.0]}, + "00200032": {"Value": [10.0, 20.0, 30.0]}, + "00280030": {"Value": [0.5, 0.25]}, + "lastImagePositionPatient": np.array([10.0, 20.0, 30.0]), + MetaKeys.SPATIAL_SHAPE: np.array([64, 64, 1]), + } + + affine = reader._get_affine(metadata, lps_to_ras=False) + + np.testing.assert_allclose(affine[0, 2], 0.0) + np.testing.assert_allclose(affine[1, 2], 0.0) + np.testing.assert_allclose(affine[2, 2], 1.0) + + @SkipIfNoModule("Pydicom") + def test_pydicom_reader_get_affine_multi_slice_uses_last_position(self): + reader = PydicomReader() + metadata = { + "00200037": {"Value": [1.0, 0.0, 0.0, 0.0, 1.0, 0.0]}, + "00200032": {"Value": [0.0, 0.0, 0.0]}, + "00280030": {"Value": [1.0, 1.0]}, + "lastImagePositionPatient": np.array([0.0, 0.0, 4.0]), + MetaKeys.SPATIAL_SHAPE: np.array([8, 8, 5]), + } + + affine = reader._get_affine(metadata, lps_to_ras=False) + + np.testing.assert_allclose(affine[0, 2], 0.0) + np.testing.assert_allclose(affine[1, 2], 0.0) + np.testing.assert_allclose(affine[2, 2], 1.0) + if __name__ == "__main__": unittest.main() From 42517f57b641c77f04f678cc0326b704d55c2cd4 Mon Sep 17 00:00:00 2001 From: SID Date: Tue, 30 Jun 2026 12:54:59 -0400 Subject: [PATCH 2/2] test(data): use lowercase pydicom module name in SkipIfNoModule Signed-off-by: SID --- tests/data/test_init_reader.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/data/test_init_reader.py b/tests/data/test_init_reader.py index bad58cd42f..b0fae0b46b 100644 --- a/tests/data/test_init_reader.py +++ b/tests/data/test_init_reader.py @@ -49,7 +49,7 @@ def test_load_image_to_gpu(self): @SkipIfNoModule("nibabel") @SkipIfNoModule("PIL") @SkipIfNoModule("nrrd") - @SkipIfNoModule("Pydicom") + @SkipIfNoModule("pydicom") def test_readers(self): inst = ITKReader() self.assertIsInstance(inst, ITKReader) @@ -101,7 +101,7 @@ def test_nibabel_reader_avoids_eager_c_order_copy(self): # (F-order) layout from nibabel should be preserved here. self.assertFalse(data.flags.c_contiguous) - @SkipIfNoModule("Pydicom") + @SkipIfNoModule("pydicom") def test_pydicom_reader_get_affine_single_slice_with_last_position(self): reader = PydicomReader() metadata = { @@ -118,7 +118,7 @@ def test_pydicom_reader_get_affine_single_slice_with_last_position(self): np.testing.assert_allclose(affine[1, 2], 0.0) np.testing.assert_allclose(affine[2, 2], 1.0) - @SkipIfNoModule("Pydicom") + @SkipIfNoModule("pydicom") def test_pydicom_reader_get_affine_multi_slice_uses_last_position(self): reader = PydicomReader() metadata = {