From 0b2c8f5a18ae6ccfc076bd5f1ded583a1303f90c Mon Sep 17 00:00:00 2001 From: Sai Asish Y Date: Sat, 22 Aug 2026 23:35:25 -0700 Subject: [PATCH] Fix spatial_resample TypeError on None spatial_size with rank 1 Signed-off-by: Sai Asish Y --- monai/transforms/spatial/functional.py | 2 +- tests/transforms/test_spatial_resample.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/monai/transforms/spatial/functional.py b/monai/transforms/spatial/functional.py index c44d979927e..6fdd39c22b9 100644 --- a/monai/transforms/spatial/functional.py +++ b/monai/transforms/spatial/functional.py @@ -156,7 +156,7 @@ def spatial_resample( elif spatial_size is None and spatial_rank > 1: # auto spatial size spatial_size, _ = compute_shape_offset(in_spatial_size, src_affine, dst_affine) # type: ignore spatial_size = torch.tensor( - fall_back_tuple(ensure_tuple(spatial_size)[:spatial_rank], in_spatial_size, lambda x: x >= 0) + fall_back_tuple(ensure_tuple(spatial_size)[:spatial_rank], in_spatial_size, lambda x: x is not None and x >= 0) ) extra_info = { "dtype": str(dtype_pt)[6:], # remove "torch": torch.float32 -> float32 diff --git a/tests/transforms/test_spatial_resample.py b/tests/transforms/test_spatial_resample.py index becd909048d..7cbda5a17b6 100644 --- a/tests/transforms/test_spatial_resample.py +++ b/tests/transforms/test_spatial_resample.py @@ -222,6 +222,16 @@ def test_inverse(self, img, device, data_param, expected_output): expected_affine = to_affine_nd(len(out.affine) - 1, torch.eye(4)) assert_allclose(out.affine, expected_affine) + def test_none_spatial_size_rank1(self): + # Regression for #9068: a 1D-spatial image with no ``spatial_size`` keeps + # ``spatial_size`` as None, and the fall_back_tuple predicate used to raise + # ``TypeError: '>=' not supported between 'NoneType' and 'int'`` instead of + # falling back to the input spatial size. + img = MetaTensor(torch.arange(4).reshape(1, 4).to(torch.float32), affine=torch.eye(2)) + dst_affine = torch.tensor([[2.0, 0.0], [0.0, 1.0]]) + out = SpatialResample()(img=img, dst_affine=dst_affine) + self.assertEqual(out.shape[0], 1) + def test_unchange(self): for i, p in enumerate(TEST_NDARRAYS_ALL): set_track_meta(i % 2)