Skip to content

Commit 5f9839d

Browse files
KlausCKristofferC
authored andcommitted
provide enough space when sparse(Unit..Triangular(Sparse..)) (#34124)
1 parent a3a4cba commit 5f9839d

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

stdlib/SparseArrays/src/sparseconvert.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,10 @@ function _sparsem(A::AbstractTriangularSparse{Tv}) where Tv
183183
Ti = eltype(rowval)
184184
fnzrange = A isa Union{UpperTriangular,UnitUpperTriangular} ? nzrangeup : nzrangelo
185185
unit = A isa Union{UnitUpperTriangular,UnitLowerTriangular}
186+
nz = nnz(S) + n * unit
186187
newcolptr = Vector{Ti}(undef, n+1)
187-
newrowval = Vector{Ti}(undef, nnz(S))
188-
newnzval = Vector{Tv}(undef, nnz(S))
188+
newrowval = Vector{Ti}(undef, nz)
189+
newnzval = Vector{Tv}(undef, nz)
189190
newcolptr[1] = 1
190191
uplo = fnzrange == nzrangeup
191192
newk = 1
@@ -233,7 +234,7 @@ function _sparsem(taA::Union{Transpose{Tv,<:AbstractTriangularSparse},
233234
uplo = A isa Union{UpperTriangular,UnitUpperTriangular}
234235

235236
newcolptr = Vector{Ti}(undef, n+1)
236-
fill!(newcolptr, 1unit)
237+
fill!(newcolptr, unit)
237238
newcolptr[1] = 1
238239
@inbounds for j = 1:n
239240
for k = fnzrange(A, j)

stdlib/SparseArrays/test/sparse.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,6 +2694,9 @@ end
26942694
@test sparse([1,2,3,4,5]') == SparseMatrixCSC([1 2 3 4 5])
26952695
@test sparse(UpperTriangular(A')) == UpperTriangular(B')
26962696
@test sparse(Adjoint(UpperTriangular(A'))) == Adjoint(UpperTriangular(B'))
2697+
@test sparse(UnitUpperTriangular(spzeros(5,5))) == I
2698+
deepwrap(A) = (Adjoint(LowerTriangular(view(Symmetric(A), 5:7, 4:6))))
2699+
@test sparse(deepwrap(A)) == Matrix(deepwrap(B))
26972700
end
26982701

26992702
@testset "unary operations on matrices where length(nzval)>nnz" begin

0 commit comments

Comments
 (0)