Skip to content

Commit 1b945c7

Browse files
committed
Add generic fallback
1 parent 247ffd3 commit 1b945c7

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

src/lu.jl

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@ function lu!(A::AbstractMatrix{T}, ipiv::AbstractVector{<:Integer},
1414
info = Ref(zero(BlasInt))
1515
m, n = size(A)
1616
mnmin = min(m, n)
17-
reckernel!(A, pivot, m, mnmin, ipiv, info, blocksize)
18-
if m < n # fat matrix
19-
# [AL AR]
20-
AL = @view A[:, 1:m]
21-
AR = @view A[:, m+1:n]
22-
apply_permutation!(ipiv, AR)
23-
ldiv!(UnitLowerTriangular(AL), AR)
17+
if isconcretetype(T)
18+
reckernel!(A, pivot, m, mnmin, ipiv, info, blocksize)
19+
if m < n # fat matrix
20+
# [AL AR]
21+
AL = @view A[:, 1:m]
22+
AR = @view A[:, m+1:n]
23+
apply_permutation!(ipiv, AR)
24+
ldiv!(UnitLowerTriangular(AL), AR)
25+
end
26+
else # generic fallback
27+
_generic_lufact!(A, pivot, ipiv, info)
2428
end
2529
check && checknonsingular(info[])
2630
LU{T, typeof(A)}(A, ipiv, info[])

test/runtests.jl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,19 @@ function testlu(A, MF, BF)
1212
end
1313

1414
@testset "Test LU factorization" begin
15-
for p in (Val(true), Val(false)), T in (Float64, Float32, ComplexF64, ComplexF32)
16-
A = rand(T, 50, 100)
15+
for p in (Val(true), Val(false)), T in (Float64, Float32, ComplexF64, ComplexF32, Real)
16+
siz = (50, 100)
17+
if isconcretetype(T)
18+
A = rand(T, siz...)
19+
else
20+
_A = rand(50, 100)
21+
A = Matrix{T}(undef, siz...)
22+
copyto!(A, _A)
23+
end
1724
MF = mylu(A, p)
1825
BF = baselu(A, p)
1926
testlu(A, MF, BF)
20-
for i in 1:100
27+
for i in 50:7:100 # test `MF.info`
2128
A[:, i] .= 0
2229
MF = mylu(A, p, check=false)
2330
BF = baselu(A, p, check=false)

0 commit comments

Comments
 (0)