def test_update_simple(vos, label_grid): tree = Tree(vos, label_grid) new_vos = [{"d0": 1, "d1": "hello", "value": 2}] new_tree = Tree(new_vos, label_grid) tree.update(new_tree) assert tree.vos == [ { "d0": 1, "d1": "hello", "value": 2 }, { "d0": 1, "d1": "world", "value": 1 }, { "d0": 2, "d1": "hello", "value": 1 }, { "d0": 3, "d1": "world", "value": 1 }, ] assert_rebalanced(tree)
def test_delete_all(vos, label_grid): tree = Tree(vos, label_grid) new_vos = [{"value": None}] new_tree = Tree(new_vos, label_grid) tree.update(new_tree) assert tree.vos == [] assert_rebalanced(tree)
def test_error_on_extra_label(vos, label_grid): tree = Tree(vos, label_grid) new_vos = [{"d2": 2, "d0": 1, "d1": "hello", "value": 2}] new_tree = Tree(new_vos, label_grid) with pytest.raises(ParamToolsError): tree.update(new_tree) assert_rebalanced(tree)
def _update_param(self, param, new_values): """ Update the current parameter values with those specified by the adjustment. The values that need to be updated are chosen by finding all value items with label values matching the label values specified in the adjustment. If the value is set to None, then that value object will be removed. Note: _update_param used to raise a ParameterUpdateException if one of the new values did not match at least one of the current value objects. However, this was dropped to better support the case where the parameters are being extended along some label to fill the parameter space. An exception could be raised if a new value object contains a label that is not used in the current value objects for the parameter. However, it seems like it could be expensive to check this case, especially when a project is extending parameters. For now, no exceptions are raised by this method. """ curr_values = self._data[param]["value"] if param in self._search_trees: curr_tree = self._search_trees[param] else: curr_tree = Tree(vos=curr_values, label_grid=self.label_grid) new_tree = Tree(vos=new_values, label_grid=self.label_grid) self._data[param]["value"] = curr_tree.update(new_tree) self._search_trees[param] = curr_tree
def test_delete_some(vos, label_grid): tree = Tree(vos, label_grid) new_vos = [{"d1": "hello", "value": None}] new_tree = Tree(new_vos, label_grid) tree.update(new_tree) assert tree.vos == [ { "d0": 1, "d1": "world", "value": 1 }, { "d0": 3, "d1": "world", "value": 1 }, ]