From dcfeb59aeb986db2bc01d1abf6e8c37bde2ef8ca Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Mon, 27 May 2024 16:09:30 +0800 Subject: [PATCH 1/5] fix #7797 Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- tests/test_clip_intensity_percentiles.py | 75 +++++++++++++---------- tests/test_clip_intensity_percentilesd.py | 52 +++++++--------- 2 files changed, 66 insertions(+), 61 deletions(-) diff --git a/tests/test_clip_intensity_percentiles.py b/tests/test_clip_intensity_percentiles.py index a821558fb7..8b24109427 100644 --- a/tests/test_clip_intensity_percentiles.py +++ b/tests/test_clip_intensity_percentiles.py @@ -18,17 +18,39 @@ from monai.transforms import ClipIntensityPercentiles from monai.transforms.utils import soft_clip from monai.transforms.utils_pytorch_numpy_unification import clip, percentile +from monai.utils.type_conversion import convert_to_tensor from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose +def test_hard_clip_func(im, lower, upper): + im_t = convert_to_tensor(im) + if lower is None: + upper = percentile(im_t, upper) + elif upper is None: + lower = percentile(im_t, lower) + else: + lower, upper = percentile(im_t, (lower, upper)) + return clip(im_t, lower, upper) + +def test_soft_clip_func(im, lower, upper): + im_t = convert_to_tensor(im) + if lower is None: + upper = percentile(im_t, upper) + elif upper is None: + lower = percentile(im_t, lower) + else: + lower, upper = percentile(im_t, (lower, upper)) + return soft_clip(im_t, minv=lower, maxv=upper, sharpness_factor=1.0, dtype=torch.float32) + + class TestClipIntensityPercentiles2D(NumpyImageTestCase2D): + @parameterized.expand([[p] for p in TEST_NDARRAYS]) 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 = percentile(im, (5, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 95) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -36,8 +58,7 @@ 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 = percentile(im, (0, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 0, 95) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -45,8 +66,7 @@ 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 = percentile(im, (5, 100)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 100) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -54,9 +74,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 = percentile(im, (5, 95)) - 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 + expected = test_soft_clip_func(im, 5, 95) + # the rtol is set to 1e-4 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -64,9 +83,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 = percentile(im, 95) - 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 + expected = test_soft_clip_func(im, None, 95) + # the rtol is set to 1e-4 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -74,9 +92,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 = percentile(im, 5) - 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 + expected = test_soft_clip_func(im, 5, None) + # the rtol is set to 1e-4 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -84,7 +101,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(im): + im_t = convert_to_tensor(self.imt) + for i, c in enumerate(im_t): lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-4, atol=0) @@ -117,8 +135,7 @@ 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 = percentile(im, (5, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 95) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -126,8 +143,7 @@ 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 = percentile(im, (0, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 0, 95) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -135,8 +151,7 @@ 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 = percentile(im, (5, 100)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 100) assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -144,8 +159,7 @@ 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 = percentile(im, (5, 95)) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=torch.float32) + expected = test_soft_clip_func(im, 5, 95) # the rtol is set to 1e-4 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @@ -154,9 +168,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 = percentile(im, 95) - 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 + expected = test_soft_clip_func(im, None, 95) + # the rtol is set to 1e-4 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -164,9 +177,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 = percentile(im, 5) - 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 + expected = test_soft_clip_func(im, 5, None) + # the rtol is set to 1e-4 because the logaddexp function used in softplus is not stable accross torch and numpy assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -174,7 +186,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(im): + im_t = convert_to_tensor(self.imt) + for i, c in enumerate(im_t): lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-4, atol=0) diff --git a/tests/test_clip_intensity_percentilesd.py b/tests/test_clip_intensity_percentilesd.py index 98840419a0..f2947dc669 100644 --- a/tests/test_clip_intensity_percentilesd.py +++ b/tests/test_clip_intensity_percentilesd.py @@ -19,7 +19,9 @@ from monai.transforms import ClipIntensityPercentilesd from monai.transforms.utils import soft_clip from monai.transforms.utils_pytorch_numpy_unification import clip, percentile +from monai.utils.type_conversion import convert_to_tensor from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose +from .test_clip_intensity_percentiles import test_hard_clip_func, test_soft_clip_func class TestClipIntensityPercentilesd2D(NumpyImageTestCase2D): @@ -30,8 +32,7 @@ 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 = percentile(im, (5, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 95) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -40,8 +41,7 @@ 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 = percentile(im, (0, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 0, 95) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -50,8 +50,7 @@ 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 = percentile(im, (5, 100)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 100) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -60,9 +59,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 = percentile(im, (5, 95)) - 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 + expected = test_soft_clip_func(im, 5, 95) + # the rtol is set to 1e-4 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-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -71,9 +69,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 = percentile(im, 95) - 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 + expected = test_soft_clip_func(im, None, 95) + # the rtol is set to 1e-4 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-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -82,9 +79,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 = percentile(im, 5) - 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 + expected = test_soft_clip_func(im, 5, None) + # the rtol is set to 1e-4 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-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -93,7 +89,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(im): + im_t = convert_to_tensor(self.imt) + for i, c in enumerate(im_t): lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-3, atol=0) @@ -132,8 +129,7 @@ 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 = percentile(im, (5, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 95) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -142,8 +138,7 @@ 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 = percentile(im, (0, 95)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 0, 95) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -152,8 +147,7 @@ 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 = percentile(im, (5, 100)) - expected = clip(im, lower, upper) + expected = test_hard_clip_func(im, 5, 100) assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -162,8 +156,7 @@ 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 = percentile(im, (5, 95)) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=upper, dtype=torch.float32) + expected = test_soft_clip_func(im, 5, 95) # the rtol is set to 1e-4 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-4, atol=0) @@ -173,9 +166,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 = percentile(im, 95) - 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 + expected = test_soft_clip_func(im, None, 95) + # the rtol is set to 1e-4 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-4, atol=0) @parameterized.expand([[p] for p in TEST_NDARRAYS]) @@ -184,8 +176,7 @@ 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 = percentile(im, 5) - expected = soft_clip(im, sharpness_factor=1.0, minv=lower, maxv=None, dtype=torch.float32) + expected = test_soft_clip_func(im, 5, None) # 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-4, atol=0) @@ -195,7 +186,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(im): + im_t = convert_to_tensor(im) + for i, c in enumerate(im_t): lower, upper = percentile(c, (5, 95)) expected = clip(c, lower, upper) assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-4, atol=0) From 34d6230d83cb5b66f296d6b3a4e23bd967b94d07 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 08:11:40 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_clip_intensity_percentilesd.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_clip_intensity_percentilesd.py b/tests/test_clip_intensity_percentilesd.py index f2947dc669..c524d18de8 100644 --- a/tests/test_clip_intensity_percentilesd.py +++ b/tests/test_clip_intensity_percentilesd.py @@ -13,11 +13,9 @@ import unittest -import torch from parameterized import parameterized from monai.transforms import ClipIntensityPercentilesd -from monai.transforms.utils import soft_clip from monai.transforms.utils_pytorch_numpy_unification import clip, percentile from monai.utils.type_conversion import convert_to_tensor from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose From 9ebf0620dacbfff31eab273f082735020811797c Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Mon, 27 May 2024 16:46:45 +0800 Subject: [PATCH 3/5] fix flake8 Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- tests/test_clip_intensity_percentiles.py | 1 + tests/test_clip_intensity_percentilesd.py | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/test_clip_intensity_percentiles.py b/tests/test_clip_intensity_percentiles.py index 8b24109427..77f811db87 100644 --- a/tests/test_clip_intensity_percentiles.py +++ b/tests/test_clip_intensity_percentiles.py @@ -32,6 +32,7 @@ def test_hard_clip_func(im, lower, upper): lower, upper = percentile(im_t, (lower, upper)) return clip(im_t, lower, upper) + def test_soft_clip_func(im, lower, upper): im_t = convert_to_tensor(im) if lower is None: diff --git a/tests/test_clip_intensity_percentilesd.py b/tests/test_clip_intensity_percentilesd.py index c524d18de8..3e06b18418 100644 --- a/tests/test_clip_intensity_percentilesd.py +++ b/tests/test_clip_intensity_percentilesd.py @@ -19,6 +19,7 @@ from monai.transforms.utils_pytorch_numpy_unification import clip, percentile from monai.utils.type_conversion import convert_to_tensor from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose + from .test_clip_intensity_percentiles import test_hard_clip_func, test_soft_clip_func From 4240215d1a11c965002897bc9388e9fead3f6d47 Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Mon, 27 May 2024 17:22:38 +0800 Subject: [PATCH 4/5] minor fix Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- tests/test_clip_intensity_percentiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_clip_intensity_percentiles.py b/tests/test_clip_intensity_percentiles.py index 77f811db87..7ada4eeafd 100644 --- a/tests/test_clip_intensity_percentiles.py +++ b/tests/test_clip_intensity_percentiles.py @@ -15,10 +15,10 @@ import torch from parameterized import parameterized +from monai.utils.type_conversion import convert_to_tensor from monai.transforms import ClipIntensityPercentiles from monai.transforms.utils import soft_clip from monai.transforms.utils_pytorch_numpy_unification import clip, percentile -from monai.utils.type_conversion import convert_to_tensor from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose From 8162b38ce7cf65a0e6627860b5f52c65c282f61a Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Mon, 27 May 2024 18:17:57 +0800 Subject: [PATCH 5/5] fix flake8 Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- tests/test_clip_intensity_percentiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_clip_intensity_percentiles.py b/tests/test_clip_intensity_percentiles.py index 7ada4eeafd..77f811db87 100644 --- a/tests/test_clip_intensity_percentiles.py +++ b/tests/test_clip_intensity_percentiles.py @@ -15,10 +15,10 @@ import torch from parameterized import parameterized -from monai.utils.type_conversion import convert_to_tensor from monai.transforms import ClipIntensityPercentiles from monai.transforms.utils import soft_clip from monai.transforms.utils_pytorch_numpy_unification import clip, percentile +from monai.utils.type_conversion import convert_to_tensor from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose