API for filtering / subsetting
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 4.2k
- Forks
- 1.4k
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 14
Description
What is your issue?
(Copied from https://github.com/xarray-contrib/datatree/issues/79 - see there for more discussion)
So far we've only really implemented dictionary-like get/setitem syntax, but we should add a variety of other ways to select nodes from a tree too. Here are some suggestions:
class DataTree:
...
def __getitem__(self, key: str) -> DataTree | DataArray:
"""
Accepts node/variable names, or file-like paths to nodes/variables (inc. '../var').
(Also needs to accommodate indexing somehow.)
"""
...
def subset(self, keys: Sequence[str]) -> DataTree:
"""
Return new tree containing only nodes with names matching keys.
(Could probably be combined with `__getitem__`.
Also unsure what the return type should be.)
"""
...
@property
def subtree(self) -> Iterator[DataTree]:
"""An iterator over all nodes in this tree, including both self and all descendants."""
...
def filter(self, filterfunc: Callable) -> Iterator[DataTree]:
"""Filters subtree by returning only nodes for which `filterfunc(node)` is True."""
...
Are there other types of access that we're missing here? Filtering by regex match? Getting nodes where at least one part of the path matches ("tag-like" access)? Glob?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked datatree discussion and the existing DataTree getitem and setitem behavior. Compare the proposed getitem, subset, subtree, and filter entry points, then clarify their return types and matching semantics. Done means the access and filtering API is agreed and its behavior is covered consistently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend-api-design, data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100