Lower linear broadcasting through bipermutedimsopadd!#232
Merged
Conversation
copyto! and copy now run the denamed broadcast through tryflattenlinear, and the linear case lowers to permutedimsopadd! on the name-aligned operands, where each operand's PermutedDimsArray alignment is unwrapped down to the backend's own bipermutedimsopadd!. Nonlinear broadcasts fall back to the existing denamed Base broadcast. aligneddims now aligns through the overloadable TensorAlgebra.permuteddims hook, and the FunctionImplementations dependency is dropped (the dead ImplementationStyle trait that routed the old lazy permute is removed). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #232 +/- ##
==========================================
+ Coverage 72.96% 72.97% +0.01%
==========================================
Files 20 20
Lines 1043 1051 +8
==========================================
+ Hits 761 767 +6
- Misses 282 284 +2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mtfishman
added a commit
to ITensor/GradedArrays.jl
that referenced
this pull request
Jun 17, 2026
…h bipermutedimsopadd! (#177) ## Summary Removes the eager `FunctionImplementations.permuteddims` overloads on `AbstractGradedArray`, `AbstractSectorArray`, and `AbstractSectorDelta`. These existed only to align graded operands during `NamedDimsArrays` broadcasting by materializing a permuted copy. `NamedDimsArrays` now aligns lazily and lowers linear broadcasts through `bipermutedimsopadd!` (ITensor/TensorAlgebra.jl#178, ITensor/NamedDimsArrays.jl#232), so a permuted graded operand reaches the block-wise `bipermutedimsopadd!` without the eager copy. Bumps the `TensorAlgebra` and `NamedDimsArrays` compat floors to the versions that introduce that path. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.
Summary
Routes linear broadcasting of
AbstractNamedDimsArrays through TensorAlgebra'sbipermutedimsopadd!.copyto!andcopynow run the denamed broadcast throughtryflattenlinear, and the linear case lowers topermutedimsopadd!on the name-aligned operands, where each operand'sPermutedDimsArrayalignment is unwrapped down to the backend's ownbipermutedimsopadd!(the unwrap added in ITensor/TensorAlgebra.jl#178). Nonlinear broadcasts fall back to the existing denamed Base broadcast. For a graded or block-sparse backing, a permuted broadcast now reaches the block-wise primitive and the result keeps its backend type rather than densifying.Out-of-place results allocate from a bare operand prototype with the broadcast result axes, since
similarof a permuted wrapper drops the backend.Drops the
FunctionImplementationsdependency:aligneddimsnow gets its lazy permute throughTensorAlgebra.permuteddims, and the now-deadImplementationStyletrait that routed it is removed.