From 6f2c5dfa8f4af4a21e6cf52add6e87e8e18a21d8 Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Mon, 27 Jan 2025 12:28:18 +0100 Subject: [PATCH 1/2] Fix structure test for strided matrices --- src/dense.jl | 13 ++++++++----- test/dense.jl | 7 +++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/dense.jl b/src/dense.jl index e68f7e94..21017c7e 100644 --- a/src/dense.jl +++ b/src/dense.jl @@ -1587,24 +1587,25 @@ factorize(A::Transpose) = transpose(factorize(parent(A))) factorize(a::Number) = a # same as how factorize behaves on Diagonal types function getstructure(A::StridedMatrix) + require_one_based_indexing(A) m, n = size(A) if m == 1 return A[1] end utri = true utri1 = true herm = true sym = true - for j = 1:n-1, i = j+1:m - if utri1 + for j = 1:n, i = j:m + if (j < n) && (i > j) && utri1 # indices are off-diagonal if A[i,j] != 0 utri1 = i == j + 1 utri = false end end if sym - sym &= A[i,j] == A[j,i] + sym &= A[i,j] == transpose(A[j,i]) end if herm - herm &= A[i,j] == conj(A[j,i]) + herm &= A[i,j] == adjoint(A[j,i]) end if !(utri1|herm|sym) break end end @@ -1617,10 +1618,12 @@ function getstructure(A::StridedMatrix) if ltri1 for i = 1:n-1 if A[i,i+1] != 0 - ltri &= false + ltri = false break end end + else + ltri = false end return (utri, utri1, ltri, ltri1, sym, herm) end diff --git a/test/dense.jl b/test/dense.jl index 236587df..f4ad7960 100644 --- a/test/dense.jl +++ b/test/dense.jl @@ -1347,4 +1347,11 @@ end end end +@testset "structure of dense matrices" begin + # A is neither triangular nor symmetric/Hermitian + A = [1 im 2; -im 0 3; 2 3 im] + @test factorize(A) isa LU{ComplexF64, Matrix{ComplexF64}, Vector{Int64}} + @test !any(LinearAlgebra.getstructure(A)) +end + end # module TestDense From 7542f754ea5fd83eb1c37cc2a60703c7b67e7d8e Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Mon, 27 Jan 2025 14:28:37 +0100 Subject: [PATCH 2/2] Fix test --- test/dense.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dense.jl b/test/dense.jl index f4ad7960..79492bdb 100644 --- a/test/dense.jl +++ b/test/dense.jl @@ -1350,7 +1350,7 @@ end @testset "structure of dense matrices" begin # A is neither triangular nor symmetric/Hermitian A = [1 im 2; -im 0 3; 2 3 im] - @test factorize(A) isa LU{ComplexF64, Matrix{ComplexF64}, Vector{Int64}} + @test factorize(A) isa LU{ComplexF64, Matrix{ComplexF64}, Vector{Int}} @test !any(LinearAlgebra.getstructure(A)) end