From 9cbaeadfda56acc8e8a6cf973a59cf28e9a6ffd7 Mon Sep 17 00:00:00 2001 From: Demetrios Agourakis Date: Tue, 20 Oct 2026 20:49:42 +0300 Subject: [PATCH 1/2] test: preserve image baselines across Matplotlib text renderers Matplotlib 3.11 changes text rendering, so references must track renderer generations without weakening image comparisons. Related to #9069. Assisted-by: OpenAI Codex Signed-off-by: Demetrios Agourakis --- tests/data/test_threadcontainer.py | 9 +--- tests/test_matplotlib_baseline.py | 50 ++++++++++++++++++ tests/test_utils.py | 11 +++- .../matplotlib_3_11/matshow3d_patch_test.png | Bin 0 -> 4263 bytes .../matplotlib_3_11/matshow3d_rgb_test.png | Bin 0 -> 15771 bytes .../matplotlib_3_11/matshow3d_test.png | Bin 0 -> 19280 bytes .../threadcontainer_plot_test.png | Bin 0 -> 58236 bytes tests/visualize/utils/test_matshow3d.py | 11 ++-- 8 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 tests/test_matplotlib_baseline.py create mode 100644 tests/testing_data/matplotlib_3_11/matshow3d_patch_test.png create mode 100644 tests/testing_data/matplotlib_3_11/matshow3d_rgb_test.png create mode 100644 tests/testing_data/matplotlib_3_11/matshow3d_test.png create mode 100644 tests/testing_data/matplotlib_3_11/threadcontainer_plot_test.png diff --git a/tests/data/test_threadcontainer.py b/tests/data/test_threadcontainer.py index 519f8350a03..1aa653bf1e9 100644 --- a/tests/data/test_threadcontainer.py +++ b/tests/data/test_threadcontainer.py @@ -11,18 +11,16 @@ from __future__ import annotations -import os import tempfile import time import unittest -from pathlib import Path import torch from monai.data import DataLoader from monai.utils import optional_import, set_determinism from monai.utils.enums import CommonKeys -from tests.test_utils import SkipIfNoModule +from tests.test_utils import SkipIfNoModule, get_matplotlib_baseline try: _, has_ignite = optional_import("ignite") @@ -70,9 +68,6 @@ def test_container(self): @SkipIfNoModule("matplotlib") def test_plot(self): set_determinism(0) - test_dir = Path(__file__).parents[1] - testing_dir = os.path.join(test_dir, "testing_data") - net = torch.nn.Conv2d(1, 1, 3, padding=1) opt = torch.optim.Adam(net.parameters()) @@ -105,7 +100,7 @@ def test_plot(self): with tempfile.TemporaryDirectory() as tempdir: tempimg = f"{tempdir}/threadcontainer_plot_test.png" fig.savefig(tempimg) - comp = compare_images(f"{testing_dir}/threadcontainer_plot_test.png", tempimg, 5e-2) + comp = compare_images(get_matplotlib_baseline("threadcontainer_plot_test.png"), tempimg, 5e-2) self.assertIsNone(comp, comp) # None indicates test passed diff --git a/tests/test_matplotlib_baseline.py b/tests/test_matplotlib_baseline.py new file mode 100644 index 00000000000..f6d7b810cec --- /dev/null +++ b/tests/test_matplotlib_baseline.py @@ -0,0 +1,50 @@ +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import unittest +from unittest.mock import patch + +from tests.test_utils import MODULE_PATH, SkipIfNoModule, get_matplotlib_baseline + + +@SkipIfNoModule("matplotlib") +class TestMatplotlibBaseline(unittest.TestCase): + def test_renderer_boundary(self): + cases = ( + ("3.9.4", False), + ("3.10.9", False), + ("3.10.99", False), + ("3.11.0.dev0", True), + ("3.11.0a1", True), + ("3.11.0rc1", True), + ("3.11.0", True), + ("3.11.2", True), + ("3.12.0.dev0", True), + ("4.0.0", True), + ) + for version, modern in cases: + with self.subTest(version=version), patch("matplotlib.__version__", version): + expected = MODULE_PATH / "tests" / "testing_data" + if modern: + expected /= "matplotlib_3_11" + self.assertEqual(get_matplotlib_baseline("matshow3d_test.png"), expected / "matshow3d_test.png") + + def test_missing_reference_does_not_fall_back(self): + with patch("matplotlib.__version__", "3.11.2"): + path = get_matplotlib_baseline("missing-reference.png") + self.assertEqual(path.parent.name, "matplotlib_3_11") + self.assertFalse(path.exists()) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_utils.py b/tests/test_utils.py index 9d245f9778a..6cb7ae02bab 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -50,7 +50,7 @@ from monai.data import create_test_image_2d, create_test_image_3d from monai.data.meta_tensor import MetaTensor, get_track_meta from monai.networks import convert_to_onnx, convert_to_torchscript -from monai.utils import optional_import +from monai.utils import optional_import, version_geq from monai.utils.misc import MONAIEnvVars from monai.utils.module import compute_capabilities_after, pytorch_after from monai.utils.tf32 import detect_default_tf32 @@ -101,6 +101,15 @@ def testing_data_config(*keys): return reduce(operator.getitem, keys, _test_data_config) +def get_matplotlib_baseline(filename: str) -> Path: + """Select the reference for the pre-3.11 or 3.11+ text renderer.""" + matplotlib_version, _ = optional_import("matplotlib", name="__version__") + directory = MODULE_PATH / "tests" / "testing_data" + if version_geq(matplotlib_version, "3.11.0.dev0"): + directory /= "matplotlib_3_11" + return directory / filename + + def get_testing_algo_template_path(): """ a local folder to the testing algorithm template or a url to the compressed template file. diff --git a/tests/testing_data/matplotlib_3_11/matshow3d_patch_test.png b/tests/testing_data/matplotlib_3_11/matshow3d_patch_test.png new file mode 100644 index 0000000000000000000000000000000000000000..6db22096b4e698d611c0f0ce564dfe3fcbc3847b GIT binary patch literal 4263 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 literal 0 HcmV?d00001 diff --git a/tests/testing_data/matplotlib_3_11/matshow3d_rgb_test.png b/tests/testing_data/matplotlib_3_11/matshow3d_rgb_test.png new file mode 100644 index 0000000000000000000000000000000000000000..fb291c7c4d51b4f07c0ea7828c869daee2fa5b6c GIT binary patch literal 15771 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 literal 0 HcmV?d00001 diff --git a/tests/testing_data/matplotlib_3_11/matshow3d_test.png b/tests/testing_data/matplotlib_3_11/matshow3d_test.png new file mode 100644 index 0000000000000000000000000000000000000000..9900c1bdcf6cb670b902bc52072b154006602fcd GIT binary patch literal 19280 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 literal 0 HcmV?d00001 diff --git a/tests/testing_data/matplotlib_3_11/threadcontainer_plot_test.png b/tests/testing_data/matplotlib_3_11/threadcontainer_plot_test.png new file mode 100644 index 0000000000000000000000000000000000000000..d439cc24512e5996c567dd7cce48d6255d7a6207 GIT binary patch literal 58236 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 SbgW7)%-&eXp4+<<1HS+ZpQt(j literal 0 HcmV?d00001 diff --git a/tests/visualize/utils/test_matshow3d.py b/tests/visualize/utils/test_matshow3d.py index f10f1ea79de..1e2741e3e80 100644 --- a/tests/visualize/utils/test_matshow3d.py +++ b/tests/visualize/utils/test_matshow3d.py @@ -28,7 +28,7 @@ ) from monai.utils import optional_import from monai.visualize.utils import matshow3d -from tests.test_utils import SkipIfNoModule +from tests.test_utils import SkipIfNoModule, get_matplotlib_baseline compare_images, _ = optional_import("matplotlib.testing.compare", name="compare_images") pyplot, has_pyplot = optional_import("matplotlib", name="pyplot") @@ -57,7 +57,7 @@ def test_3d(self): with tempfile.TemporaryDirectory() as tempdir: tempimg = f"{tempdir}/matshow3d_test.png" fig.savefig(tempimg) - comp = compare_images(f"{testing_dir}/matshow3d_test.png", tempimg, 5e-2) + comp = compare_images(get_matplotlib_baseline("matshow3d_test.png"), tempimg, 5e-2) self.assertIsNone(comp, f"value of comp={comp}") # None indicates test passed _, axes = pyplot.subplots() @@ -86,8 +86,9 @@ def test_samples(self): with tempfile.TemporaryDirectory() as tempdir: tempimg = f"{tempdir}/matshow3d_patch_test.png" fig.savefig(tempimg) - comp = compare_images(f"{testing_dir}/matshow3d_patch_test.png", tempimg, 5e-2, in_decorator=True) - if comp: + baseline = get_matplotlib_baseline("matshow3d_patch_test.png") + comp = compare_images(baseline, tempimg, 5e-2, in_decorator=True) + if comp and baseline == Path(testing_dir) / "matshow3d_patch_test.png": print("not none comp: ", comp) # matplotlib 3.2.2 np.testing.assert_allclose(comp["rms"], 30.786983, atol=1e-3, rtol=1e-3) else: @@ -125,7 +126,7 @@ def test_3d_rgb(self): with tempfile.TemporaryDirectory() as tempdir: tempimg = f"{tempdir}/matshow3d_rgb_test.png" fig.savefig(tempimg) - comp = compare_images(f"{testing_dir}/matshow3d_rgb_test.png", tempimg, 5e-2) + comp = compare_images(get_matplotlib_baseline("matshow3d_rgb_test.png"), tempimg, 5e-2) self.assertIsNone(comp, f"value of comp={comp}") # None indicates test passed From 435ccec5f1197b9a6c06e6b3c618fd73f8d6866d Mon Sep 17 00:00:00 2001 From: Demetrios Agourakis Date: Mon, 26 Oct 2026 06:43:57 -0300 Subject: [PATCH 2/2] test: exclude Matplotlib baseline selector from minimal suite Register the optional-dependency test module alongside test_matshow3d in the minimal-suite exclusion list, as required by CONTRIBUTING.md. Verified one unique exclusion entry, an existing target module, and git diff --check. This does not change the rendering code or references. Assisted-by: OpenAI Codex Signed-off-by: Demetrios Agourakis --- tests/min_tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/min_tests.py b/tests/min_tests.py index 25a42fe4b5d..15b75d5b16c 100644 --- a/tests/min_tests.py +++ b/tests/min_tests.py @@ -218,6 +218,7 @@ def run_testsuit(): "test_vista3d_utils", "test_vista3d_transforms", "test_matshow3d", + "test_matplotlib_baseline", ] assert sorted(exclude_cases) == sorted(set(exclude_cases)), f"Duplicated items in {exclude_cases}"