diff --git a/monai/utils/deprecate_utils.py b/monai/utils/deprecate_utils.py index 64e678e2bd6..a741524d501 100644 --- a/monai/utils/deprecate_utils.py +++ b/monai/utils/deprecate_utils.py @@ -277,7 +277,7 @@ def deprecated_arg_default( # smaller than `since`, do nothing return lambda obj: obj if since is None and replaced is None: - # raise a DeprecatedError directly + # no versions given: the default has already changed, so always warn that it changed is_replaced = True is_deprecated = True else: @@ -291,7 +291,9 @@ def _decorator(func): msg_prefix = f" Current default value of argument `{name}={old_default}`" if is_replaced: - msg_infix = f"was changed in version {replaced} from `{name}={old_default}` to `{name}={new_default}`." + msg_prefix = f" Default value of argument `{name}`" + in_version = f" in version {replaced}" if replaced is not None else "" + msg_infix = f"was changed{in_version} from `{name}={old_default}` to `{name}={new_default}`." elif is_deprecated: msg_infix = f"has been deprecated since version {since}." if replaced is not None: diff --git a/tests/utils/test_deprecated.py b/tests/utils/test_deprecated.py index 3171a67e2c3..9645d3df8ed 100644 --- a/tests/utils/test_deprecated.py +++ b/tests/utils/test_deprecated.py @@ -361,6 +361,37 @@ def foo(a, b="a"): self.assertWarns(FutureWarning, lambda: foo("a")) + def test_deprecated_arg_default_replaced_message(self): + """ + Test the message for a changed default, with and without a known version. + """ + + @deprecated_arg_default("b", old_default="a", new_default="b", version_val=self.test_version) + def foo(a, b="b"): + return a, b + + with self.assertWarns(FutureWarning) as aw: + foo("a") + msg = str(aw.warning) + self.assertIn("Default value of argument `b` was changed from `b=a` to `b=b`.", msg) + self.assertNotIn("version None", msg) + self.assertNotIn("Current default value", msg) + + @deprecated_arg_default( + "b", + old_default="a", + new_default="b", + since=self.prev_version, + replaced=self.prev_version, + version_val=self.test_version, + ) + def bar(a, b="b"): + return a, b + + with self.assertWarns(FutureWarning) as aw: + bar("a") + self.assertIn(f"was changed in version {self.prev_version} from `b=a` to `b=b`.", str(aw.warning)) + def test_deprecated_arg_default_warning_with_none_as_placeholder(self): """ Test deprecated arg default, where the default is used.