Forward VectorInterface in-place ops to name-aware TensorAlgebra methods#217
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #217 +/- ##
==========================================
+ Coverage 76.00% 76.10% +0.09%
==========================================
Files 30 30
Lines 1684 1691 +7
==========================================
+ Hits 1280 1287 +7
Misses 404 404
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:
|
d2cff1a to
021486b
Compare
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
Implements the full
VectorInterfacefor named tensors and routes its in-place operations through name-awareTensorAlgebramethods instead of self-aliasing broadcasts.scale!/add!forward toTensorAlgebra.scale!/TensorAlgebra.add!, which unname and align the operands by name (reusing theunnamed(x, dimnames(y))view, which carries a tuple permutation) before dispatching to the backend array's block-wise in-place method. This fixes silent corruption when a block-sparse backend drives an iterative solver: the previous@. y = y*β + x*αput the destination on the right-hand side, and a gradedcopyto!ran they*βterm as a self-aliased permute-add that zeroedybefore reading it. The out-of-place and!!variants allocate the promoted scalar type, so scaling a real tensor by a complex coefficient widens to a complex result.innerforwards toLinearAlgebra.dot(previously a duplicate of the same(conj(x)*y)[]), and_permuteddims_todrops itsAbstractArrayrestriction so the by-name alignment view also works for aTensorMapbackend.The methods are defined as qualified
VectorInterface.overloads, so ITensorBase no longer imports theVectorInterfacefunction names into its namespace or re-exports them.Builds on ITensor/TensorAlgebra.jl#207, which adds the
TensorMapTensorAlgebra.scale!/add!/zero!methods this forwarding lands on.