From c661bb35e64d4e8d2e6c3755b0ce725ebe35f59c Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Fri, 31 Jan 2025 13:48:06 +0100 Subject: [PATCH] Backport "Fix structure test for strided matrices" --- stdlib/LinearAlgebra/src/dense.jl | 11 ++++++----- stdlib/LinearAlgebra/test/dense.jl | 6 ++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/stdlib/LinearAlgebra/src/dense.jl b/stdlib/LinearAlgebra/src/dense.jl index 8d5a3e6ea8de2..287ac472866d8 100644 --- a/stdlib/LinearAlgebra/src/dense.jl +++ b/stdlib/LinearAlgebra/src/dense.jl @@ -1341,6 +1341,7 @@ This returns a `5×5 Bidiagonal{Float64}`, which can now be passed to other line (e.g. eigensolvers) which will use specialized methods for `Bidiagonal` types. """ function factorize(A::AbstractMatrix{T}) where T + require_one_based_indexing(A) m, n = size(A) if m == n if m == 1 return A[1] end @@ -1348,18 +1349,18 @@ function factorize(A::AbstractMatrix{T}) where T 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 @@ -1372,7 +1373,7 @@ function factorize(A::AbstractMatrix{T}) where T if ltri1 for i = 1:n-1 if A[i,i+1] != 0 - ltri &= false + ltri = false break end end diff --git a/stdlib/LinearAlgebra/test/dense.jl b/stdlib/LinearAlgebra/test/dense.jl index ad887dd85a0d3..18fae1272cc19 100644 --- a/stdlib/LinearAlgebra/test/dense.jl +++ b/stdlib/LinearAlgebra/test/dense.jl @@ -1234,4 +1234,10 @@ Base.:+(x::TypeWithZero, ::TypeWithoutZero) = x @test diagm(0 => [TypeWithoutZero()]) isa Matrix{TypeWithZero} 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{Int}} +end + end # module TestDense