Skip to content

Commit dba640a

Browse files
committed
allow SymTridiagonal
1 parent 9cd9427 commit dba640a

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

src/InfiniteLinearAlgebra.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ import LazyBandedMatrices: AbstractLazyBandedBlockBandedLayout, AbstractLazyBand
4646
BroadcastBandedLayout, KronTravBandedBlockBandedLayout, LazyBandedLayout,
4747
_block_interlace_axes, _krontrav_axes, krontravargs
4848

49+
const StructuredLayoutTypes{Lay} = Union{SymmetricLayout{Lay}, HermitianLayout{Lay}, TriangularLayout{'L','N',Lay}, TriangularLayout{'U','N',Lay}, TriangularLayout{'L','U',Lay}, TriangularLayout{'U','U',Lay}}
50+
51+
const BandedLayouts = Union{AbstractBandedLayout, StructuredLayoutTypes{<:AbstractBandedLayout}}
52+
53+
4954
import LinearAlgebra: AbstractQ, AdjointQ, AdjOrTrans, factorize, matprod, qr
5055

5156
import MatrixFactorizations: AdjQLPackedQLayout, LayoutQ, QL, QLPackedQ, QLPackedQLayout, QR, QRPackedQ,

src/banded/tridiagonalconjugation.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ end
3131

3232
initiate_upper_mul_tri_triview!(UX, U::UpperTriangular, X) = initiate_upper_mul_tri_triview!(UX, parent(U), X)
3333
initiate_upper_mul_tri_triview!(UX, U::CachedMatrix, X) = initiate_upper_mul_tri_triview!(UX, U.data, X)
34-
initiate_upper_mul_tri_triview!(UX, U::AdaptiveCholeskyFactors, X) = initiate_upper_mul_tri_triview!(UX, U.data.data, X)
34+
initiate_upper_mul_tri_triview!(UX, U::Union{AdaptiveCholeskyFactors,AdaptiveQRFactors}, X) = initiate_upper_mul_tri_triview!(UX, U.data.data, X)
3535

3636
function initiate_upper_mul_tri_triview!(UX, U::BandedMatrix, X)
37-
Xdl, Xd, Xdu = X.dl, X.d, X.du
37+
Xdl, Xd, Xdu = subdiagonaldata(X), diagonaldata(X), supdiagonaldata(X)
3838
UXdl, UXd, UXdu = UX.dl, UX.d, UX.du
3939
Udat = U.data
4040

@@ -53,13 +53,13 @@ end
5353
# fills in the rows kr of UX
5454
main_upper_mul_tri_triview!(UX, U::UpperTriangular, X, kr, kwds...) = main_upper_mul_tri_triview!(UX, parent(U), X, kr, kwds...)
5555

56-
function main_upper_mul_tri_triview!(UX, U::Union{CachedMatrix,AdaptiveCholeskyFactors}, X, kr, kwds...)
56+
function main_upper_mul_tri_triview!(UX, U::Union{CachedMatrix,AdaptiveCholeskyFactors,AdaptiveQRFactors}, X, kr, kwds...)
5757
resizedata!(U, kr[end], kr[end]+2)
5858
main_upper_mul_tri_triview!(UX, U.data, X, kr, kwds...)
5959
end
6060

61-
function main_upper_mul_tri_triview!(UX, U::BandedMatrix, X, kr, bₖ=X.du[kr[1]-1], aₖ=X.d[kr[1]], cₖ=X.dl[kr[1]], cₖ₋₁=X.dl[kr[1]-1])
62-
Xdl, Xd, Xdu = X.dl, X.d, X.du
61+
function main_upper_mul_tri_triview!(UX, U::BandedMatrix, X, kr, bₖ=X[kr[1]-1,kr[1]], aₖ=X[kr[1],kr[1]], cₖ=X[kr[1]+1,kr[1]], cₖ₋₁=X[kr[1],kr[1]-1])
62+
Xdl, Xd, Xdu = subdiagonaldata(X), diagonaldata(X), supdiagonaldata(X)
6363
UXdl, UXd, UXdu = UX.dl, UX.d, UX.du
6464
Udat = U.data
6565
l,u = bandwidths(U)
@@ -128,7 +128,7 @@ function initiate_tri_mul_invupper_triview!(Y, X, R::CachedMatrix)
128128
initiate_tri_mul_invupper_triview!(Y, X, R.data)
129129
end
130130

131-
function initiate_tri_mul_invupper_triview!(Y, X, R::AdaptiveCholeskyFactors)
131+
function initiate_tri_mul_invupper_triview!(Y, X, R::Union{AdaptiveCholeskyFactors,AdaptiveQRFactors})
132132
resizedata!(R, 1, 2)
133133
initiate_tri_mul_invupper_triview!(Y, X, R.data.data)
134134
end

src/infqr.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,11 @@ function adaptiveqr(A)
149149
QR(AdaptiveQRFactors(data), AdaptiveQRTau(data))
150150
end
151151

152-
qr_layout(::AbstractBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
152+
qr_layout(::BandedLayouts, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
153153
qr_layout(::AbstractAlmostBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
154154
__qr_layout(_, ::NTuple{2,InfiniteCardinal{0}}, A) = adaptiveqr(A)
155155
qr_layout(::AbstractBlockBandedLayout, ::NTuple{2,InfiniteCardinal{0}}, A) = adaptiveqr(A)
156-
factorize_layout(::AbstractBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = qr(A)
156+
factorize_layout(::BandedLayouts, ::NTuple{2,OneToInf{Int}}, A) = qr(A)
157157

158158

159159
cache_layout(::TriangularLayout{UPLO, UNIT, <:AdaptiveLayout}, A::AbstractMatrix) where {UPLO, UNIT} = A # already cached

0 commit comments

Comments
 (0)