diff --git a/python/dune/perftool/generation/backend.py b/python/dune/perftool/generation/backend.py index 27356c937f1c8617297736a34e74d540dd0996d2..0e7b7ec2c705bf7f71fa642544f10861257e2352 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 60f66248d2dee8d521f04cfa55acd3337f70454a..a4c2e21070b45cbe6d3d6273744fb940181399e1 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