diff --git a/monai/transforms/spatial/dictionary.py b/monai/transforms/spatial/dictionary.py index 51ad0435fc..543d875c4e 100644 --- a/monai/transforms/spatial/dictionary.py +++ b/monai/transforms/spatial/dictionary.py @@ -2305,12 +2305,13 @@ def __call__(self, data: Mapping[Hashable, torch.Tensor]) -> dict[Hashable, torc d = dict(data) self.randomize(None) if not self._do_transform: - out: dict[Hashable, torch.Tensor] = convert_to_tensor(d, track_meta=get_track_meta()) - return out + for key in self.key_iterator(d): + d[key] = convert_to_tensor(d[key], track_meta=get_track_meta()) + return d first_key: Hashable = self.first_key(d) if first_key == (): - out = convert_to_tensor(d, track_meta=get_track_meta()) + out: dict[Hashable, torch.Tensor] = convert_to_tensor(d, track_meta=get_track_meta()) return out if isinstance(d[first_key], MetaTensor) and d[first_key].pending_operations: # type: ignore warnings.warn(f"data['{first_key}'] has pending operations, transform may return incorrect results.") diff --git a/tests/transforms/test_rand_grid_distortiond.py b/tests/transforms/test_rand_grid_distortiond.py index 8f8de144f6..d1de93ea95 100644 --- a/tests/transforms/test_rand_grid_distortiond.py +++ b/tests/transforms/test_rand_grid_distortiond.py @@ -85,6 +85,15 @@ def test_rand_grid_distortiond(self, input_param, seed, input_data, expected_val assert_allclose(result["img"], expected_val_img, type_test=False, rtol=1e-4, atol=1e-4) assert_allclose(result["mask"], expected_val_mask, type_test=False, rtol=1e-4, atol=1e-4) + def test_no_transform_preserves_non_image_keys(self): + """Non-image dict entries must not be coerced to tensors when the transform is skipped.""" + img = np.indices([6, 6]).astype(np.float32) + data = {"img": img, "label": 42, "filename": "scan.nii"} + g = RandGridDistortiond(keys=["img"], prob=0.0) + result = g(data) + self.assertIsInstance(result["label"], int) + self.assertIsInstance(result["filename"], str) + if __name__ == "__main__": unittest.main()