From 4652d10af0c9b014e8b1c5f99d3d9677ffefc83d Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Fri, 27 Jan 2023 16:02:50 +0100 Subject: [PATCH 1/4] merge two dictionaries using dictionary unpacking --- datatree/datatree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datatree/datatree.py b/datatree/datatree.py index e51fa929..5f0ab06c 100644 --- a/datatree/datatree.py +++ b/datatree/datatree.py @@ -877,7 +877,7 @@ def update(self, other: Dataset | Mapping[str, DataTree | DataArray]) -> None: vars_merge_result = dataset_update_method(self.to_dataset(), new_variables) # TODO are there any subtleties with preserving order of children like this? - merged_children = OrderedDict(**self.children, **new_children) + merged_children = OrderedDict({**self.children, **new_children}) self._replace( inplace=True, children=merged_children, **vars_merge_result._asdict() ) From fc77c676a14aa07960e2ca904e259858e6f12e33 Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Fri, 27 Jan 2023 16:15:28 +0100 Subject: [PATCH 2/4] check that the fix actually worked --- datatree/tests/test_datatree.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/datatree/tests/test_datatree.py b/datatree/tests/test_datatree.py index 30bdc3fe..8f0d3282 100644 --- a/datatree/tests/test_datatree.py +++ b/datatree/tests/test_datatree.py @@ -235,6 +235,17 @@ def test_update_doesnt_alter_child_name(self): child = dt["a"] assert child.name == "a" + def test_update_overwrite(self): + actual = DataTree.from_dict({"a": DataTree(xr.Dataset({"x": 1}))}) + actual.update({"a": DataTree(xr.Dataset({"x": 2}))}) + + expected = DataTree.from_dict({"a": DataTree(xr.Dataset({"x": 2}))}) + + print(actual) + print(expected) + + dtt.assert_equal(actual, expected) + class TestCopy: def test_copy(self, create_test_datatree): From ecfbbd55dc687ac5b2bb582cd3d29a4afc3608e4 Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Fri, 27 Jan 2023 17:19:17 +0100 Subject: [PATCH 3/4] use `|` to combine two dictionaries --- datatree/datatree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datatree/datatree.py b/datatree/datatree.py index 5f0ab06c..07b25107 100644 --- a/datatree/datatree.py +++ b/datatree/datatree.py @@ -877,7 +877,7 @@ def update(self, other: Dataset | Mapping[str, DataTree | DataArray]) -> None: vars_merge_result = dataset_update_method(self.to_dataset(), new_variables) # TODO are there any subtleties with preserving order of children like this? - merged_children = OrderedDict({**self.children, **new_children}) + merged_children = OrderedDict(self.children | new_children) self._replace( inplace=True, children=merged_children, **vars_merge_result._asdict() ) From e6596ed762c75e352d46bc66e2606ad9dbf2938b Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Fri, 10 Feb 2023 15:18:55 +0100 Subject: [PATCH 4/4] Revert "use `|` to combine two dictionaries" This reverts commit ecfbbd55dc687ac5b2bb582cd3d29a4afc3608e4. --- datatree/datatree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datatree/datatree.py b/datatree/datatree.py index 07b25107..5f0ab06c 100644 --- a/datatree/datatree.py +++ b/datatree/datatree.py @@ -877,7 +877,7 @@ def update(self, other: Dataset | Mapping[str, DataTree | DataArray]) -> None: vars_merge_result = dataset_update_method(self.to_dataset(), new_variables) # TODO are there any subtleties with preserving order of children like this? - merged_children = OrderedDict(self.children | new_children) + merged_children = OrderedDict({**self.children, **new_children}) self._replace( inplace=True, children=merged_children, **vars_merge_result._asdict() )