From f1116c06ae36aac79d2bdfa48a252ace2d61a56d Mon Sep 17 00:00:00 2001 From: Lukas Devos Date: Thu, 8 May 2025 14:48:41 -0400 Subject: [PATCH 1/3] Add test and fix case for multiplying size 0 arrays --- src/abstractsparsearrayinterface.jl | 1 + test/test_linalg.jl | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/abstractsparsearrayinterface.jl b/src/abstractsparsearrayinterface.jl index 5ad5d0b..cad34d5 100644 --- a/src/abstractsparsearrayinterface.jl +++ b/src/abstractsparsearrayinterface.jl @@ -156,6 +156,7 @@ end @interface interface::AbstractSparseArrayInterface function Base.map!( f, a_dest::AbstractArray, as::AbstractArray... ) + isempty(a_dest) && return a_dest # special case to avoid trying to access empty array indices = if !preserves_unstored(f, a_dest, as...) eachindex(a_dest) elseif any(a -> a_dest !== a, as) diff --git a/test/test_linalg.jl b/test/test_linalg.jl index 950ab77..ad74578 100644 --- a/test/test_linalg.jl +++ b/test/test_linalg.jl @@ -24,4 +24,22 @@ const rng = StableRNG(123) check2 = mul!(Array(C), Array(A), Array(B), α, β) @test mul!(copy(C), A, B, α, β) ≈ check2 end + + # test empty matrix + szA = (2, 0) + szB = (0, 2) + szC = (szA[1], szB[2]) + for density in 0.0:0.25:1 + C = sparserand(rng, T, szC; density) + A = sparserand(rng, T, szA; density) + B = sparserand(rng, T, szB; density) + + check1 = mul!(Array(C), Array(A), Array(B)) + @test mul!(copy(C), A, B) ≈ check1 + + α = rand(rng, T) + β = rand(rng, T) + check2 = mul!(Array(C), Array(A), Array(B), α, β) + @test mul!(copy(C), A, B, α, β) ≈ check2 + end end From 76585e11fffdc826fff6fccbd26961694831aba5 Mon Sep 17 00:00:00 2001 From: Lukas Devos Date: Thu, 8 May 2025 14:48:58 -0400 Subject: [PATCH 2/3] Bump version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 78d6a6f..dd1c89d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "SparseArraysBase" uuid = "0d5efcca-f356-4864-8770-e1ed8d78f208" authors = ["ITensor developers and contributors"] -version = "0.5.6" +version = "0.5.7" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" From 24c3422333691b9266951f3296fd04445661264a Mon Sep 17 00:00:00 2001 From: Lukas Devos Date: Thu, 8 May 2025 14:51:24 -0400 Subject: [PATCH 3/3] Don't overtest --- test/test_linalg.jl | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/test/test_linalg.jl b/test/test_linalg.jl index ad74578..3f2ef42 100644 --- a/test/test_linalg.jl +++ b/test/test_linalg.jl @@ -29,17 +29,16 @@ const rng = StableRNG(123) szA = (2, 0) szB = (0, 2) szC = (szA[1], szB[2]) - for density in 0.0:0.25:1 - C = sparserand(rng, T, szC; density) - A = sparserand(rng, T, szA; density) - B = sparserand(rng, T, szB; density) - - check1 = mul!(Array(C), Array(A), Array(B)) - @test mul!(copy(C), A, B) ≈ check1 - - α = rand(rng, T) - β = rand(rng, T) - check2 = mul!(Array(C), Array(A), Array(B), α, β) - @test mul!(copy(C), A, B, α, β) ≈ check2 - end + density = 0.1 + C = sparserand(rng, T, szC; density) + A = sparserand(rng, T, szA; density) + B = sparserand(rng, T, szB; density) + + check1 = mul!(Array(C), Array(A), Array(B)) + @test mul!(copy(C), A, B) ≈ check1 + + α = rand(rng, T) + β = rand(rng, T) + check2 = mul!(Array(C), Array(A), Array(B), α, β) + @test mul!(copy(C), A, B, α, β) ≈ check2 end