Skip to content

Commit 6f2c5df

Browse files
committed
Fix structure test for strided matrices
1 parent 57e9a0d commit 6f2c5df

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

src/dense.jl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,24 +1587,25 @@ factorize(A::Transpose) = transpose(factorize(parent(A)))
15871587
factorize(a::Number) = a # same as how factorize behaves on Diagonal types
15881588

15891589
function getstructure(A::StridedMatrix)
1590+
require_one_based_indexing(A)
15901591
m, n = size(A)
15911592
if m == 1 return A[1] end
15921593
utri = true
15931594
utri1 = true
15941595
herm = true
15951596
sym = true
1596-
for j = 1:n-1, i = j+1:m
1597-
if utri1
1597+
for j = 1:n, i = j:m
1598+
if (j < n) && (i > j) && utri1 # indices are off-diagonal
15981599
if A[i,j] != 0
15991600
utri1 = i == j + 1
16001601
utri = false
16011602
end
16021603
end
16031604
if sym
1604-
sym &= A[i,j] == A[j,i]
1605+
sym &= A[i,j] == transpose(A[j,i])
16051606
end
16061607
if herm
1607-
herm &= A[i,j] == conj(A[j,i])
1608+
herm &= A[i,j] == adjoint(A[j,i])
16081609
end
16091610
if !(utri1|herm|sym) break end
16101611
end
@@ -1617,10 +1618,12 @@ function getstructure(A::StridedMatrix)
16171618
if ltri1
16181619
for i = 1:n-1
16191620
if A[i,i+1] != 0
1620-
ltri &= false
1621+
ltri = false
16211622
break
16221623
end
16231624
end
1625+
else
1626+
ltri = false
16241627
end
16251628
return (utri, utri1, ltri, ltri1, sym, herm)
16261629
end

test/dense.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,4 +1347,11 @@ end
13471347
end
13481348
end
13491349

1350+
@testset "structure of dense matrices" begin
1351+
# A is neither triangular nor symmetric/Hermitian
1352+
A = [1 im 2; -im 0 3; 2 3 im]
1353+
@test factorize(A) isa LU{ComplexF64, Matrix{ComplexF64}, Vector{Int64}}
1354+
@test !any(LinearAlgebra.getstructure(A))
1355+
end
1356+
13501357
end # module TestDense

0 commit comments

Comments
 (0)