diff --git a/monai/utils/deprecated.py b/monai/utils/deprecated.py index c66b60996b..4ae5991d9f 100644 --- a/monai/utils/deprecated.py +++ b/monai/utils/deprecated.py @@ -187,9 +187,15 @@ def _decorator(func): @wraps(func) def _wrapper(*args, **kwargs): - if new_name is not None and name in kwargs: + if new_name is not None and name in kwargs and new_name not in kwargs: # replace the deprecated arg "name" with "new_name" + # if name is specified and new_name is not specified kwargs[new_name] = kwargs[name] + try: + sig.bind(*args, **kwargs).arguments + except TypeError: + # multiple values for new_name using both args and kwargs + kwargs.pop(new_name, None) binding = sig.bind(*args, **kwargs).arguments positional_found = name in binding diff --git a/tests/test_deprecated.py b/tests/test_deprecated.py index 04f8173282..9c7fe4f632 100644 --- a/tests/test_deprecated.py +++ b/tests/test_deprecated.py @@ -246,6 +246,8 @@ def afoo4(a, b=None): self.assertEqual(afoo4(b=2), 2) # self.assertRaises(DeprecatedError, lambda: afoo4(1, b=2)) + self.assertEqual(afoo4(1, b=2), 1) # new name is in use + self.assertEqual(afoo4(a=1, b=2), 1) # prefers the new arg if __name__ == "__main__":