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