-
Notifications
You must be signed in to change notification settings - Fork 3.8k
[TIR][Schedule] Fix type checker to support subscripted generics in Python 3.14+ #18639
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
[TIR][Schedule] Fix type checker to support subscripted generics in Python 3.14+ #18639
Conversation
Summary of ChangesHello @khj809, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request resolves a compatibility issue within the Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
The pull request introduces a change to _type_checker.py to improve how the origin of generic types is determined, specifically adding a direct __origin__ attribute check for Python 3.14+ compatibility. Concurrently, a new test test_subscripted_generics was added to test_type_annotation_checker.py to verify the _dispatcher's handling of various generic type annotations and their subtypes, especially in the context of Python 3.14's internal representation changes. The review comment suggests enhancing this new test by making the assertion for nested Union types more robust, recommending a check for exact subtypes instead of just the count, which would also simplify the test's conditional logic.
mshr-h
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
This PR fixes the type annotation checker in
tvm.tir.schedule._type_checkerto correctly handle subscripted generics (e.g.,Union[str, int],List[str],Tuple[str, int]) in Python 3.14+.Background
In Python 3.14, the internal representation of generic types has changed:
Union[str, int]is now of typetyping.Unioninstead oftyping._GenericAliasortyping._SpecialGenericAlias__origin__attribute directly on the type objectChanges
Added a check for
__origin__attribute at the beginning of the method to handle Python 3.14's new generic type representations. This is fully backward compatible since the new__origin__check is only applied when the attribute exists.Tests
Added parametrized tests to verify the dispatcher correctly handles subscripted generics:
Union[str, int]→ identified as "union"List[str]→ identified as "list"Dict[str, int]→ identified as "dict"Tuple[str, int]→ identified as "tuple"Union[List[str], Dict[str, int]]→ identified as "union" with nested generics