support dataclasses for component args#1074
Open
daniel-ohayon wants to merge 1 commit intometa-pytorch:mainfrom
Open
support dataclasses for component args#1074daniel-ohayon wants to merge 1 commit intometa-pytorch:mainfrom
daniel-ohayon wants to merge 1 commit intometa-pytorch:mainfrom
Conversation
Summary:
This change adds the ability to provide component arguments via a single dataclass (which can still be combined with positional varargs).
One motivation for supporting dataclasses is to facilitate composition of components, eg consider a scenario where `component2` is an extension of `component1` – it takes the same args as component1 + some extra ones, calls `component1` and does some extra work on top with the additional arguments.
## Before
```lang=python
def component1(arg1: str, arg2: int, ...argN: str): ...
# need to repeat all arguments, unclear which ones are specific to component2
def component2(arg1: str, arg2: int, ... argN: str, otherArg: str):
# need to pass all component1-specific args to component1 explicitly
app_def = component1(arg1, arg2, ... argN)
return do_something(app_def, otherArg)
```
## After
```lang=python
dataclass
class Comp1Args:
arg1: str
arg2: int
...
argN: str
# separation of args for the 2 components is explicit via the dataclasses
# no need to spell out all the args thanks to inheritance
dataclass
class Comp2Args(Comp1Args):
other_arg: str
def component1(args: Comp1Args): ...
def component2(args: Comp2Args):
# no need to spell out all the args when calling component1
app_def = component1(args)
return do_something(app_def, other_arg)
```
Differential Revision: D75320316
Contributor
|
This pull request was exported from Phabricator. Differential Revision: D75320316 |
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.
Summary:
This change adds the ability to provide component arguments via a single dataclass (which can still be combined with positional varargs).
One motivation for supporting dataclasses is to facilitate composition of components, eg consider a scenario where
component2is an extension ofcomponent1– it takes the same args as component1 + some extra ones, callscomponent1and does some extra work on top with the additional arguments.Before
After
Differential Revision: D75320316