From f35da8a21a63f99f70eea9e33d65ae6d43723531 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Tue, 25 Oct 2016 17:40:52 +0200 Subject: [PATCH] Enhance backend selection mechanism: * Enable backend functions which are *not* generators * Use the sumfac switch as a default switch --- python/dune/perftool/generation/backend.py | 11 +++++++---- python/dune/perftool/options.py | 9 +++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/python/dune/perftool/generation/backend.py b/python/dune/perftool/generation/backend.py index 27356c93..0e7b7ec2 100644 --- a/python/dune/perftool/generation/backend.py +++ b/python/dune/perftool/generation/backend.py @@ -1,4 +1,5 @@ from dune.perftool.generation.cache import _RegisteredFunction +from dune.perftool.options import option_switch from pytools import Record @@ -9,10 +10,12 @@ class FuncProxy(Record): def __init__(self, interface, name, func): Record.__init__(self, interface=interface, name=name, func=func) + def __call__(self, *args, **kwargs): + return self.func(*args, **kwargs) + def register_backend(interface, name, func): _backend_mapping.setdefault(interface, {}) - assert name not in _backend_mapping[interface] _backend_mapping[interface][name] = func @@ -24,15 +27,15 @@ def backend(interface=None, name='default'): # Allow order independence of the generator decorators # and the backend decorator by delaying the registration func = FuncProxy(interface, name, func) - else: - register_backend(interface, name, func) + + register_backend(interface, name, func) return func return _dec -def get_backend(interface=None, selector=None, **kwargs): +def get_backend(interface=None, selector=option_switch("sumfact"), **kwargs): assert interface and selector select = selector(**kwargs) diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py index 60f66248..a4c2e210 100644 --- a/python/dune/perftool/options.py +++ b/python/dune/perftool/options.py @@ -111,3 +111,12 @@ def get_option(key, default=None): init_option_dict() return _option_dict.get(key, default) + + +def option_switch(opt): + def _switch(): + if get_option(opt): + return opt + else: + return "default" + return _switch \ No newline at end of file -- GitLab