From 13f9b8bb17f869d53828b39ca0e85993ad768cee Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Mon, 6 Mar 2023 16:41:38 +0000 Subject: [PATCH 1/3] workaround cufile.log Signed-off-by: Wenqi Li --- monai/data/image_reader.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monai/data/image_reader.py b/monai/data/image_reader.py index 21b7d9df79..be09a14a6e 100644 --- a/monai/data/image_reader.py +++ b/monai/data/image_reader.py @@ -62,7 +62,7 @@ nrrd, has_nrrd = optional_import("nrrd", allow_namespace_pkg=True) OpenSlide, _ = optional_import("openslide", name="OpenSlide") -CuImage, _ = optional_import("cucim", name="CuImage") + TiffFile, _ = optional_import("tifffile", name="TiffFile") __all__ = [ @@ -1274,6 +1274,7 @@ def _set_reader(backend: str): if backend == "openslide": return OpenSlide if backend == "cucim": + CuImage, _ = optional_import("cucim", name="CuImage") return CuImage if backend == "tifffile": return TiffFile From 6d4464e2c11587d65720a88e7039d3a7533b2f64 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Mon, 6 Mar 2023 16:51:06 +0000 Subject: [PATCH 2/3] no import by default Signed-off-by: Wenqi Li --- monai/auto3dseg/utils.py | 3 +-- monai/data/image_reader.py | 3 +-- monai/data/wsi_reader.py | 5 +++-- monai/transforms/utils.py | 3 ++- monai/utils/module.py | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/monai/auto3dseg/utils.py b/monai/auto3dseg/utils.py index 28509ad0e8..b1becc7677 100644 --- a/monai/auto3dseg/utils.py +++ b/monai/auto3dseg/utils.py @@ -43,7 +43,6 @@ measure_np, has_measure = optional_import("skimage.measure", "0.14.2", min_version) cp, has_cp = optional_import("cupy") -cucim, has_cucim = optional_import("cucim") def get_foreground_image(image: MetaTensor) -> np.ndarray: @@ -93,7 +92,7 @@ def get_label_ccp(mask_index: MetaTensor, use_gpu: bool = True) -> tuple[list[An regardless of this setting. """ - + cucim, has_cucim = optional_import("cucim") shape_list = [] if mask_index.device.type == "cuda" and has_cp and has_cucim and use_gpu: mask_cupy = ToCupy()(mask_index.short()) diff --git a/monai/data/image_reader.py b/monai/data/image_reader.py index be09a14a6e..0320e10100 100644 --- a/monai/data/image_reader.py +++ b/monai/data/image_reader.py @@ -1274,8 +1274,7 @@ def _set_reader(backend: str): if backend == "openslide": return OpenSlide if backend == "cucim": - CuImage, _ = optional_import("cucim", name="CuImage") - return CuImage + return optional_import("cucim", name="CuImage")[0] if backend == "tifffile": return TiffFile raise ValueError("`backend` should be 'cuCIM', 'OpenSlide' or 'TiffFile'.") diff --git a/monai/data/wsi_reader.py b/monai/data/wsi_reader.py index 7eb2b56dc8..2cde9d430f 100644 --- a/monai/data/wsi_reader.py +++ b/monai/data/wsi_reader.py @@ -23,7 +23,6 @@ from monai.data.utils import is_supported_format from monai.utils import WSIPatchKeys, ensure_tuple, optional_import, require_pkg -CuImage, _ = optional_import("cucim", name="CuImage") OpenSlide, _ = optional_import("openslide", name="OpenSlide") TiffFile, _ = optional_import("tifffile", name="TiffFile") @@ -491,13 +490,15 @@ def read(self, data: Sequence[PathLike] | PathLike | np.ndarray, **kwargs): whole slide image object or list of such objects """ + cuimage_cls, _ = optional_import("cucim", name="CuImage") + wsi_list: list = [] filenames: Sequence[PathLike] = ensure_tuple(data) kwargs_ = self.kwargs.copy() kwargs_.update(kwargs) for filename in filenames: - wsi = CuImage(filename, **kwargs_) + wsi = cuimage_cls(filename, **kwargs_) wsi_list.append(wsi) return wsi_list if len(filenames) > 1 else wsi_list[0] diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index d3c8eb606f..5a7102c57b 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -67,7 +67,7 @@ ndimage, _ = optional_import("scipy.ndimage") cp, has_cp = optional_import("cupy") cp_ndarray, _ = optional_import("cupy", name="ndarray") -cucim, has_cucim = optional_import("cucim") + exposure, has_skimage = optional_import("skimage.exposure") __all__ = [ @@ -974,6 +974,7 @@ def get_largest_connected_component_mask( """ # use skimage/cucim.skimage and np/cp depending on whether packages are # available and input is non-cpu torch.tensor + cucim, has_cucim = optional_import("cucim") use_cp = has_cp and has_cucim and isinstance(img, torch.Tensor) and img.device != torch.device("cpu") if use_cp: img_ = convert_to_cupy(img.short()) # type: ignore diff --git a/monai/utils/module.py b/monai/utils/module.py index 069e476757..b72e3ff139 100644 --- a/monai/utils/module.py +++ b/monai/utils/module.py @@ -477,10 +477,10 @@ def require_pkg( def _decorator(obj): is_func = isinstance(obj, FunctionType) call_obj = obj if is_func else obj.__init__ - _, has = optional_import(module=pkg_name, version=version, version_checker=version_checker) @wraps(call_obj) def _wrapper(*args, **kwargs): + _, has = optional_import(module=pkg_name, version=version, version_checker=version_checker) if not has: err_msg = f"required package `{pkg_name}` is not installed or the version doesn't match requirement." if raise_error: From 38c89423c1a2432a2ff27bf1f466b12261628c9a Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Mon, 6 Mar 2023 16:56:02 +0000 Subject: [PATCH 3/3] fixes style Signed-off-by: Wenqi Li --- monai/data/image_reader.py | 1 - monai/data/wsi_reader.py | 1 - monai/transforms/utils.py | 1 - 3 files changed, 3 deletions(-) diff --git a/monai/data/image_reader.py b/monai/data/image_reader.py index 0320e10100..03bffbb1e8 100644 --- a/monai/data/image_reader.py +++ b/monai/data/image_reader.py @@ -62,7 +62,6 @@ nrrd, has_nrrd = optional_import("nrrd", allow_namespace_pkg=True) OpenSlide, _ = optional_import("openslide", name="OpenSlide") - TiffFile, _ = optional_import("tifffile", name="TiffFile") __all__ = [ diff --git a/monai/data/wsi_reader.py b/monai/data/wsi_reader.py index 2cde9d430f..4cf7772058 100644 --- a/monai/data/wsi_reader.py +++ b/monai/data/wsi_reader.py @@ -491,7 +491,6 @@ def read(self, data: Sequence[PathLike] | PathLike | np.ndarray, **kwargs): """ cuimage_cls, _ = optional_import("cucim", name="CuImage") - wsi_list: list = [] filenames: Sequence[PathLike] = ensure_tuple(data) diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index 5a7102c57b..cef7c9b12a 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -67,7 +67,6 @@ ndimage, _ = optional_import("scipy.ndimage") cp, has_cp = optional_import("cupy") cp_ndarray, _ = optional_import("cupy", name="ndarray") - exposure, has_skimage = optional_import("skimage.exposure") __all__ = [