From 4b04d58a0de8a8f81ceaefe6e8e093c43cbf0e26 Mon Sep 17 00:00:00 2001 From: Vikas Reddy Date: Wed, 14 Oct 2026 19:33:54 +0000 Subject: [PATCH 1/4] Fix eager nvimgcodec plugin import Signed-off-by: Vikas Reddy --- monai/__init__.py | 1 + tests/data/test_init_reader.py | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/monai/__init__.py b/monai/__init__.py index 2d6f5dfc37b..db13712b35c 100644 --- a/monai/__init__.py +++ b/monai/__init__.py @@ -86,6 +86,7 @@ def filter(self, record): # *.so files and folder "_C" may not exist when the cpp extensions are not compiled excludes = "|".join( [ + "(.*(nvimgcodec_pydicom_plugin)$)", "(^(monai.handlers))", "(^(monai.bundle))", "(^(monai.fl))", diff --git a/tests/data/test_init_reader.py b/tests/data/test_init_reader.py index 4cd9ac42c4e..d35d77e9776 100644 --- a/tests/data/test_init_reader.py +++ b/tests/data/test_init_reader.py @@ -12,6 +12,8 @@ from __future__ import annotations import os +import subprocess +import sys import tempfile import unittest @@ -65,6 +67,17 @@ def test_load_image(self): inst = LoadImaged("image", reader="NvImgCodecPydicomReader") self.assertIsInstance(inst, LoadImaged) + def test_nvimgcodec_not_imported_on_monai_import(self): + _, has_nvimgcodec = optional_import("nvidia.nvimgcodec") + if not has_nvimgcodec: + self.skipTest("nvidia.nvimgcodec is not installed") + + code = "import monai, sys; print('nvidia.nvimgcodec' in sys.modules)" + result = subprocess.run([sys.executable, "-c", code], capture_output=True, text=True) + + self.assertEqual(result.returncode, 0, result.stderr) + self.assertEqual(result.stdout.strip(), "False") + @SkipIfNoModule("nibabel") @SkipIfNoModule("cupy") @SkipIfNoModule("kvikio") From 4500999c3d3538d4cedaac23f2db871f58356b41 Mon Sep 17 00:00:00 2001 From: Vikas Reddy Date: Thu, 15 Oct 2026 09:27:59 +0000 Subject: [PATCH 2/4] Add docstring to nvimgcodec import test Signed-off-by: Vikas Reddy --- tests/data/test_init_reader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/data/test_init_reader.py b/tests/data/test_init_reader.py index d35d77e9776..3b13aa4edc4 100644 --- a/tests/data/test_init_reader.py +++ b/tests/data/test_init_reader.py @@ -68,6 +68,7 @@ def test_load_image(self): self.assertIsInstance(inst, LoadImaged) def test_nvimgcodec_not_imported_on_monai_import(self): + """Verify importing MONAI does not eagerly load the optional NVIDIA package.""" _, has_nvimgcodec = optional_import("nvidia.nvimgcodec") if not has_nvimgcodec: self.skipTest("nvidia.nvimgcodec is not installed") From 253820f449701926fabf739155b7db2d83a12b46 Mon Sep 17 00:00:00 2001 From: Vikas Reddy Date: Thu, 15 Oct 2026 09:42:32 +0000 Subject: [PATCH 3/4] Check nvimgcodec availability without importing it Signed-off-by: Vikas Reddy --- tests/data/test_init_reader.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/data/test_init_reader.py b/tests/data/test_init_reader.py index 3b13aa4edc4..d2ab6707917 100644 --- a/tests/data/test_init_reader.py +++ b/tests/data/test_init_reader.py @@ -16,6 +16,7 @@ import sys import tempfile import unittest +from importlib.machinery import PathFinder import numpy as np @@ -69,8 +70,12 @@ def test_load_image(self): def test_nvimgcodec_not_imported_on_monai_import(self): """Verify importing MONAI does not eagerly load the optional NVIDIA package.""" - _, has_nvimgcodec = optional_import("nvidia.nvimgcodec") - if not has_nvimgcodec: + nvidia_spec = PathFinder.find_spec("nvidia") + if nvidia_spec is None or nvidia_spec.submodule_search_locations is None: + self.skipTest("nvidia.nvimgcodec is not installed") + + nvimgcodec_spec = PathFinder.find_spec("nvimgcodec", nvidia_spec.submodule_search_locations) + if nvimgcodec_spec is None: self.skipTest("nvidia.nvimgcodec is not installed") code = "import monai, sys; print('nvidia.nvimgcodec' in sys.modules)" From d3f752c5193f316224316c853fa0656af6857631 Mon Sep 17 00:00:00 2001 From: Vikas Reddy Date: Thu, 15 Oct 2026 09:53:41 +0000 Subject: [PATCH 4/4] Assert no stderr from nvimgcodec import test Signed-off-by: Vikas Reddy --- tests/data/test_init_reader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/data/test_init_reader.py b/tests/data/test_init_reader.py index d2ab6707917..240816d7df6 100644 --- a/tests/data/test_init_reader.py +++ b/tests/data/test_init_reader.py @@ -83,6 +83,7 @@ def test_nvimgcodec_not_imported_on_monai_import(self): self.assertEqual(result.returncode, 0, result.stderr) self.assertEqual(result.stdout.strip(), "False") + self.assertEqual(result.stderr, "") @SkipIfNoModule("nibabel") @SkipIfNoModule("cupy")