xarray-contrib / datatree

WIP implementation of a tree-like hierarchical data structure for xarray.
https://xarray-datatree.readthedocs.io
Apache License 2.0
161 stars 43 forks source link

`drop_vars` issue? #316

Open agrouaze opened 4 months ago

agrouaze commented 4 months ago

I don't know if it is an issue (datatree==0.0.14) but, at least, it is an error that could appear quite easily:

import datatree
import xarray as xr
ds = xr.DataArray([[1,2,3]],dims=['a','b'])
dt =datatree.DataTree()
dt['A'] = ds
dt['B'] = ds
for grp in dt.groups:
    vars2drop = [vv for vv in dt[grp] if 'example' in vv]
    dt[grp] = dt[grp].drop_vars(vars2drop)

the case that would be problematic is:

dt['/'] = dt['/'].drop_vars([])

the error raised is:

File ~/micromamba/envs/micromamba1/lib/python3.10/site-packages/datatree/datatree.py:852, in DataTree.__setitem__(self, key, value)
    848 elif isinstance(key, str):
    849     # TODO should possibly deal with hashables in general?
    850     # path-like: a name of a node/variable, or path to a node/variable
    851     path = NodePath(key)
--> 852     return self._set_item(path, value, new_nodes_along_path=True)
    853 else:
    854     raise ValueError("Invalid format for key")

File ~/micromamba/envs/micromamba1/lib/python3.10/site-packages/datatree/treenode.py:494, in TreeNode._set_item(self, path, item, new_nodes_along_path, allow_overwrite)
    491     path = NodePath(path)
    493 if not path.name:
--> 494     raise ValueError("Can't set an item under a path which has no name")
    496 if path.root:
    497     # absolute path
    498     current_node = self.root

ValueError: Can't set an item under a path which has no name