From 02718a6f958c333eea336e4adc2253adcb9f01a5 Mon Sep 17 00:00:00 2001 From: Simon Byrne Date: Tue, 21 Dec 2021 10:45:00 -0800 Subject: [PATCH 1/4] Use 3-arg `ldiv!` Unless you need it to operate in-place, it would probably make more sense to use the 3-arg `ldiv!` everywhere --- src/factorization.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/factorization.jl b/src/factorization.jl index 93ffdc9e0..c7d953f0d 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -5,7 +5,7 @@ function SciMLBase.solve(cache::LinearCache, alg::AbstractFactorization; kwargs. end copyto!(cache.u,cache.b) - y = ldiv!(cache.cacheval, cache.u) + y = ldiv!(cache.u, cache.cacheval, cache.b) SciMLBase.build_linear_solution(alg,y,nothing,cache) end From 1b9e40f253cb8ed3fd5acebb3ba5c7287ed69ae3 Mon Sep 17 00:00:00 2001 From: Simon Byrne Date: Tue, 21 Dec 2021 12:32:33 -0800 Subject: [PATCH 2/4] define funny overload --- src/factorization.jl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/factorization.jl b/src/factorization.jl index c7d953f0d..56e753236 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -1,11 +1,20 @@ +function _ldiv!(x, A, b) + # work around https://github.com/JuliaLang/julia/issues/43507 + if @which(ldiv!(x,A,b)) == which(ldiv!,Tuple{LU{Float64, Matrix{Float64}},Vector{Float64}}) + copyto!(x, b) + ldiv!(A, x) + else + ldiv!(x, A, b) + end +end + + function SciMLBase.solve(cache::LinearCache, alg::AbstractFactorization; kwargs...) if cache.isfresh fact = do_factorization(alg, cache.A, cache.b, cache.u) cache = set_cacheval(cache, fact) end - - copyto!(cache.u,cache.b) - y = ldiv!(cache.u, cache.cacheval, cache.b) + y = _ldiv!(cache.u, cache.cacheval, cache.b) SciMLBase.build_linear_solution(alg,y,nothing,cache) end From deebf3bb56f567008a3133821d40a659bdc9be67 Mon Sep 17 00:00:00 2001 From: Christopher Rackauckas Date: Tue, 21 Dec 2021 22:13:27 -0500 Subject: [PATCH 3/4] Update src/factorization.jl --- src/factorization.jl | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/factorization.jl b/src/factorization.jl index 56e753236..1cc0ebadd 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -1,11 +1,7 @@ -function _ldiv!(x, A, b) - # work around https://github.com/JuliaLang/julia/issues/43507 - if @which(ldiv!(x,A,b)) == which(ldiv!,Tuple{LU{Float64, Matrix{Float64}},Vector{Float64}}) - copyto!(x, b) - ldiv!(A, x) - else - ldiv!(x, A, b) - end +_ldiv!(x, A, b) = ldiv!(x, A, b) +function _ldiv!(x::Vector, A::Factorization, b::Vector) + copyto!(x, b) + ldiv!(A, x) end From c61b0140278e1f178dad132fb77c5ace7a020430 Mon Sep 17 00:00:00 2001 From: Simon Byrne Date: Tue, 21 Dec 2021 20:15:31 -0800 Subject: [PATCH 4/4] Add comment --- src/factorization.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/factorization.jl b/src/factorization.jl index 1cc0ebadd..adfc8cef9 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -1,5 +1,6 @@ _ldiv!(x, A, b) = ldiv!(x, A, b) function _ldiv!(x::Vector, A::Factorization, b::Vector) + # workaround https://github.com/JuliaLang/julia/issues/43507 copyto!(x, b) ldiv!(A, x) end