From 597f7c9db0e990394a9eba4a080cd2b81eacc4ba Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Wed, 23 Nov 2016 15:39:10 +0100 Subject: [PATCH] Fix interplay of no_deco and context_tags --- python/dune/perftool/generation/cache.py | 6 ++- .../dune/perftool/generation/test_cache.py | 37 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/python/dune/perftool/generation/cache.py b/python/dune/perftool/generation/cache.py index 2af48bd1..9f7aba9b 100644 --- a/python/dune/perftool/generation/cache.py +++ b/python/dune/perftool/generation/cache.py @@ -110,7 +110,11 @@ class _RegisteredFunction(object): return self._get_content(cache_key) def __call__(self, *args, **kwargs): - with global_context(**self.kwargs): + additional_kw = {k: kwargs[k] for k in kwargs if k in self.context_tags} + for k, v in self.kwargs.items(): + additional_kw[k] = v + kwargs = {k: kwargs[k] for k in kwargs if k not in self.context_tags} + with global_context(**additional_kw): return self.call(*args, **kwargs) diff --git a/python/test/dune/perftool/generation/test_cache.py b/python/test/dune/perftool/generation/test_cache.py index fa86a9b5..47b9bc7f 100644 --- a/python/test/dune/perftool/generation/test_cache.py +++ b/python/test/dune/perftool/generation/test_cache.py @@ -290,3 +290,40 @@ def test_multiple_kernels_3(): assert k4 == "bar" delete_cache_items() + + +def test_multiple_kernels_4(): + gen = generator_factory(item_tags=("tag",), context_tags=("kernel",), no_deco=True) + + with global_context(kernel="k1"): + gen("foo") + + with global_context(kernel="k2"): + gen("bar") + + assert len([i for i in retrieve_cache_items("tag")]) == 2 + + k1, = retrieve_cache_items("k1") + assert k1 == "foo" + + k2, = retrieve_cache_items("k2") + assert k2 == "bar" + + delete_cache_items() + + +def test_multiple_kernels_5(): + gen = generator_factory(item_tags=("tag",), context_tags=("kernel",), no_deco=True) + + gen("foo", kernel="k1") + gen("bar", kernel="k2") + + assert len([i for i in retrieve_cache_items("tag")]) == 2 + + k1, = retrieve_cache_items("k1") + assert k1 == "foo" + + k2, = retrieve_cache_items("k2") + assert k2 == "bar" + + delete_cache_items() -- GitLab