From 5c81ea7c44c9e48fcd243bdc57464eaf34a92650 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Thu, 14 Apr 2016 10:42:36 +0200 Subject: [PATCH] Move cache_context into its own module --- python/dune/perftool/generation/__init__.py | 4 ++- python/dune/perftool/generation/cache.py | 30 +++------------------ python/dune/perftool/generation/context.py | 26 ++++++++++++++++++ 3 files changed, 32 insertions(+), 28 deletions(-) create mode 100644 python/dune/perftool/generation/context.py diff --git a/python/dune/perftool/generation/__init__.py b/python/dune/perftool/generation/__init__.py index cdbcb77d..906183ac 100644 --- a/python/dune/perftool/generation/__init__.py +++ b/python/dune/perftool/generation/__init__.py @@ -1,7 +1,6 @@ from __future__ import absolute_import from dune.perftool.generation.cache import (cached, - cache_context, generator_factory, retrieve_cache_items, delete_cache_items, @@ -24,3 +23,6 @@ from dune.perftool.generation.loopy import (domain, temporary_variable, valuearg, ) + +from dune.perftool.generation.context import (cache_context, + ) \ No newline at end of file diff --git a/python/dune/perftool/generation/cache.py b/python/dune/perftool/generation/cache.py index ac5dc155..3975dda9 100644 --- a/python/dune/perftool/generation/cache.py +++ b/python/dune/perftool/generation/cache.py @@ -11,31 +11,6 @@ from pytools import memoize # have one cache the module level. It is easier than handing around an instance of it. _cache = {} -# Implement a context manager that allows to temporarily define tags globally. -_cache_context_stack = [] - - -class _CacheContext(object): - def __init__(self, tags): - self.tags = tags - - def __enter__(self): - _cache_context_stack.append(self.tags) - - def __exit__(self, exc_type, exc_value, traceback): - _cache_context_stack.pop() - - -def cache_context(*tags): - return _CacheContext(tags) - - -def _get_context_tags(): - result = tuple() - for items in _cache_context_stack: - result = result + items - return result - def _freeze(data): """ A function that deterministically generates an @@ -133,10 +108,11 @@ class _RegisteredFunction(object): self.cache_key_generator = cache_key_generator # Append the current context item tags to the given ones + from dune.perftool.generation.context import get_context_tags if 'item_tags' in kwargs: - kwargs['item_tags'] = tuple(kwargs['item_tags']) + _get_context_tags() + kwargs['item_tags'] = tuple(kwargs['item_tags']) + get_context_tags() else: - kwargs['item_tags'] = _get_context_tags() + kwargs['item_tags'] = get_context_tags() self.itemtype = _construct_cache_item_type("CacheItemType", **kwargs) diff --git a/python/dune/perftool/generation/context.py b/python/dune/perftool/generation/context.py new file mode 100644 index 00000000..d96e7e9c --- /dev/null +++ b/python/dune/perftool/generation/context.py @@ -0,0 +1,26 @@ +""" Context managers for code generation. """ + +# Implement a context manager that allows to temporarily define tags globally. +_cache_context_stack = [] + + +class _CacheContext(object): + def __init__(self, tags): + self.tags = tags + + def __enter__(self): + _cache_context_stack.append(self.tags) + + def __exit__(self, exc_type, exc_value, traceback): + _cache_context_stack.pop() + + +def cache_context(*tags): + return _CacheContext(tags) + + +def get_context_tags(): + result = tuple() + for items in _cache_context_stack: + result = result + items + return result -- GitLab