Fix Sequential double execution bug (#10393) #10482
Open
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.
Description
Fixes #10393 - Sequential initialization causing program to run twice when called from a script with a valid Python identifier name.
Problem
When
torch_geometric.nn.Sequential
was initialized from a script with a valid Python identifier name (e.g.,foo.py
), the entire program would execute twice. This only occurred when the filename was a syntactically valid Python function name.Example
Running
python foo.py
would output:Root Cause
The jinja template used by Sequential was importing the caller module with
from <module> import *
. When the caller was the__main__
script (e.g.,foo.py
), this caused Python to import and execute the module again, resulting in double execution.Solution
Modified
_set_jittable_template
method to filter out the caller module from imports if:__main__
(the script being executed)sys.modules
(would be imported for the first time)This prevents circular imports and double execution while maintaining functionality for legitimate module imports.
Changes
torch_geometric/nn/sequential.py
to add filtering logic before passing modules to the jinja templatetest_sequential_no_double_execution
to prevent regressionTesting
test/nn/test_sequential.py
pass (7/7)Checklist