Skip to content

Commit 84fe2aa

Browse files
committed
remove svd(::BlockDiagonal) specialization
1 parent afb1ac9 commit 84fe2aa

File tree

1 file changed

+5
-18
lines changed

1 file changed

+5
-18
lines changed

src/blocksparsearray/blockdiagonalarray.jl

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,14 @@ using LinearAlgebra: Diagonal
44
const BlockDiagonal{T,A,Axes,V<:AbstractVector{A}} = BlockSparseMatrix{
55
T,A,Diagonal{A,V},Axes
66
}
7+
const BlockSparseDiagonal{T,A<:AbstractBlockSparseVector{T}} = Diagonal{T,A}
8+
9+
@interface interface::BlockSparseArrayInterface function blocks(a::BlockSparseDiagonal)
10+
return Diagonal(Diagonal.(blocks(a.diag)))
11+
end
712

813
function BlockDiagonal(blocks::AbstractVector{<:AbstractMatrix})
914
return BlockSparseArray(
1015
Diagonal(blocks), (blockedrange(size.(blocks, 1)), blockedrange(size.(blocks, 2)))
1116
)
1217
end
13-
14-
# SVD implementation
15-
function eigencopy_oftype(A::BlockDiagonal, T)
16-
diag = map(Base.Fix2(eigencopy_oftype, T), LinearAlgebra.diag(blocks(A)))
17-
return BlockDiagonal(diag)
18-
end
19-
20-
function svd(A::BlockDiagonal; kwargs...)
21-
return svd!(eigencopy_oftype(A, LinearAlgebra.eigtype(eltype(A))); kwargs...)
22-
end
23-
function svd!(A::BlockDiagonal; full::Bool=false, alg::Algorithm=default_svd_alg(A))
24-
# TODO: handle full
25-
F = map(a -> svd!(a; full, alg), blocks(A).diag)
26-
Us = map(Base.Fix2(getproperty, :U), F)
27-
Ss = map(Base.Fix2(getproperty, :S), F)
28-
Vts = map(Base.Fix2(getproperty, :Vt), F)
29-
return SVD(BlockDiagonal(Us), mortar(Ss), BlockDiagonal(Vts))
30-
end

0 commit comments

Comments
 (0)