[Feat] Support dataclass in magi_register_custom_op#32
Merged
jiahy0825 merged 7 commits intoMay 19, 2026
Merged
Conversation
jiahy0825
reviewed
May 17, 2026
23 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🗂️ PR Category
📝 Description
What's new
@magi_register_custom_opnow accepts frozen-dataclass parameters (recursively nested), so users can group config / flags as a single@dataclass(frozen=True)whiletorch.library's schema continues to see only primitives.Internally, the user signature is lowered to a flat form at registration time, and a small runtime adapter flattens / unflattens dataclass values around every call.
Quick start
Full-support example
The same lower-signature pass also handles (transparent to users):
Literal[...]/ string-Enumannotations → auto-downgraded tostrmutates_argsaccepts either the dataclass-level name (expands to all Tensor leaves) or any lowered leaf namebackward_fnreturns one grad per original parameter (not per leaf); a whole non-differentiable dataclass arg collapses to a singleNoneArchitecture — 4-slot pipeline
Each registration owns up to 4 named objects:
fnlowered_fntorch_registered_optorch.librarymagi_exposed_opThe naming is deliberately dual:
torch_registered_opis registered intotorch.library's dispatcher;magi_exposed_opis exposed out of Magi to the user.Tests
86 new tests in
tests/api_tests/test_register_custom_op.pycover all three runtime paths, autograd bridging through dataclass inputs, nested dataclasses,Optional/Literal/Enum/ dtype / device fields,torch.compileintegration, and full error-path coverage.