def _setup_sim(self, sim_id, controls, file_system): def _set_ext_param(ext_param, key, assignment): if isinstance(assignment, dict): # handle suffixes suffixes = ext_param.config[key] if len(assignment) != len(suffixes): raise KeyError( "Key {} is missing values for these suffixes: {}". format( key, set(suffixes).difference(set(assignment.keys())))) for suffix, value in assignment.items(): ext_node[key, suffix] = value else: # assume assignment is a single numerical value ext_node[key] = assignment node_id = NodeId(0, sim_id) if set(controls.keys()) != self.control_keys: err_msg = "Mismatch between initialized and provided control names." raise KeyError(err_msg) for control_name, control in controls.items(): ens_config = self.res_config.ensemble_config node = EnkfNode(ens_config[control_name]) ext_node = node.as_ext_param() if len(ext_node) != len(control.keys()): raise KeyError(("Expected {} variables for control {}, " "received {}.").format(len(ext_node), control_name, len(control.keys()))) for var_name, var_setting in control.items(): _set_ext_param(ext_node, var_name, var_setting) node.save(file_system, node_id)
def test_config(self): keys = ["Key1", "Key2", "Key3"] with TestAreaContext("enkf_node"): config = EnkfConfigNode.create_ext_param("key", keys) node = EnkfNode(config) ext_node = node.as_ext_param() ext_config = config.getModelConfig() ext_node.set_vector([1, 2, 3]) node.ecl_write("path") d = json.load(open("path/key.json")) self.assertEqual(d["Key1"], 1) self.assertEqual(d["Key3"], 3)