Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ops): add tree flatten and tree map functions with extra paths #11

Merged
merged 3 commits into from
Nov 15, 2022

Conversation

XuehaiPan
Copy link
Member

Description

Describe your changes in detail.

Motivation and Context

Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.
You can use the syntax close #15213 if this solves the issue #15213

  • I have raised an issue to propose this change (required for new features and bug fixes)

Add functions tree_flatten_with_path, tree_paths, and tree_map_with_path.

The path is a tuple of entries (indices or keys) to the corresponding leaf. The depth of the leaf can be derivated by depth = len(path).

paths, leaves, treespec = optree.tree_flatten_with_path(tree)
paths = optree.tree_paths(tree)

def fn(p, x, *xs):
    ...

mapped_tree = optree.tree_map_with_path(fn, tree, *rests)

Types of changes

What types of changes does your code introduce? Put an x in all the boxes that apply:

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds core functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation (update in the documentation)

Checklist

Go over all the following points, and put an x in all the boxes that apply.
If you are unsure about any of these, don't hesitate to ask. We are here to help!

  • I have read the CONTRIBUTION guide. (required)
  • My change requires a change to the documentation.
  • I have updated the tests accordingly. (required for a bug fix or a new feature)
  • I have updated the documentation accordingly.
  • I have reformatted the code using make format. (required)
  • I have checked the code using make lint. (required)
  • I have ensured make test pass. (required)

@XuehaiPan XuehaiPan added the enhancement New feature or request label Nov 13, 2022
@XuehaiPan XuehaiPan requested a review from JieRen98 November 13, 2022 07:05
@XuehaiPan XuehaiPan self-assigned this Nov 13, 2022
@codecov-commenter
Copy link

codecov-commenter commented Nov 13, 2022

Codecov Report

Base: 92.65% // Head: 92.93% // Increases project coverage by +0.28% 🎉

Coverage data is based on head (f233607) compared to base (582f355).
Patch coverage: 90.00% of modified lines in pull request are covered.

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #11      +/-   ##
==========================================
+ Coverage   92.65%   92.93%   +0.28%     
==========================================
  Files           4        4              
  Lines         245      269      +24     
==========================================
+ Hits          227      250      +23     
- Misses         18       19       +1     
Flag Coverage Δ
unittests 92.93% <90.00%> (+0.28%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
optree/__init__.py 100.00% <ø> (ø)
optree/registry.py 95.50% <ø> (ø)
optree/ops.py 90.62% <90.00%> (+0.91%) ⬆️

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

@XuehaiPan XuehaiPan force-pushed the flatten-with-path branch 11 times, most recently from dcadccb to 3086c8d Compare November 15, 2022 11:28
@XuehaiPan XuehaiPan merged commit f2b31a4 into metaopt:main Nov 15, 2022
@XuehaiPan XuehaiPan deleted the flatten-with-path branch November 15, 2022 13:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants