Unwrap PermutedDimsArray sources in bipermutedimsopadd!#178
Merged
Conversation
Adds a bipermutedimsopadd! method for PermutedDimsArray sources that rewrites each entry of the bipartitioned permutation through the wrapper's own permutation and recurses on parent(src), so the underlying array dispatches its own bipermutedimsopadd! rather than the generic body falling through on the wrapper. Also adds permuteddims(a, perm), defaulting to PermutedDimsArray and overloadable downstream, replacing the FunctionImplementations.permuteddims used internally. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #178 +/- ##
==========================================
+ Coverage 80.97% 81.07% +0.09%
==========================================
Files 26 26
Lines 1041 1046 +5
==========================================
+ Hits 843 848 +5
Misses 198 198
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:
|
permuteddims is a FunctionImplementations verb that backends overload to supply a more efficient lazy permute (KroneckerArrays permutes each Kronecker factor and recombines). Owning it in TensorAlgebra and calling that owned version in the bipermutedimsopadd! body bypassed those overloads, so a KroneckerArray reached the generic body wrapped in a plain PermutedDimsArray instead of its native permute. Import it from FunctionImplementations again so the body respects the overloads. The PermutedDimsArray unwrap method is unaffected. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mtfishman
added a commit
to ITensor/NamedDimsArrays.jl
that referenced
this pull request
Jun 17, 2026
## Summary Routes linear broadcasting of `AbstractNamedDimsArray`s through TensorAlgebra's `bipermutedimsopadd!`. `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!` (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 `similar` of a permuted wrapper drops the backend. Drops the `FunctionImplementations` dependency: `aligneddims` now gets its lazy permute through `TensorAlgebra.permuteddims`, and the now-dead `ImplementationStyle` trait that routed it is removed. --------- 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
Adds a
bipermutedimsopadd!method forPermutedDimsArraysources that rewrites each entry of the bipartitioned permutation through the wrapper's own permutation and recurses onparent(src). The underlying array then dispatches its ownbipermutedimsopadd!, so a graded or block-sparse backend reached through aPermutedDimsArraywrapper hits its block-wise overload rather than the generic body falling through on the wrapper and re-entering broadcasting. This is what lets a permuted source produced byNamedDimsArraysbroadcast alignment lower to the backend primitive.