From 3609d12c4291402d61741f4016c6a0a04592a0a2 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Fri, 20 May 2022 14:30:18 -0500 Subject: [PATCH] Drop deprecated memoize_method_with_uncached, fix test --- pytools/__init__.py | 68 -------------------------------------------- test/test_pytools.py | 6 ++-- 2 files changed, 3 insertions(+), 71 deletions(-) diff --git a/pytools/__init__.py b/pytools/__init__.py index b3ce8a1..6a3ed65 100644 --- a/pytools/__init__.py +++ b/pytools/__init__.py @@ -858,74 +858,6 @@ class keyed_memoize_method(keyed_memoize_on_first_arg): # noqa: N801 return intern(f"_memoize_dic_{function.__name__}") -def memoize_method_with_uncached(uncached_args=None, uncached_kwargs=None): - """Supports cache deletion via ``method_name.clear_cache(self)``. - - :arg uncached_args: a list of argument numbers - (0-based, not counting 'self' argument) - """ - from warnings import warn - warn("memoize_method_with_uncached is deprecated and will go away in 2022. " - "Use memoize_method_with_key instead", - DeprecationWarning, - stacklevel=2) - - if uncached_args is None: - uncached_args = [] - if uncached_kwargs is None: - uncached_kwargs = set() - - # delete starting from the end - uncached_args = sorted(uncached_args, reverse=True) - uncached_kwargs = list(uncached_kwargs) - - def parametrized_decorator(method): - cache_dict_name = intern(f"_memoize_dic_{method.__name__}") - - def wrapper(self, *args, **kwargs): - cache_args = list(args) - cache_kwargs = kwargs.copy() - - for i in uncached_args: - if i < len(cache_args): - cache_args.pop(i) - - cache_args = tuple(cache_args) - - if kwargs: - for name in uncached_kwargs: - cache_kwargs.pop(name, None) - - key = ( - (_HasKwargs, frozenset(cache_kwargs.items())) - + cache_args) - else: - key = cache_args - - try: - return getattr(self, cache_dict_name)[key] - except AttributeError: - result = method(self, *args, **kwargs) - object.__setattr__(self, cache_dict_name, {key: result}) - return result - except KeyError: - result = method(self, *args, **kwargs) - getattr(self, cache_dict_name)[key] = result - return result - - def clear_cache(self): - object.__delattr__(self, cache_dict_name) - - if sys.version_info >= (2, 5): - from functools import update_wrapper - new_wrapper = update_wrapper(wrapper, method) - new_wrapper.clear_cache = clear_cache - - return new_wrapper - - return parametrized_decorator - - class memoize_in: # noqa """Adds a cache to the function it decorates. The cache is attached to *container* and must be uniquely specified by *identifier* (i.e. diff --git a/test/test_pytools.py b/test/test_pytools.py index 8e6ef68..214e014 100644 --- a/test/test_pytools.py +++ b/test/test_pytools.py @@ -50,14 +50,14 @@ def test_memoize_method_clear(): sc.f.clear_cache(sc) # pylint: disable=no-member -def test_memoize_method_with_uncached(): - from pytools import memoize_method_with_uncached +def test_keyed_memoize_method_with_uncached(): + from pytools import keyed_memoize_method class SomeClass: def __init__(self): self.run_count = 0 - @memoize_method_with_uncached(uncached_args=[1], uncached_kwargs=["z"]) + @keyed_memoize_method(key=lambda x, y, z: x) def f(self, x, y, z): del x, y, z self.run_count += 1 -- GitLab