From 7acdc31cb90a9587324cbd68001f5c29fa1e0d57 Mon Sep 17 00:00:00 2001 From: Martin Bauer <martin.bauer@fau.de> Date: Tue, 10 Apr 2018 14:07:05 +0200 Subject: [PATCH] More tests --- cpu/cpujit.py | 15 +++------------ utils.py | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/cpu/cpujit.py b/cpu/cpujit.py index 36edade18..42d5caa10 100644 --- a/cpu/cpujit.py +++ b/cpu/cpujit.py @@ -72,10 +72,11 @@ import numpy as np from appdirs import user_config_dir, user_cache_dir from ctypes import cdll from pystencils.backends.cbackend import generate_c, get_headers -from collections import OrderedDict, Mapping +from collections import OrderedDict from pystencils.transformations import symbol_name_to_variable_name from pystencils.data_types import to_ctypes, get_base_type, StructType from pystencils.field import FieldType +from pystencils.utils import recursive_dict_update def make_python_function(kernel_function_node, argument_dict={}): @@ -133,16 +134,6 @@ def set_compiler_config(config): _config = config.copy() -def _recursive_dict_update(d, u): - for k, v in u.items(): - if isinstance(v, Mapping): - r = _recursive_dict_update(d.get(k, {}), v) - d[k] = r - else: - d[k] = u[k] - return d - - def get_configuration_file_path(): config_path_in_home = os.path.join(user_config_dir('pystencils'), 'config.json') @@ -200,7 +191,7 @@ def read_config(): if config_exists: with open(config_path, 'r') as jsonConfigFile: loaded_config = json.load(jsonConfigFile) - config = _recursive_dict_update(config, loaded_config) + config = recursive_dict_update(config, loaded_config) else: create_folder(config_path, True) json.dump(config, open(config_path, 'w'), indent=4) diff --git a/utils.py b/utils.py index 439cc944e..57abda263 100644 --- a/utils.py +++ b/utils.py @@ -1,3 +1,5 @@ +from typing import Mapping + class DotDict(dict): """Normal dict with additional dot access for all keys""" @@ -13,3 +15,22 @@ def all_equal(iterator): except StopIteration: return True return all(first == rest for rest in iterator) + + +def recursive_dict_update(d, u): + """Updates the first dict argument, using second dictionary recursively. + + Examples: + >>> d = {'sub_dict': {'a': 1, 'b': 2}, 'outer': 42} + >>> u = {'sub_dict': {'a': 5, 'c': 10}, 'outer': 41, 'outer2': 43} + >>> recursive_dict_update(d, u) + {'sub_dict': {'a': 5, 'b': 2, 'c': 10}, 'outer': 41, 'outer2': 43} + """ + d = d.copy() + for k, v in u.items(): + if isinstance(v, Mapping): + r = recursive_dict_update(d.get(k, {}), v) + d[k] = r + else: + d[k] = u[k] + return d -- GitLab