From 4e0615452ea7996caaac522c4c3302a5ecc19994 Mon Sep 17 00:00:00 2001 From: IMGillusion Date: Sun, 6 Sep 2026 02:57:05 +0800 Subject: [PATCH 1/2] Fix misleading DataTree constructor error message (#11514) The `DataTree` constructor only accepts an `xarray.Dataset`, `xarray.Coordinates`, or `None` as its `dataset` argument, but the TypeError raised for any other input incorrectly listed `dict` as a valid type (a leftover from an earlier API iteration). Update the message to name `xarray.Coordinates` so it is not misleading. Add a regression test in `TestTreeCreation.test_data_arg`. --- xarray/core/datatree.py | 2 +- xarray/tests/test_datatree.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/xarray/core/datatree.py b/xarray/core/datatree.py index 98934f29b92..6a6e676e2ad 100644 --- a/xarray/core/datatree.py +++ b/xarray/core/datatree.py @@ -140,7 +140,7 @@ def _to_new_dataset(data: Dataset | Coordinates | None) -> Dataset: elif data is None: ds = Dataset() else: - raise TypeError(f"data object is not an xarray.Dataset, dict, or None: {data}") + raise TypeError(f"data object is not an xarray.Dataset, xarray.Coordinates, or None: {data}") return ds diff --git a/xarray/tests/test_datatree.py b/xarray/tests/test_datatree.py index 19133bfd88d..5a3fb55eb48 100644 --- a/xarray/tests/test_datatree.py +++ b/xarray/tests/test_datatree.py @@ -69,6 +69,11 @@ def test_data_arg(self) -> None: with pytest.raises(TypeError): DataTree(dataset=xr.DataArray(42, name="foo")) # type: ignore[arg-type] + # A dict is not an accepted data object; the error message must not + # advertise ``dict`` as a valid type (regression test for #11514). + with pytest.raises(TypeError, match=r"xarray\.Coordinates"): + DataTree(dataset=dict()) # type: ignore[arg-type] + def test_child_data_not_copied(self) -> None: # regression test for https://github.com/pydata/xarray/issues/9683 class NoDeepCopy: From dbd9c541e48a65a1e425ca83fe23866db2207c78 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 5 Sep 2026 18:58:15 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/core/datatree.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xarray/core/datatree.py b/xarray/core/datatree.py index 6a6e676e2ad..c5087dc1634 100644 --- a/xarray/core/datatree.py +++ b/xarray/core/datatree.py @@ -140,7 +140,9 @@ def _to_new_dataset(data: Dataset | Coordinates | None) -> Dataset: elif data is None: ds = Dataset() else: - raise TypeError(f"data object is not an xarray.Dataset, xarray.Coordinates, or None: {data}") + raise TypeError( + f"data object is not an xarray.Dataset, xarray.Coordinates, or None: {data}" + ) return ds