Skip to content

Commit 2667a28

Browse files
committed
Minor fixes
1 parent d7a1ab2 commit 2667a28

3 files changed

Lines changed: 29 additions & 26 deletions

File tree

src/decompression.jl

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ end
352352
function decompress!(A::AbstractMatrix, B::AbstractMatrix, result::ColumnColoringResult)
353353
(; color) = result
354354
S = result.bg.S2
355-
check_same_pattern(A, S)
355+
@assert size(A) == size(S)
356356
fill!(A, zero(eltype(A)))
357357
rvS = rowvals(S)
358358
for j in axes(S, 2)
@@ -370,7 +370,7 @@ function decompress_single_color!(
370370
)
371371
(; group) = result
372372
S = result.bg.S2
373-
check_same_pattern(A, S)
373+
@assert size(A) == size(S)
374374
rvS = rowvals(S)
375375
for j in group[c]
376376
for k in nzrange(S, j)
@@ -384,7 +384,7 @@ end
384384
function decompress!(A::SparseMatrixCSC, B::AbstractMatrix, result::ColumnColoringResult)
385385
(; compressed_indices, allow_denser) = result
386386
S = result.bg.S2
387-
check_same_pattern(A, S; allow_denser)
387+
check_compatible_pattern(A, S; allow_denser)
388388
nzA = nonzeros(A)
389389
if nnz(A) == nnz(S)
390390
for k in eachindex(compressed_indices)
@@ -413,7 +413,7 @@ function decompress_single_color!(
413413
)
414414
(; group) = result
415415
S = result.bg.S2
416-
check_same_pattern(A, S)
416+
check_compatible_pattern(A, S)
417417
rvS = rowvals(S)
418418
nzA = nonzeros(A)
419419
for j in group[c]
@@ -430,7 +430,7 @@ end
430430
function decompress!(A::AbstractMatrix, B::AbstractMatrix, result::RowColoringResult)
431431
(; color) = result
432432
S = result.bg.S2
433-
check_same_pattern(A, S)
433+
@assert size(A) == size(S)
434434
fill!(A, zero(eltype(A)))
435435
rvS = rowvals(S)
436436
for j in axes(S, 2)
@@ -448,7 +448,7 @@ function decompress_single_color!(
448448
)
449449
(; group) = result
450450
S, Sᵀ = result.bg.S2, result.bg.S1
451-
check_same_pattern(A, S)
451+
@assert size(A) == size(S)
452452
rvSᵀ = rowvals(Sᵀ)
453453
for i in group[c]
454454
for k in nzrange(Sᵀ, i)
@@ -462,7 +462,7 @@ end
462462
function decompress!(A::SparseMatrixCSC, B::AbstractMatrix, result::RowColoringResult)
463463
(; compressed_indices, allow_denser) = result
464464
S = result.bg.S2
465-
check_same_pattern(A, S; allow_denser)
465+
check_compatible_pattern(A, S; allow_denser)
466466
nzA = nonzeros(A)
467467
if nnz(A) == nnz(S)
468468
for k in eachindex(nzA, compressed_indices)
@@ -493,7 +493,7 @@ function decompress!(
493493
)
494494
(; ag, compressed_indices) = result
495495
(; S) = ag
496-
uplo == :F && check_same_pattern(A, S)
496+
@assert size(A) == size(S)
497497
fill!(A, zero(eltype(A)))
498498

499499
rvS = rowvals(S)
@@ -517,7 +517,7 @@ function decompress_single_color!(
517517
)
518518
(; ag, compressed_indices, group) = result
519519
(; S) = ag
520-
uplo == :F && check_same_pattern(A, S)
520+
@assert size(A) == size(S)
521521

522522
lower_index = (c - 1) * S.n + 1
523523
upper_index = c * S.n
@@ -552,7 +552,7 @@ function decompress!(
552552
(; S) = ag
553553
nzA = nonzeros(A)
554554
if uplo == :F
555-
check_same_pattern(A, S; allow_denser)
555+
check_compatible_pattern(A, S; allow_denser)
556556
if nnz(A) == nnz(S)
557557
for k in eachindex(nzA, compressed_indices)
558558
nzA[k] = B[compressed_indices[k]]
@@ -608,7 +608,7 @@ function decompress!(
608608
)
609609
(; ag, color, reverse_bfs_orders, buffer) = result
610610
(; S) = ag
611-
uplo == :F && check_same_pattern(A, S)
611+
@assert size(A) == size(S)
612612
R = eltype(A)
613613
fill!(A, zero(R))
614614

@@ -671,7 +671,7 @@ function decompress!(
671671
(; S) = ag
672672
A_colptr = A.colptr
673673
nzA = nonzeros(A)
674-
uplo == :F && check_same_pattern(A, S)
674+
@assert size(A) == size(S)
675675

676676
if eltype(buffer) == R
677677
buffer_right_type = buffer
@@ -768,7 +768,7 @@ function decompress!(
768768
)
769769
(; color, strict_upper_nonzero_inds, M_factorization, strict_upper_nonzeros_A) = result
770770
S = result.ag.S
771-
uplo == :F && check_same_pattern(A, S)
771+
@assert size(A) == size(S)
772772

773773
# TODO: for some reason I cannot use ldiv! with a sparse QR
774774
strict_upper_nonzeros_A = M_factorization \ vec(B)
@@ -829,6 +829,7 @@ function decompress!(
829829
A::AbstractMatrix, Br::AbstractMatrix, Bc::AbstractMatrix, result::BicoloringResult
830830
)
831831
m, n = size(A)
832+
@assert size(A) == size(result.S)
832833
Br_and_Bc = _join_compressed!(result, Br, Bc)
833834
A_and_Aᵀ = decompress(Br_and_Bc, result.symmetric_result)
834835
copyto!(A, A_and_Aᵀ[(n + 1):(n + m), 1:n]) # original matrix in bottom left corner
@@ -839,7 +840,7 @@ function decompress!(
839840
A::SparseMatrixCSC, Br::AbstractMatrix, Bc::AbstractMatrix, result::BicoloringResult
840841
)
841842
(; S, large_colptr, large_rowval, symmetric_result) = result
842-
check_same_pattern(A, S)
843+
check_compatible_pattern(A, S)
843844
m, n = size(A)
844845
Br_and_Bc = _join_compressed!(result, Br, Bc)
845846
# pretend A is larger

src/matrices.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,19 @@ function respectful_similar(A::Union{Symmetric,Hermitian}, ::Type{T}) where {T}
6161
return respectful_similar(sparse(A), T)
6262
end
6363

64-
same_pattern(A::AbstractMatrix, S; allow_denser::Bool=false) = true
65-
function same_pattern(A::SparseMatrixCSC, S; allow_denser::Bool=false)
64+
function compatible_pattern(
65+
A::Union{SparseMatrixCSC,SparsityPatternCSC},
66+
S::Union{SparseMatrixCSC,SparsityPatternCSC};
67+
allow_denser::Bool=false,
68+
)
6669
return allow_denser ? nnz(A) >= nnz(S) : nnz(A) == nnz(S)
6770
end
6871

69-
function check_same_pattern(A, S; allow_denser::Bool=false)
72+
function check_compatible_pattern(A, S; allow_denser::Bool=false)
7073
if size(A) != size(S)
7174
msg = "Decompression target must have the same size as the sparsity pattern used for coloring"
7275
throw(DimensionMismatch(msg))
73-
elseif !same_pattern(A, S; allow_denser)
76+
elseif !compatible_pattern(A, S; allow_denser)
7477
msg = """Decompression target must have $(allow_denser ? "at least" : "exactly") as many nonzeros as the sparsity pattern used for coloring"""
7578
throw(DimensionMismatch(msg))
7679
end

test/matrices.jl

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using LinearAlgebra
22
using SparseArrays
33
using SparseMatrixColorings:
4-
check_same_pattern, matrix_versions, respectful_similar, same_pattern
4+
check_compatible_pattern, matrix_versions, respectful_similar, compatible_pattern
55
using StableRNGs
66
using Test
77

@@ -44,12 +44,11 @@ end
4444
A2 = copy(S)
4545
A2[1, 1] = 1
4646

47-
@test same_pattern(A1, S)
48-
@test !same_pattern(A2, S)
49-
@test same_pattern(Matrix(A2), S)
47+
@test compatible_pattern(A1, S)
48+
@test !compatible_pattern(A2, S)
5049

51-
@test_throws DimensionMismatch check_same_pattern(vcat(A1, A1), S)
52-
@test_throws DimensionMismatch check_same_pattern(A2, S)
53-
@test check_same_pattern(A1, S; allow_denser=true)
54-
@test check_same_pattern(A2, S; allow_denser=true)
50+
@test_throws DimensionMismatch check_compatible_pattern(vcat(A1, A1), S)
51+
@test_throws DimensionMismatch check_compatible_pattern(A2, S)
52+
@test check_compatible_pattern(A1, S; allow_denser=true)
53+
@test check_compatible_pattern(A2, S; allow_denser=true)
5554
end

0 commit comments

Comments
 (0)