Skip to content

Commit 662df63

Browse files
authored
Enhance decompress! for bicoloring (#288)
1 parent e04bd4e commit 662df63

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/decompression.jl

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -769,10 +769,22 @@ end
769769
function decompress!(
770770
A::AbstractMatrix, Br::AbstractMatrix, Bc::AbstractMatrix, result::BicoloringResult
771771
)
772+
(; large_colptr, large_rowval, symmetric_result) = result
772773
m, n = size(A)
774+
R = eltype(A)
775+
fill!(A, zero(R))
776+
nzval = Vector{R}(undef, length(large_rowval))
777+
A_and_noAᵀ = SparseMatrixCSC(m + n, m + n, large_colptr, large_rowval, nzval)
773778
Br_and_Bc = _join_compressed!(result, Br, Bc)
774-
A_and_Aᵀ = decompress(Br_and_Bc, result.symmetric_result)
775-
copyto!(A, A_and_Aᵀ[(n + 1):(n + m), 1:n]) # original matrix in bottom left corner
779+
decompress!(A_and_noAᵀ, Br_and_Bc, symmetric_result, :L)
780+
rvA = rowvals(A_and_noAᵀ)
781+
nzA = nonzeros(A_and_noAᵀ)
782+
for j in 1:n
783+
for k in nzrange(A_and_noAᵀ, j)
784+
i = rvA[k]
785+
A[i - n, j] = nzA[k]
786+
end
787+
end
776788
return A
777789
end
778790

@@ -781,10 +793,10 @@ function decompress!(
781793
)
782794
(; large_colptr, large_rowval, symmetric_result) = result
783795
m, n = size(A)
784-
Br_and_Bc = _join_compressed!(result, Br, Bc)
785796
# pretend A is larger
786797
A_and_noAᵀ = SparseMatrixCSC(m + n, m + n, large_colptr, large_rowval, A.nzval)
787798
# decompress lower triangle only
799+
Br_and_Bc = _join_compressed!(result, Br, Bc)
788800
decompress!(A_and_noAᵀ, Br_and_Bc, symmetric_result, :L)
789801
return A
790802
end

0 commit comments

Comments
 (0)