From e29a19e17add9bde893c0b50811364ec4f10d036 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Tue, 29 Jun 2021 11:08:34 +0800 Subject: [PATCH 1/4] [DLMED] add deprecated decorator Signed-off-by: Nic Ma --- monai/handlers/segmentation_saver.py | 3 ++- monai/handlers/transform_inverter.py | 3 ++- monai/handlers/utils.py | 13 +++---------- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/monai/handlers/segmentation_saver.py b/monai/handlers/segmentation_saver.py index c61cdd710e..368581c759 100644 --- a/monai/handlers/segmentation_saver.py +++ b/monai/handlers/segmentation_saver.py @@ -16,7 +16,7 @@ from monai.config import DtypeLike, IgniteInfo from monai.transforms import SaveImage -from monai.utils import GridSampleMode, GridSamplePadMode, InterpolateMode, min_version, optional_import +from monai.utils import deprecated, GridSampleMode, GridSamplePadMode, InterpolateMode, min_version, optional_import Events, _ = optional_import("ignite.engine", IgniteInfo.OPT_IMPORT_VERSION, min_version, "Events") if TYPE_CHECKING: @@ -25,6 +25,7 @@ Engine, _ = optional_import("ignite.engine", IgniteInfo.OPT_IMPORT_VERSION, min_version, "Engine") +@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="please consider using `SaveImage[d]` transform instead.") class SegmentationSaver: """ Event handler triggered on completing every iteration to save the segmentation predictions into files. diff --git a/monai/handlers/transform_inverter.py b/monai/handlers/transform_inverter.py index 0d4146af03..6687aadf18 100644 --- a/monai/handlers/transform_inverter.py +++ b/monai/handlers/transform_inverter.py @@ -18,7 +18,7 @@ from monai.data.utils import no_collation from monai.engines.utils import CommonKeys, IterationEvents from monai.transforms import Invertd, InvertibleTransform -from monai.utils import ensure_tuple, ensure_tuple_rep, min_version, optional_import +from monai.utils import deprecated, ensure_tuple, ensure_tuple_rep, min_version, optional_import Events, _ = optional_import("ignite.engine", IgniteInfo.OPT_IMPORT_VERSION, min_version, "Events") if TYPE_CHECKING: @@ -27,6 +27,7 @@ Engine, _ = optional_import("ignite.engine", IgniteInfo.OPT_IMPORT_VERSION, min_version, "Engine") +@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="please consider using `Invertd` transform instead.") class TransformInverter: """ Ignite handler to automatically invert `transforms`. diff --git a/monai/handlers/utils.py b/monai/handlers/utils.py index 8f53e366a9..5e8b473548 100644 --- a/monai/handlers/utils.py +++ b/monai/handlers/utils.py @@ -10,7 +10,6 @@ # limitations under the License. import os -import warnings from collections import OrderedDict from typing import TYPE_CHECKING, Dict, List, Optional, Sequence, Union @@ -18,7 +17,7 @@ import torch from monai.config import IgniteInfo, KeysCollection -from monai.utils import ensure_tuple, get_torch_version_tuple, min_version, optional_import +from monai.utils import deprecated, ensure_tuple, get_torch_version_tuple, min_version, optional_import idist, _ = optional_import("ignite", IgniteInfo.OPT_IMPORT_VERSION, min_version, "distributed") if TYPE_CHECKING: @@ -58,6 +57,7 @@ def stopping_fn(engine: Engine): return stopping_fn +@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="the API had been moved to monai.utils module.") def evenly_divisible_all_gather(data: torch.Tensor) -> torch.Tensor: """ Utility function for distributed data parallel to pad at first dim to make it evenly divisible and all_gather. @@ -69,10 +69,6 @@ def evenly_divisible_all_gather(data: torch.Tensor) -> torch.Tensor: The input data on different ranks must have exactly same `dtype`. """ - warnings.warn( - "evenly_divisible_all_gather had been moved to monai.utils module, will deprecate this API in MONAI v0.7.", - DeprecationWarning, - ) if not isinstance(data, torch.Tensor): raise ValueError("input data must be PyTorch Tensor.") @@ -92,6 +88,7 @@ def evenly_divisible_all_gather(data: torch.Tensor) -> torch.Tensor: return torch.cat([data[i * max_len : i * max_len + l, ...] for i, l in enumerate(all_lens)], dim=0) +@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="the API had been moved to monai.utils module.") def string_list_all_gather(strings: List[str]) -> List[str]: """ Utility function for distributed data parallel to all gather a list of strings. @@ -102,10 +99,6 @@ def string_list_all_gather(strings: List[str]) -> List[str]: strings: a list of strings to all gather. """ - warnings.warn( - "string_list_all_gather had been moved to monai.utils module, will deprecate this API in MONAI v0.7.", - DeprecationWarning, - ) world_size = idist.get_world_size() if world_size <= 1: return strings From 54ada8c011008e0c249751f399403a8f260d9da1 Mon Sep 17 00:00:00 2001 From: monai-bot Date: Tue, 29 Jun 2021 03:15:36 +0000 Subject: [PATCH 2/4] [MONAI] python code formatting Signed-off-by: monai-bot --- monai/handlers/segmentation_saver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/handlers/segmentation_saver.py b/monai/handlers/segmentation_saver.py index 368581c759..8ffd65ef11 100644 --- a/monai/handlers/segmentation_saver.py +++ b/monai/handlers/segmentation_saver.py @@ -16,7 +16,7 @@ from monai.config import DtypeLike, IgniteInfo from monai.transforms import SaveImage -from monai.utils import deprecated, GridSampleMode, GridSamplePadMode, InterpolateMode, min_version, optional_import +from monai.utils import GridSampleMode, GridSamplePadMode, InterpolateMode, deprecated, min_version, optional_import Events, _ = optional_import("ignite.engine", IgniteInfo.OPT_IMPORT_VERSION, min_version, "Events") if TYPE_CHECKING: From 61a2a49326007df10afd1d62bba52d41c5403bb1 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Tue, 29 Jun 2021 21:11:20 +0800 Subject: [PATCH 3/4] [DLMED] update according to comments Signed-off-by: Nic Ma --- monai/handlers/segmentation_saver.py | 2 +- monai/handlers/transform_inverter.py | 2 +- monai/handlers/utils.py | 4 ++-- monai/networks/nets/torchvision_fc.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/monai/handlers/segmentation_saver.py b/monai/handlers/segmentation_saver.py index 8ffd65ef11..a7276f61b6 100644 --- a/monai/handlers/segmentation_saver.py +++ b/monai/handlers/segmentation_saver.py @@ -25,7 +25,7 @@ Engine, _ = optional_import("ignite.engine", IgniteInfo.OPT_IMPORT_VERSION, min_version, "Engine") -@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="please consider using `SaveImage[d]` transform instead.") +@deprecated(since="0.6.0", removed="0.7.0", msg_suffix="Please consider using `SaveImage[d]` transform instead.") class SegmentationSaver: """ Event handler triggered on completing every iteration to save the segmentation predictions into files. diff --git a/monai/handlers/transform_inverter.py b/monai/handlers/transform_inverter.py index 6687aadf18..7574587d9f 100644 --- a/monai/handlers/transform_inverter.py +++ b/monai/handlers/transform_inverter.py @@ -27,7 +27,7 @@ Engine, _ = optional_import("ignite.engine", IgniteInfo.OPT_IMPORT_VERSION, min_version, "Engine") -@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="please consider using `Invertd` transform instead.") +@deprecated(since="0.6.0", removed="0.7.0", msg_suffix="Please consider using `Invertd` transform instead.") class TransformInverter: """ Ignite handler to automatically invert `transforms`. diff --git a/monai/handlers/utils.py b/monai/handlers/utils.py index 5e8b473548..9f716c6f10 100644 --- a/monai/handlers/utils.py +++ b/monai/handlers/utils.py @@ -57,7 +57,7 @@ def stopping_fn(engine: Engine): return stopping_fn -@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="the API had been moved to monai.utils module.") +@deprecated(since="0.6.0", removed="0.7.0", msg_suffix="The API had been moved to monai.utils module.") def evenly_divisible_all_gather(data: torch.Tensor) -> torch.Tensor: """ Utility function for distributed data parallel to pad at first dim to make it evenly divisible and all_gather. @@ -88,7 +88,7 @@ def evenly_divisible_all_gather(data: torch.Tensor) -> torch.Tensor: return torch.cat([data[i * max_len : i * max_len + l, ...] for i, l in enumerate(all_lens)], dim=0) -@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="the API had been moved to monai.utils module.") +@deprecated(since="0.6.0", removed="0.7.0", msg_suffix="The API had been moved to monai.utils module.") def string_list_all_gather(strings: List[str]) -> List[str]: """ Utility function for distributed data parallel to all gather a list of strings. diff --git a/monai/networks/nets/torchvision_fc.py b/monai/networks/nets/torchvision_fc.py index 19b973796f..66d905be85 100644 --- a/monai/networks/nets/torchvision_fc.py +++ b/monai/networks/nets/torchvision_fc.py @@ -68,7 +68,7 @@ def __init__( ) -@deprecated(since="0.6.0", version_val="0.7.0", msg_suffix="please consider using `TorchVisionFCModel` instead.") +@deprecated(since="0.6.0", removed="0.7.0", msg_suffix="Please consider using `TorchVisionFCModel` instead.") class TorchVisionFullyConvModel(TorchVisionFCModel): """ Customize TorchVision models to replace fully connected layer by convolutional layer. From 67f9e5200fd115c083d993aab3ecab5b9839a033 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Wed, 30 Jun 2021 11:51:07 +0800 Subject: [PATCH 4/4] [DLMED] enhance doc-string Signed-off-by: Nic Ma --- monai/utils/deprecated.py | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/monai/utils/deprecated.py b/monai/utils/deprecated.py index 9d3fcd6435..509f92531d 100644 --- a/monai/utils/deprecated.py +++ b/monai/utils/deprecated.py @@ -74,16 +74,18 @@ def deprecated( """ Marks a function or class as deprecated. If `since` is given this should be a version at or earlier than the current version and states at what version of the definition was marked as deprecated. If `removed` is given - this can be any version and marks when the definition was removed. When the decorated definition is called, - that is when the function is called or the class instantiated, a warning is issued if `since` is given and - the current version is at or later than that given. An exception is instead raised if `removed` is given and - the current version is at or later than that, or if neither `since` nor `removed` is provided. + this can be any version and marks when the definition was removed. + + When the decorated definition is called, that is when the function is called or the class instantiated, + a `DeprecationWarning` is issued if `since` is given and the current version is at or later than that given. + a `DeprecatedError` exception is instead raised if `removed` is given and the current version is at or later + than that, or if neither `since` nor `removed` is provided. Args: - since: version at which the definition was marked deprecated but not removed - removed: version at which the definition was removed and no longer usable - msg_suffix: message appended to warning/exception detailing reasons for deprecation and what to use instead - version_val: (used for testing) version to compare since and removed against, default is MONAI version + since: version at which the definition was marked deprecated but not removed. + removed: version at which the definition was removed and no longer usable. + msg_suffix: message appended to warning/exception detailing reasons for deprecation and what to use instead. + version_val: (used for testing) version to compare since and removed against, default is MONAI version. Returns: Decorated definition which warns or raises exception when used @@ -142,12 +144,17 @@ def deprecated_arg( Marks a particular named argument of a callable as deprecated. The same conditions for `since` and `removed` as described in the `deprecated` decorator. + When the decorated definition is called, that is when the function is called or the class instantiated with args, + a `DeprecationWarning` is issued if `since` is given and the current version is at or later than that given. + a `DeprecatedError` exception is instead raised if `removed` is given and the current version is at or later + than that, or if neither `since` nor `removed` is provided. + Args: - name: name of position or keyword argument to mark as deprecated - since: version at which the argument was marked deprecated but not removed - removed: version at which the argument was removed and no longer usable - msg_suffix: message appended to warning/exception detailing reasons for deprecation and what to use instead - version_val: (used for testing) version to compare since and removed against, default is MONAI version + name: name of position or keyword argument to mark as deprecated. + since: version at which the argument was marked deprecated but not removed. + removed: version at which the argument was removed and no longer usable. + msg_suffix: message appended to warning/exception detailing reasons for deprecation and what to use instead. + version_val: (used for testing) version to compare since and removed against, default is MONAI version. Returns: Decorated callable which warns or raises exception when deprecated argument used