Skip to content
Snippets Groups Projects
Commit e559ebec authored by Dominic Kempf's avatar Dominic Kempf
Browse files

Have {retrieve,delete}_cache_items respect context tags

parent 2cc0fb44
No related branches found
No related tags found
No related merge requests found
......@@ -193,7 +193,13 @@ class _ConditionDict(dict):
def _filter_cache_items(gen, condition):
return {k: v for k, v in gen._memoize_cache.items() if eval(condition, _ConditionDict(gen.item_tags))}
ret = {}
for k, v in gen._memoize_cache.items():
_, context_tags = k
if eval(condition, _ConditionDict(gen.item_tags + context_tags)):
ret[k] = v
return ret
def retrieve_cache_items(condition=True, make_generable=False):
......
......@@ -12,7 +12,7 @@ class _GlobalContext(object):
for k, v in self.kw.items():
# First store existing values of the same keys
if k in _global_context_cache:
self.old_kw[k] = v
self.old_kw[k] = _global_context_cache[k]
# Now replace the value with the new one
_global_context_cache[k] = v
......
from collections import Counter
from dune.perftool.generation.cache import(delete_cache_items,
generator_factory,
no_caching,
retrieve_cache_functions,
retrieve_cache_items,
)
from dune.perftool.generation import(delete_cache_items,
generator_factory,
global_context,
no_caching,
retrieve_cache_functions,
retrieve_cache_items,
)
def print_cache():
......@@ -202,3 +203,53 @@ def test_no_caching_function():
assert compare(["one", "one"], list(retrieve_cache_items("no_caching")))
no_caching_function("two")
assert compare(["one", "one", "two"], list(retrieve_cache_items("no_caching")))
# =====================
# Test multiple kernels
# =====================
preamble = generator_factory(item_tags=("preamble",), context_tags=("kernel",))
@preamble
def pre1():
return "blubb"
@preamble
def pre2():
return "bla"
def test_multiple_kernels():
with global_context(kernel="k1"):
pre1()
with global_context(kernel="k2"):
pre2()
preambles = [p for p in retrieve_cache_items("preamble")]
assert len(preambles) == 2
k1, = retrieve_cache_items("k1")
assert k1 == "blubb"
k2, = retrieve_cache_items("k2")
assert k2 == "bla"
delete_cache_items()
with global_context(kernel="k1"):
with global_context(kernel="k2"):
pre2()
pre1()
preambles = [p for p in retrieve_cache_items("preamble")]
assert len(preambles) == 2
k1, = retrieve_cache_items("k1")
assert k1 == "blubb"
k2, = retrieve_cache_items("k2")
assert k2 == "bla"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment