From 54a3b3dcee77bc6a964a54a43ee0e119ece9db7f Mon Sep 17 00:00:00 2001 From: Alexis Montoison <35051714+amontoison@users.noreply.github.com> Date: Wed, 31 Dec 2025 10:56:38 +0100 Subject: [PATCH 1/4] Enhance decompress! for bicoloring --- src/decompression.jl | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/decompression.jl b/src/decompression.jl index 42bf51eb..9b292c79 100644 --- a/src/decompression.jl +++ b/src/decompression.jl @@ -770,10 +770,21 @@ end function decompress!( A::AbstractMatrix, Br::AbstractMatrix, Bc::AbstractMatrix, result::BicoloringResult ) + (; large_colptr, large_rowval, symmetric_result) = result m, n = size(A) Br_and_Bc = _join_compressed!(result, Br, Bc) - A_and_Aᵀ = decompress(Br_and_Bc, result.symmetric_result) - copyto!(A, A_and_Aᵀ[(n + 1):(n + m), 1:n]) # original matrix in bottom left corner + R = eltype(A) + nzval = Vector{R}(undef, length(large_rowval)) + A_and_noAᵀ = SparseMatrixCSC(m + n, m + n, large_colptr, large_rowval, nzval) + decompress!(A_and_noAᵀ, Br_and_Bc, symmetric_result) + rvA = rowvals(A_and_noAᵀ) + nzA = nonzeros(A_and_noAᵀ) + for j in 1:n + for k in nzrange(A_and_noAᵀ, j) + i = rvA[k] + A[i-n, j] = nzA[k] + end + end return A end From d564210352ca2d4738ffb248a3a13715e344af95 Mon Sep 17 00:00:00 2001 From: Alexis Montoison Date: Wed, 31 Dec 2025 11:02:15 +0100 Subject: [PATCH 2/4] Apply formatter --- src/decompression.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/decompression.jl b/src/decompression.jl index 9b292c79..3fe28fd5 100644 --- a/src/decompression.jl +++ b/src/decompression.jl @@ -782,7 +782,7 @@ function decompress!( for j in 1:n for k in nzrange(A_and_noAᵀ, j) i = rvA[k] - A[i-n, j] = nzA[k] + A[i - n, j] = nzA[k] end end return A From f3c675dfbc78e9659d8d5b07e078ef1fa11bda37 Mon Sep 17 00:00:00 2001 From: Alexis Montoison Date: Wed, 31 Dec 2025 11:06:02 +0100 Subject: [PATCH 3/4] decompression.jl --- src/decompression.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/decompression.jl b/src/decompression.jl index 3fe28fd5..7a5e0262 100644 --- a/src/decompression.jl +++ b/src/decompression.jl @@ -776,7 +776,7 @@ function decompress!( R = eltype(A) nzval = Vector{R}(undef, length(large_rowval)) A_and_noAᵀ = SparseMatrixCSC(m + n, m + n, large_colptr, large_rowval, nzval) - decompress!(A_and_noAᵀ, Br_and_Bc, symmetric_result) + decompress!(A_and_noAᵀ, Br_and_Bc, symmetric_result, :L) rvA = rowvals(A_and_noAᵀ) nzA = nonzeros(A_and_noAᵀ) for j in 1:n From 323a5e9bb27d6e0d6ce85dc7c569adf2006fc40c Mon Sep 17 00:00:00 2001 From: Alexis Montoison Date: Wed, 31 Dec 2025 11:12:28 +0100 Subject: [PATCH 4/4] decompression.jl --- src/decompression.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/decompression.jl b/src/decompression.jl index 7a5e0262..6a98e325 100644 --- a/src/decompression.jl +++ b/src/decompression.jl @@ -772,10 +772,11 @@ function decompress!( ) (; large_colptr, large_rowval, symmetric_result) = result m, n = size(A) - Br_and_Bc = _join_compressed!(result, Br, Bc) R = eltype(A) + fill!(A, zero(R)) nzval = Vector{R}(undef, length(large_rowval)) A_and_noAᵀ = SparseMatrixCSC(m + n, m + n, large_colptr, large_rowval, nzval) + Br_and_Bc = _join_compressed!(result, Br, Bc) decompress!(A_and_noAᵀ, Br_and_Bc, symmetric_result, :L) rvA = rowvals(A_and_noAᵀ) nzA = nonzeros(A_and_noAᵀ) @@ -793,10 +794,10 @@ function decompress!( ) (; large_colptr, large_rowval, symmetric_result) = result m, n = size(A) - Br_and_Bc = _join_compressed!(result, Br, Bc) # pretend A is larger A_and_noAᵀ = SparseMatrixCSC(m + n, m + n, large_colptr, large_rowval, A.nzval) # decompress lower triangle only + Br_and_Bc = _join_compressed!(result, Br, Bc) decompress!(A_and_noAᵀ, Br_and_Bc, symmetric_result, :L) return A end