Coverage for cuda/core/_vendored/deprecated/params.py: 33.33%
33 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 01:38 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 01:38 +0000
1# Vendored from the Deprecated package (https://pypi.org/project/Deprecated/),
2# version 1.3.1, (c) Laurent LAPORTE, MIT License.
3# Modified to remove the dependency on the `wrapt` package.
5import collections
6import functools
7import inspect
8import warnings
11class DeprecatedParams:
12 """
13 Decorator for functions where one or more parameters are deprecated.
14 """
16 def __init__(self, param, reason="", category=DeprecationWarning):
17 self.messages = {}
18 self.category = category
19 self.populate_messages(param, reason=reason)
21 def populate_messages(self, param, reason=""):
22 if isinstance(param, dict):
23 self.messages.update(param)
24 elif isinstance(param, str):
25 fmt = "'{param}' parameter is deprecated"
26 reason = reason or fmt.format(param=param)
27 self.messages[param] = reason
28 else:
29 raise TypeError(param)
31 def check_params(self, signature, *args, **kwargs):
32 binding = signature.bind(*args, **kwargs)
33 bound = collections.OrderedDict(binding.arguments, **binding.kwargs)
34 return [param for param in bound if param in self.messages]
36 def warn_messages(self, messages):
37 for message in messages:
38 warnings.warn(message, category=self.category, stacklevel=3)
40 def __call__(self, f):
41 signature = inspect.signature(f)
43 @functools.wraps(f)
44 def wrapper(*args, **kwargs):
45 invalid_params = self.check_params(signature, *args, **kwargs)
46 self.warn_messages([self.messages[param] for param in invalid_params])
47 return f(*args, **kwargs)
49 return wrapper
52deprecated_params = DeprecatedParams