diff --git a/base/sparse/linalg.jl b/base/sparse/linalg.jl index e1403d2967cb8..ad56b6ed057cc 100644 --- a/base/sparse/linalg.jl +++ b/base/sparse/linalg.jl @@ -879,7 +879,7 @@ for f in (:\, :Ac_ldiv_B, :At_ldiv_B) if m == n if istril(A) if istriu(A) - return ($f)(Diagonal(A), B) + return ($f)(Diagonal(Vector(diag(A))), B) else return ($f)(LowerTriangular(A), B) end diff --git a/base/sparse/sparsematrix.jl b/base/sparse/sparsematrix.jl index 11a0a434edc7e..db70434e6316e 100644 --- a/base/sparse/sparsematrix.jl +++ b/base/sparse/sparsematrix.jl @@ -3412,8 +3412,6 @@ function trace(A::SparseMatrixCSC{Tv}) where Tv s end -diag(A::SparseMatrixCSC{Tv}) where {Tv} = Tv[d for d in SpDiagIterator(A)] - function diagm(v::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} if size(v,1) != 1 && size(v,2) != 1 throw(DimensionMismatch("input should be nx1 or 1xn")) diff --git a/test/sparse/sparse.jl b/test/sparse/sparse.jl index 714c8fea0f582..52eb705dfc2a9 100644 --- a/test/sparse/sparse.jl +++ b/test/sparse/sparse.jl @@ -1323,6 +1323,16 @@ end @test diagm(sparse(ones(5,1))) == speye(5) end +@testset "diag" begin + for T in (Float64, Complex128) + S = sprand(T, 5, 5, 0.5) + A = Matrix(S) + @test diag(S)::SparseVector{T,Int} == diag(A) + @test diag(S, 1)::SparseVector{T,Int} == diag(A, 1) + @test diag(S, -1)::SparseVector{T,Int} == diag(A, -1) + end +end + @testset "expandptr" begin A = speye(5) @test Base.SparseArrays.expandptr(A.colptr) == collect(1:5)