From e559ebecd5ae55accbf5a4ebe61aa73fa2f98f34 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Tue, 22 Nov 2016 17:00:54 +0100 Subject: [PATCH] Have {retrieve,delete}_cache_items respect context tags --- python/dune/perftool/generation/cache.py | 8 ++- python/dune/perftool/generation/context.py | 2 +- .../dune/perftool/generation/test_cache.py | 63 +++++++++++++++++-- 3 files changed, 65 insertions(+), 8 deletions(-) diff --git a/python/dune/perftool/generation/cache.py b/python/dune/perftool/generation/cache.py index bcbc8b1e..788ba192 100644 --- a/python/dune/perftool/generation/cache.py +++ b/python/dune/perftool/generation/cache.py @@ -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): diff --git a/python/dune/perftool/generation/context.py b/python/dune/perftool/generation/context.py index 3766971d..55feda42 100644 --- a/python/dune/perftool/generation/context.py +++ b/python/dune/perftool/generation/context.py @@ -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 diff --git a/python/test/dune/perftool/generation/test_cache.py b/python/test/dune/perftool/generation/test_cache.py index f974a518..3d970480 100644 --- a/python/test/dune/perftool/generation/test_cache.py +++ b/python/test/dune/perftool/generation/test_cache.py @@ -1,11 +1,12 @@ 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" -- GitLab