Repository navigation
refactor(program)!: the node a use of a named expression stands as is NamedExpression, beside NamedMask, and Named is gone - #822
Merged
FabianHofmann merged 9 commits intoOct 6, 2026
Conversation
…NamedExpression, beside NamedMask, and Named is gone mathspec.program.Named is renamed NamedExpression, so the two pass-through nodes read as a pair: NamedExpression over an expressions: entry's arithmetic, NamedMask over a masks: entry's predicate. No alias is kept; a consumer that imports Named imports NamedExpression instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PBmqeqBrqpQC6MVoSrguHK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PBmqeqBrqpQC6MVoSrguHK
FBumann
added this pull request to stack #823
October 1, 2026 15:19
Documentation build overview
57 files changed ·
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PBmqeqBrqpQC6MVoSrguHK
FBumann
removed this pull request from stack #823
October 2, 2026 06:51
FBumann
added this pull request to stack #831
October 2, 2026 06:52
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PBmqeqBrqpQC6MVoSrguHK
Brings in origin/main through the base branch of #821. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011a8N2JQdmmd1WhVCKN1a2A
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CsaSWMofYqJiKmnSiPycV9
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011a8N2JQdmmd1WhVCKN1a2A
…to refactor/named-expression
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.
Note
The following content was generated by AI.
What this changes
Breaking.
mathspec.program.Namedis nowNamedExpression, so it reads as the pair of #821'sNamedMask. No alias is kept, so an import ofNamedfails. This PR is stacked on #821.from mathspec.program import Namedfrom mathspec.program import NamedExpressionisinstance(node, Named)isinstance(node, NamedExpression)Why
#821 adds
NamedMask, a pass-through over amasks:entry's predicate.Namedis the same kind of node over anexpressions:entry's arithmetic. They stay two classes becauseExpressionandPredicateare two closed node sets with their own walks. One class in both sets would break everyassert_nevermatch. The names now say which set each node belongs to.Method, gate output, release note, what is not done
Method. One regular expression renames the identifier
Namedand leaves the prose alone: "Named expression 'e'" in messages, the "Named expressions" headings, and the test docstrings that use the word. The touched code isprogram.py(the class,__all__and the union),resolution.py,lowering.py,dimensions.py,boundedness.py,typesetting/walk.pyand_expression_resolver.py. Also touched:tools/gallery.py, four test files, anddocs/reference/reading.md. Every remainingNamedwas checked, and each one is in prose.Base merged. The updated #821 branch, which now holds main with #664, is merged here (
06d874f). Three conflicts were imports and one assertion, inboundedness.py,tests/test_expansion.pyandtests/typesetting/test_golden.py. #664 renamedGroupSumandPullbacktoJoin, and addedAxis. The resolution keeps #664's nodes and spellsNamedExpression. NoNamedidentifier remains.Release note. The title and the changelog line carry
!, asfeat!:did in 0.2.0. By the AGENTS.md rule, a release that breaks an import raises the minor version, so the next release is 0.3.0, and its notes name this break. specsolve, or any consumer that matches on the node, changes one import and theisinstancechecks that use it.tools.changelog entryreads the typerefactorbefore the!, and finds the line.!.Base merged again (
ca1afd5). The #821 branch now holds main with #793 and #844. The merge was clean, and the regenerated files did not change. #821's two new_READS_ORDERcases pass here too: a mask still goes through #793's order check after the rename.Gates (on
ca1afd5).pixi run ci: exit 0. That is lint, 2733 passed and 1 skipped, strictdocs-build, andcompile-tex(54 documents).Not done.
🤖 Generated with Claude Code
https://claude.ai/code/session_01PBmqeqBrqpQC6MVoSrguHK