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

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. 

4 

5import collections 

6import functools 

7import inspect 

8import warnings 

9 

10 

11class DeprecatedParams: 

12 """ 

13 Decorator for functions where one or more parameters are deprecated. 

14 """ 

15 

16 def __init__(self, param, reason="", category=DeprecationWarning): 

17 self.messages = {} 

18 self.category = category 

19 self.populate_messages(param, reason=reason) 

20 

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) 

30 

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] 

35 

36 def warn_messages(self, messages): 

37 for message in messages: 

38 warnings.warn(message, category=self.category, stacklevel=3) 

39 

40 def __call__(self, f): 

41 signature = inspect.signature(f) 

42 

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) 

48 

49 return wrapper 

50 

51 

52deprecated_params = DeprecatedParams