Repository navigation
Support signed numeric constants in match pattern ASTs - #9279
Conversation
Recognize numeric Expr::Constant values when validating signed literal patterns, alongside parser-produced NumberLiteral nodes. Python AST conversion uses the former representation. Accept unary plus as well as minus and fold signed real/imaginary and complex patterns consistently. Boolean and non-numeric constants remain excluded. Preserve the existing parser-produced literal path and do not change source grammar. Assisted-by: OpenAI Codex:model-version-unavailable
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
📒 Files selected for processing: 2
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Merging this PR will degrade performance by 11.93%
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Summary
Split the signed numeric pattern closure from #8954 onto validated base
cf56c1fa09654507939aac5f47be5e5692e1dce0.ast.Constantoperands using their existing canonical representation, while retaining parser-produced numeric literal handling.UAddas well asUSubfor numeric match values and mapping keys, including signed real parts of complex literals.The representation adaptation matters: Python AST conversion now produces
Expr::Constant, while the old signed-number validator accepted onlyExpr::NumberLiteral. Merely copying the mega's unary-plus hunks still rejects valid manual ASTs, including unary minus.No Lib changes, parser pin changes, new Rust tests of Python behavior, or duplicated snippets. No Ruff #7 or #9074 overlap. Redundant lazy-future and type-alias changes from the mega are deliberately excluded because current main already supplies those behaviors.
Validation
--no-run, excluding wasm/venvlauncher/CAPI) and separate CAPI test compilation passed. These are compile-only checks, not full runtime-suite results.Reference
CPython 3.15.0 source pin
d220409a13b77de7a6c30abe16ea90db01528edc: numeric/signed validation and match-pattern folding.AI-assisted implementation and validation with OpenAI Codex; exact model version unavailable. No merge requested.
Performance follow-up
The exact-head hosted checks completed with 17 successes, three conditional skips and one unresolved CodSpeed failure. CodSpeed actually measured
comprehension_list.py: 804.5 → 913.4 µs (−11.93% efficiency), comparing main2be9389against tested merge8c91234; baseline and head environment signatures, runner and kernel versions matched.A separately reviewed, fixed native experiment used that exact source pair and the unchanged benchmark: 12 ABBA blocks, 48 fresh processes, one selector and all observations retained. Candidate time changed −0.087%, with a descriptive 95% block-bootstrap interval of −3.666% to +3.856%. Same-binary variability was substantial. This local native result does not establish equivalence, reproduce CodSpeed simulation or explain its failure; the host and embedded build metadata differ from CI. Static hot-path inspection found equal selected instruction shapes but different layouts, not proof of causation. The quiet intervals were coordinated through explicit heavy-work release, but the process guard was PID-namespace-local and could not verify absence of contention from other executions or the host.
The first excluded smoke stopped on a compatibility-URI validation mismatch. A source-reviewed schema correction preceded a new attempt with the unchanged schedule; neither smoke attempt entered the estimate. No hosted benchmark rerun, performance dismissal, simulation setup or security-setting change was performed. The failed CodSpeed check remains visible.