Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Guidelines for updating this changelog
When making changes to this project, please update the "Unreleased" section with your changes under the appropriate category:
- Added for new features.
- Changed for changes in existing functionality.
- Deprecated for soon-to-be removed features.
- Removed for now removed features.
- Fixed for any bug fixes.
- Performance for performance improvements.
When releasing a new version, move the "Unreleased" changes to a new version section with the release date.
Unreleased
Added
Changed
Deprecated
Removed
Fixed
Performance
0.6.12 - 2026-10-16
Added
Changed
- The default SVD algorithm for
ROCArrayinputs (single matrices, 3D arrays and vectors of matrices) isQRIterationagain, instead ofBisection(#308). default_svd_algorithmfor a vector of matrices now falls back to the default for its element type; for vectors ofCuMatrixit usesJacobi, the only algorithm CUSOLVER batches (#300).
Deprecated
Removed
Fixed
DiagonalAlgorithmno longer reports that it supports pointer or ragged batches with the rocSOLVER driver (#305).
Performance
- Gauge fixing for
svd_full,eig_full,eigh_fullandgen_eig_fullis now vectorized, so it no longer loops over columns and works efficiently on GPU arrays (#307).
0.6.11 - 2026-10-09
Added
Changed
Deprecated
Removed
Fixed
- Bug in
select_indicesthat lead to correctness errors for SVD pullbacks for some truncation schemes.
Performance
0.6.10 - 2026-10-08
Added
- Batched SVD functions
batched_svd_compact,batched_svd_fullandbatched_svd_vals(and their!variants), accepting either a 3D array or a (possibly ragged) vector of matrices, with batched drivers for CUSOLVER and rocSOLVER (#275). Whether a driver accepts ragged batches is controlled bysupports_ragged_batch, which isfalseby default (#297). - Forward-mode (pushforward) rules for the QR and LQ decompositions, through the Enzyme and Mooncake extensions.
- Enzyme forward rule for
truncate(#288). MatrixAlgebraKit.CHECK_LIBRARY_CALLS[] = falsedisables the post-call info checks in the CUSOLVER and rocSOLVER drivers, which otherwise force device synchronization through an@allowscalarread (#270).- The
BisectionSVD algorithm is now supported by the rocSOLVER driver, and by both LAPACK and rocSOLVER forsvd_full(#281).
Changed
qr_compact!,qr_full!,lq_compact!andlq_full!now extractR(orL) before constructingQ, so that an inplaceQ(supplyingAitself as output forQ) can be combined with computingR(orL) and withpositive = true(#267).- The CUSOLVER driver constructs
Qwithungqr!instead ofunmqr!, which is both faster and avoids the large workspace oformqr, whose 32-bit size query fails altogether for large matrices (#267).
Deprecated
schur_valsandschur_vals!in favour ofeig_valsandeig_vals!. LAPACK'sgeesbalances without scaling, so the eigenvalues it returns are those ofeig_vals(A; scale = false), which is considerably less accurate for badly scaled matrices and no faster. Note thateig_valsdoes not accept theexpertkeyword argument (#277).
Fixed
schur_fullnow supportsDiagonalinputs throughDiagonalAlgorithm(#276, #277).- LQ decompositions no longer gauge fix
Qwhenpositive = falseandLis not computed (#267). remove_svd_gauge_dependence!now handles rank-deficient SVDs correctly (#286).- The
eigpushforward now keeps the eigenvector tangents consistent with the unit-norm normalization ofV(#290). - Fixed overflow in the Sylvester iterations of
eigh_trunc_pullback!(#282) andeig_trunc_pullback!(#294). - rocSOLVER's
gesvdxreturning no singular values whenmin(m, n) == 1is now worked around (#284). - The
svd_trunc,eig/eighand LQ pullbacks now work on GPU arrays (#258, #271, #272, #273, #280). - The
svd,eigandeighpullbacks now instantiate their broadcasts, avoidingaxeserrors for some wrapped array types (#266). - Enzyme rules no longer store
nothingin their caches (#256, #259).
Performance
svd_pullback!andeigh_pullback!now cost proportional to the number of cotangent columns supplied, rather than the full size of the decomposition (#292).svd_trunc_pullback!sums only one Neumann series, and the truncated pullbacks share a doubling (accelerative Smith) iteration for their Sylvester equations (#287, #294).
0.6.9 - 2026-07-10
Added
- Matrix
exponential/exponential!function with selectable algorithms:MatrixFunctionViaLA(Padé viaLinearAlgebra),MatrixFunctionViaEig/MatrixFunctionViaEigh(via eigendecomposition), andDiagonalAlgorithmforDiagonalinputs; supports the scaledexponential((τ, A))form (#94, #251, #252, #253). - Native, LAPACK-free scaling-and-squaring Taylor algorithm
MatrixFunctionViaTaylor, outperforming LinearAlgebra.jl and the default for dense matrices and the only path covering arbitrary-precision element types such asBigFloat(#243). - Forward-mode (pushforward) automatic-differentiation rules for the polar,
eig/eigh, and SVD decompositions and the projection /orth–nullfunctions, available through the Enzyme and Mooncake extensions (#242, #244, #245, #246, #247).
0.6.8 - 2026-05-20
Added
- Add a MatrixAlgebraKit logo (#230).
Changed
- Extended AD test coverage to CUDA arrays for the polar decomposition (#237) and the Mooncake projection rules (#240).
Fixed
- Pullbacks of
eig_trunc,eigh_trunc, andsvd_truncno longer error when the truncation strategy keeps no values;svd_pullback!also handles the zero-rank case where every singular value falls belowrank_atol(#233). svd_pullback!is now GPU-compatible (#232).- LQ pullback no longer modifies input cotangents (#226).
eighpullback now works on CUDA arrays (#235).eigpullback now works on CUDA arrays (#236).- Corrected the Enzyme rule's check for when the cached output argument must be copied (#239).
Performance
- Improved
svdgauge-fixing performance (#238).
0.6.7 - 2026-05-06
Changed
- Test infrastructure: use a test setup matrix like TensorKit (#215).
Fixed
- Improved consistency of gauge fixing in eigenvalue pullback functions (#221).
- Ensure no sharing of data in LQ decomposition output (#219).
- Mooncake and Enzyme AD rules for
Diagonalinputs (#179).
Performance
- Added a rudimentary precompile workload to reduce time-to-first-execution (#217).
0.6.6 - 2026-04-24
Added
- Add equality comparison (
==) forTruncationStrategytypes (#211).
Changed
- Reorganized pullback implementations and fixed pullback correctness for rank-degenerate SVD cases (#208).
- Centralized QR/LQ gauge-fixing logic (#203).
- Bumped CUDA compat to v6, dropping support for older versions (#209).
- Replaced
CompatHelperwithdependabotfor dependency updates (#212).
0.6.5 - 2026-03-24
Added
- Add AD (ChainRules/Mooncake/Enzyme) pullback rules for (anti-)hermitian projection (#174).
- Add
TruncationUnionto support combining multiple truncation schemes by supplying minimal ranks (#183). - Add
SafeDivideAndConqueralgorithm variant for more robust singular value decompositions (#185). - Add
DefaultAlgorithmtype for explicit dispatch to the default algorithm (#195).
Changed
- The default behavior of SVD-based nullspaces now includes some small tolerance (#172).
- The Mooncake rules for truncated decompositions with
TruncatedAlgorithmnow use the pullbacks that make use of the full decomposition. (#171) - Default algorithms now defined for
SubArrayandReshapedArray(#182). - Separated
AlgorithmandDriverconcepts for QR/LQ, SVD, and Schur/Eig decompositions (#178, #189, #194, #196).
Fixed
- QR and LQ decompositions were supposed to default to
positive = true(#170).
0.6.4 - 2026-01-29
Added
- Tests for randomized SVD algorithms (#159).
Changed
Deprecated
Removed
Fixed
- Mooncake AD rules now correctly set/reset in and outputs (#158).
- Storage type is now retained in
_ind_intersectfor GPU arrays (#161).
0.6.3 - 2026-01-23
Added
- Reverse-mode automatic differentiation rules for Enzyme (#86).
- Native algorithm implementations for QR and LQ decompositions (#90).
- Pullbacks for
Diagonalinput matrices in eigenvalue and singular value decompositions (#156).
Changed
- Test infrastructure: migrated to
ParallelTestRunnerfor improved test execution (#155).
Deprecated
Removed
Fixed
- Eigenvalue decompositions of diagonal inputs are sorted and have the same type as non-diagonal inputs (#151).
- Consistent
checksquareusage across codebase (#154). - Typos in error messages (#153).
0.6.2 - 2026-01-08
Added
Changed
- Improved test infrastructure: migrated additional tests to the common
TestSuiteand added GPU/truncated-methods tests for SVD and related functionality (#137, #142, #146, #128). - Eigenvalue decompositions of diagonal inputs have the same sorting as non-diagonal inputs (#143
Deprecated
Removed
Fixed
- Polar decompositions return exact hermitian factors (#143).
- Fixed a small typo in
TruncationByValueand related docstrings (#136). - YALAPACK fixes and test adjustments (#135).
- Various truncation schemes are now supported on the GPU.
0.6.1 - 2025-12-28
Added
- Support for null-space computation via Householder QR in the
GenericLinearAlgebraextension (#132). - New truncated-eigensolver variants:
eig_trunc_no_errorandeigh_trunc_no_error(#117). - New truncated-singular value variant:
svd_trunc_no_errorto improve GPU synchronization and AD support (#116). - AD: ChainRules support for
svd_vals,eig_vals,eigh_vals, anddiagonal(#107).
Changed
- Improved GPU compatibility for some wrapper arrays (#100).
- Test infrastructure migrated to a common
TestSuiteto reduce duplication (#119, #130, #131, #127, #125, #123, #124).
Deprecated
Removed
Fixed
ishermitiannow correctly handles all-zero matrices (#121).
0.6.0 - 2025-11-14
Added
- New
project_isometricfunction for projecting matrices onto isometric manifold (#67) - New
PolarNewtonalgorithm for polar decomposition (#67) - New matrix property functions:
ishermitian,isantihermitian,hermitianpart!,hermitianpart,antihermitianpart!, andantihermitianpart(#64) - Support for
BigFloatvia newGenericLinearAlgebraextension (#87) - Mooncake reverse-mode AD rules (#85)
- GPU support for image and null space computations (#82)
- GPU support for polar decomposition (#83)
- GPU support for new projection operations (#81)
- Output truncation error for truncated decompositions (#75)
- Documentation for truncated decomposition keyword arguments (#71)
- Default algorithm implementations for GPU wrapper array types (#49)
Changed
- Made
gaugefix!optional (#95) - Renamed
isisometrytoisisometricfor consistency withproject_isometric(#73) - Refactored
left_orth,right_orth,left_nullandright_nullinterface (#79) - Improved GPU support for SVD operations (#80)
- Loosened strictness on hermitian checks (#78)
- Updated pullback tolerances (#92)