Implement graph composition with callable Graph interface #96
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.
This PR implements graph composition functionality by making
Graph
objects callable, enabling the syntaxGraph()(value, ...) -> value...
as specified in the original issue.What this enables
Implementation Details
Graph.__call__(*args: Value) -> tuple[Value, ...]
method that creates a copy of the graph and connects new values as inputsKey Features
✅ Exact syntax support:
Graph()(value, ...) -> value...
works as specified✅ Graph copying: Creates a true copy with independent nodes and values
✅ Connection preservation: Maintains all internal graph connectivity
✅ Initializer support: Properly handles graphs with constant initializers
✅ Property preservation: Value names, types, shapes, and const_values are maintained
✅ Error handling: Clear validation for argument count and graph ownership
✅ Multiple composition: Same graph can be composed multiple times safely
Testing
_graph_composition_test.py
) with 7 test cases covering:_core_test.py
)Backward Compatibility
This change is fully backward compatible - it only adds new functionality without modifying existing APIs.
Fixes #58.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.