Skip to content

Commit b15d6cd

Browse files
committed
Move cache type check outside of decorated method
Define function for returning the method cache dict outside of the wrapped method so it doesn't need to be checked every method call.
1 parent 4851cf2 commit b15d6cd

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

qiskit_experiments/framework/cache_method.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,35 @@ def cache_method_decorator(method: Callable) -> Callable:
4646
Returns:
4747
The wrapped cached method.
4848
"""
49+
# Function for returning cache key
4950
cache_key_fn = _cache_key_function(cache_args, require_hashable)
5051

51-
@functools.wraps(method)
52-
def _cached_method(self, *args, **kwargs):
53-
# Initialize cache if none provided
54-
if isinstance(cache, str):
52+
# Function for returning cache dict
53+
if isinstance(cache, str):
54+
55+
def _cache_fn(self, method):
5556
if not hasattr(self, cache):
5657
setattr(self, cache, {})
5758
instance_cache = getattr(self, cache)
58-
else:
59-
instance_cache = cache
59+
name = method.__name__
60+
if name not in instance_cache:
61+
instance_cache[name] = {}
62+
return instance_cache[name]
63+
64+
else:
6065

61-
name = method.__name__
62-
if name not in instance_cache:
63-
instance_cache[name] = {}
64-
meth_cache = instance_cache[name]
66+
def _cache_fn(self, method):
67+
# pylint: disable = unused-argument
68+
name = method.__name__
69+
if name not in cache:
70+
cache[name] = {}
71+
return cache[name]
6572

73+
# Cached method function
74+
75+
@functools.wraps(method)
76+
def _cached_method(self, *args, **kwargs):
77+
meth_cache = _cache_fn(self, method)
6678
key = cache_key_fn(*args, **kwargs)
6779
if key in meth_cache:
6880
return meth_cache[key]

0 commit comments

Comments
 (0)