import yaml from dotmap import DotMap def extend_dict(extend_me, extend_by): if isinstance(extend_me, dict): for k, v in extend_by.iteritems(): if k in extend_me: extend_dict(extend_me[k], v) else: extend_me[k] = v else: if isinstance(extend_me, list): extend_list(extend_me, extend_by) else: if extend_by is not None: extend_me += extend_by def extend_list(extend_me, extend_by): missing = [] for item1 in extend_me: if not isinstance(item1, dict): continue for item2 in extend_by: if not isinstance(item2, dict) or item2 in missing: continue extend_dict(item1, item2) def extend_compatibility_for_gated_transformer(configuration): dict_config = configuration.toDict() return configuration def get_config(path): with open(path, 'r') as file: configuration = yaml.load(file, Loader=yaml.FullLoader) with open('config/default.yml', 'r') as file: base_configuration = yaml.load(file, Loader=yaml.FullLoader) configuration = DotMap(configuration) base_configuration = DotMap(base_configuration) extend_dict(configuration, base_configuration) configuration = extend_compatibility_for_gated_transformer(configuration) return configuration if __name__ == '__main__': config = get_config('config/bert-base.yml')