From 7a25c3a4ec01a7373028676a59500b4912af2a8b Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Thu, 11 Apr 2024 16:11:05 +0800 Subject: [PATCH 1/3] fix #7616 Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- tests/test_clip_intensity_percentiles.py | 58 +++++++++++------------ tests/test_clip_intensity_percentilesd.py | 58 +++++++++++------------ 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/tests/test_clip_intensity_percentiles.py b/tests/test_clip_intensity_percentiles.py index f5fe07a323..7bd0e50aec 100644 --- a/tests/test_clip_intensity_percentiles.py +++ b/tests/test_clip_intensity_percentiles.py @@ -17,7 +17,7 @@ from monai.transforms import ClipIntensityPercentiles from monai.transforms.utils import soft_clip -from monai.transforms.utils_pytorch_numpy_unification import clip +from monai.transforms.utils_pytorch_numpy_unification import clip, percentile from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose @@ -28,8 +28,8 @@ def test_hard_clipping_two_sided(self, p): hard_clipper = ClipIntensityPercentiles(upper=95, lower=5) im = p(self.imt) result = hard_clipper(im) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 95)) + expected = clip(im, lower, upper) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -37,8 +37,8 @@ def test_hard_clipping_one_sided_high(self, p): hard_clipper = ClipIntensityPercentiles(upper=95, lower=None) im = p(self.imt) result = hard_clipper(im) - lower, upper = np.percentile(self.imt, (0, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (0, 95)) + expected = clip(im, lower, upper) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -46,8 +46,8 @@ def test_hard_clipping_one_sided_low(self, p): hard_clipper = ClipIntensityPercentiles(upper=None, lower=5) im = p(self.imt) result = hard_clipper(im) - lower, upper = np.percentile(self.imt, (5, 100)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 100)) + expected = clip(im, lower, upper) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -55,8 +55,8 @@ def test_soft_clipping_two_sided(self, p): soft_clipper = ClipIntensityPercentiles(upper=95, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper(im) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=upper) + lower, upper = percentile(im, (5, 95)) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -65,8 +65,8 @@ def test_soft_clipping_one_sided_high(self, p): soft_clipper = ClipIntensityPercentiles(upper=95, lower=None, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper(im) - upper = np.percentile(self.imt, 95) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=None, maxv=upper) + upper = percentile(im, 95) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -75,8 +75,8 @@ def test_soft_clipping_one_sided_low(self, p): soft_clipper = ClipIntensityPercentiles(upper=None, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper(im) - lower = np.percentile(self.imt, 5) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=None) + lower = percentile(im, 5) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -85,8 +85,8 @@ def test_channel_wise(self, p): clipper = ClipIntensityPercentiles(upper=95, lower=5, channel_wise=True) im = p(self.imt) result = clipper(im) - for i, c in enumerate(self.imt): - lower, upper = np.percentile(c, (5, 95)) + for i, c in enumerate(im): + lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-7, atol=0) @@ -118,8 +118,8 @@ def test_hard_clipping_two_sided(self, p): hard_clipper = ClipIntensityPercentiles(upper=95, lower=5) im = p(self.imt) result = hard_clipper(im) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 95)) + expected = clip(im, lower, upper) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -127,8 +127,8 @@ def test_hard_clipping_one_sided_high(self, p): hard_clipper = ClipIntensityPercentiles(upper=95, lower=None) im = p(self.imt) result = hard_clipper(im) - lower, upper = np.percentile(self.imt, (0, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (0, 95)) + expected = clip(im, lower, upper) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -136,8 +136,8 @@ def test_hard_clipping_one_sided_low(self, p): hard_clipper = ClipIntensityPercentiles(upper=None, lower=5) im = p(self.imt) result = hard_clipper(im) - lower, upper = np.percentile(self.imt, (5, 100)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 100)) + expected = clip(im, lower, upper) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -145,8 +145,8 @@ def test_soft_clipping_two_sided(self, p): soft_clipper = ClipIntensityPercentiles(upper=95, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper(im) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=upper) + lower, upper = percentile(im, (5, 95)) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -155,8 +155,8 @@ def test_soft_clipping_one_sided_high(self, p): soft_clipper = ClipIntensityPercentiles(upper=95, lower=None, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper(im) - upper = np.percentile(self.imt, 95) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=None, maxv=upper) + upper = percentile(im, 95) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -165,8 +165,8 @@ def test_soft_clipping_one_sided_low(self, p): soft_clipper = ClipIntensityPercentiles(upper=None, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper(im) - lower = np.percentile(self.imt, 5) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=None) + lower = percentile(im, 5) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -175,8 +175,8 @@ def test_channel_wise(self, p): clipper = ClipIntensityPercentiles(upper=95, lower=5, channel_wise=True) im = p(self.imt) result = clipper(im) - for i, c in enumerate(self.imt): - lower, upper = np.percentile(c, (5, 95)) + for i, c in enumerate(im): + lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-7, atol=0) diff --git a/tests/test_clip_intensity_percentilesd.py b/tests/test_clip_intensity_percentilesd.py index 7e00ef09de..24c117d06c 100644 --- a/tests/test_clip_intensity_percentilesd.py +++ b/tests/test_clip_intensity_percentilesd.py @@ -18,7 +18,7 @@ from monai.transforms import ClipIntensityPercentilesd from monai.transforms.utils import soft_clip -from monai.transforms.utils_pytorch_numpy_unification import clip +from monai.transforms.utils_pytorch_numpy_unification import clip, percentile from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose @@ -30,8 +30,8 @@ def test_hard_clipping_two_sided(self, p): hard_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=5) im = p(self.imt) result = hard_clipper({key: im}) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 95)) + expected = clip(im, lower, upper) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -40,8 +40,8 @@ def test_hard_clipping_one_sided_high(self, p): hard_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=None) im = p(self.imt) result = hard_clipper({key: im}) - lower, upper = np.percentile(self.imt, (0, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (0, 95)) + expected = clip(im, lower, upper) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -50,8 +50,8 @@ def test_hard_clipping_one_sided_low(self, p): hard_clipper = ClipIntensityPercentilesd(keys=[key], upper=None, lower=5) im = p(self.imt) result = hard_clipper({key: im}) - lower, upper = np.percentile(self.imt, (5, 100)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 100)) + expected = clip(im, lower, upper) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -60,8 +60,8 @@ def test_soft_clipping_two_sided(self, p): soft_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper({key: im}) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=upper) + lower, upper = percentile(im, (5, 95)) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -71,8 +71,8 @@ def test_soft_clipping_one_sided_high(self, p): soft_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=None, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper({key: im}) - upper = np.percentile(self.imt, 95) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=None, maxv=upper) + upper = percentile(im, 95) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -82,8 +82,8 @@ def test_soft_clipping_one_sided_low(self, p): soft_clipper = ClipIntensityPercentilesd(keys=[key], upper=None, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper({key: im}) - lower = np.percentile(self.imt, 5) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=None) + lower = percentile(im, 5) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -93,8 +93,8 @@ def test_channel_wise(self, p): clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=5, channel_wise=True) im = p(self.imt) result = clipper({key: im}) - for i, c in enumerate(self.imt): - lower, upper = np.percentile(c, (5, 95)) + for i, c in enumerate(im): + lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-7, atol=0) @@ -132,8 +132,8 @@ def test_hard_clipping_two_sided(self, p): hard_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=5) im = p(self.imt) result = hard_clipper({key: im}) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 95)) + expected = clip(im, lower, upper) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -142,8 +142,8 @@ def test_hard_clipping_one_sided_high(self, p): hard_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=None) im = p(self.imt) result = hard_clipper({key: im}) - lower, upper = np.percentile(self.imt, (0, 95)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (0, 95)) + expected = clip(im, lower, upper) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -152,8 +152,8 @@ def test_hard_clipping_one_sided_low(self, p): hard_clipper = ClipIntensityPercentilesd(keys=[key], upper=None, lower=5) im = p(self.imt) result = hard_clipper({key: im}) - lower, upper = np.percentile(self.imt, (5, 100)) - expected = clip(self.imt, lower, upper) + lower, upper = percentile(im, (5, 100)) + expected = clip(im, lower, upper) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -162,8 +162,8 @@ def test_soft_clipping_two_sided(self, p): soft_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper({key: im}) - lower, upper = np.percentile(self.imt, (5, 95)) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=upper) + lower, upper = percentile(im, (5, 95)) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -173,8 +173,8 @@ def test_soft_clipping_one_sided_high(self, p): soft_clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=None, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper({key: im}) - upper = np.percentile(self.imt, 95) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=None, maxv=upper) + upper = percentile(im, 95) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -184,8 +184,8 @@ def test_soft_clipping_one_sided_low(self, p): soft_clipper = ClipIntensityPercentilesd(keys=[key], upper=None, lower=5, sharpness_factor=1.0) im = p(self.imt) result = soft_clipper({key: im}) - lower = np.percentile(self.imt, 5) - expected = soft_clip(self.imt, sharpness_factor=1.0, minv=lower, maxv=None) + lower = percentile(im, 5) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -195,8 +195,8 @@ def test_channel_wise(self, p): clipper = ClipIntensityPercentilesd(keys=[key], upper=95, lower=5, channel_wise=True) im = p(self.imt) result = clipper({key: im}) - for i, c in enumerate(self.imt): - lower, upper = np.percentile(c, (5, 95)) + for i, c in enumerate(im): + lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-7, atol=0) From 4d727587154a75e72cfa404cbfd10fa8f9921fb2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 08:24:15 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_clip_intensity_percentiles.py | 1 - tests/test_clip_intensity_percentilesd.py | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/test_clip_intensity_percentiles.py b/tests/test_clip_intensity_percentiles.py index 7bd0e50aec..61a454aa7d 100644 --- a/tests/test_clip_intensity_percentiles.py +++ b/tests/test_clip_intensity_percentiles.py @@ -12,7 +12,6 @@ import unittest -import numpy as np from parameterized import parameterized from monai.transforms import ClipIntensityPercentiles diff --git a/tests/test_clip_intensity_percentilesd.py b/tests/test_clip_intensity_percentilesd.py index 24c117d06c..b613d80051 100644 --- a/tests/test_clip_intensity_percentilesd.py +++ b/tests/test_clip_intensity_percentilesd.py @@ -13,7 +13,6 @@ import unittest -import numpy as np from parameterized import parameterized from monai.transforms import ClipIntensityPercentilesd From 9a468f0283de1bea072651873e232d7bd4a71435 Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:08:40 +0800 Subject: [PATCH 3/3] fix dtype Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- tests/test_clip_intensity_percentiles.py | 13 +++++++------ tests/test_clip_intensity_percentilesd.py | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/tests/test_clip_intensity_percentiles.py b/tests/test_clip_intensity_percentiles.py index 61a454aa7d..82471e25ce 100644 --- a/tests/test_clip_intensity_percentiles.py +++ b/tests/test_clip_intensity_percentiles.py @@ -12,6 +12,7 @@ import unittest +import torch from parameterized import parameterized from monai.transforms import ClipIntensityPercentiles @@ -55,7 +56,7 @@ def test_soft_clipping_two_sided(self, p): im = p(self.imt) result = soft_clipper(im) lower, upper = percentile(im, (5, 95)) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -65,7 +66,7 @@ def test_soft_clipping_one_sided_high(self, p): im = p(self.imt) result = soft_clipper(im) upper = percentile(im, 95) - expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=torch.float32) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -75,7 +76,7 @@ def test_soft_clipping_one_sided_low(self, p): im = p(self.imt) result = soft_clipper(im) lower = percentile(im, 5) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -145,7 +146,7 @@ def test_soft_clipping_two_sided(self, p): im = p(self.imt) result = soft_clipper(im) lower, upper = percentile(im, (5, 95)) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -155,7 +156,7 @@ def test_soft_clipping_one_sided_high(self, p): im = p(self.imt) result = soft_clipper(im) upper = percentile(im, 95) - expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=torch.float32) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -165,7 +166,7 @@ def test_soft_clipping_one_sided_low(self, p): im = p(self.imt) result = soft_clipper(im) lower = percentile(im, 5) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-6, atol=0) diff --git a/tests/test_clip_intensity_percentilesd.py b/tests/test_clip_intensity_percentilesd.py index b613d80051..2b49383182 100644 --- a/tests/test_clip_intensity_percentilesd.py +++ b/tests/test_clip_intensity_percentilesd.py @@ -13,6 +13,7 @@ import unittest +import torch from parameterized import parameterized from monai.transforms import ClipIntensityPercentilesd @@ -60,7 +61,7 @@ def test_soft_clipping_two_sided(self, p): im = p(self.imt) result = soft_clipper({key: im}) lower, upper = percentile(im, (5, 95)) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -71,7 +72,7 @@ def test_soft_clipping_one_sided_high(self, p): im = p(self.imt) result = soft_clipper({key: im}) upper = percentile(im, 95) - expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=torch.float32) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -82,7 +83,7 @@ def test_soft_clipping_one_sided_low(self, p): im = p(self.imt) result = soft_clipper({key: im}) lower = percentile(im, 5) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -162,7 +163,7 @@ def test_soft_clipping_two_sided(self, p): im = p(self.imt) result = soft_clipper({key: im}) lower, upper = percentile(im, (5, 95)) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0) @@ -173,7 +174,7 @@ def test_soft_clipping_one_sided_high(self, p): im = p(self.imt) result = soft_clipper({key: im}) upper = percentile(im, 95) - expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=None, maxv=upper, dtype=torch.float32) # the rtol is set to 5e-5 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=5e-5, atol=0) @@ -184,7 +185,7 @@ def test_soft_clipping_one_sided_low(self, p): im = p(self.imt) result = soft_clipper({key: im}) lower = percentile(im, 5) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=im.dtype) + expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=torch.float32) # the rtol is set to 1e-6 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-6, atol=0)