From af08384f8645fbb4bfba79f56d419b9cbb75177f Mon Sep 17 00:00:00 2001 From: Christopher Rackauckas Date: Tue, 27 May 2025 02:13:03 +0000 Subject: [PATCH 1/3] simplify inference --- .../ext/NonlinearSolveBaseLinearSolveExt.jl | 8 ++------ lib/NonlinearSolveBase/src/linear_solve.jl | 8 ++++---- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl index c6e88e3ab..b9d0c5bae 100644 --- a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl +++ b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl @@ -17,15 +17,11 @@ function (cache::LinearSolveJLCache)(; cache.stats.nsolve += 1 update_A!(cache, A, reuse_A_if_factorization) - b !== nothing && setproperty!(cache.lincache, :b, b) + b !== nothing && (cache.lincache.b = b) linu !== nothing && NonlinearSolveBase.set_lincache_u!(cache, linu) linres = solve!(cache.lincache) - if linres.retcode === ReturnCode.Failure - return LinearSolveResult(; linres.u, success = false) - else - return LinearSolveResult(; linres.u) - end + LinearSolveResult(linu, linres.retcode == ReturnCode.Failure) end function NonlinearSolveBase.needs_square_A(linsolve::SciMLLinearSolveAlgorithm, ::Any) diff --git a/lib/NonlinearSolveBase/src/linear_solve.jl b/lib/NonlinearSolveBase/src/linear_solve.jl index 592524ec3..05dcc8e54 100644 --- a/lib/NonlinearSolveBase/src/linear_solve.jl +++ b/lib/NonlinearSolveBase/src/linear_solve.jl @@ -1,6 +1,6 @@ -@kwdef @concrete struct LinearSolveResult +@concrete struct LinearSolveResult u - success::Bool = true + success::Bool end @concrete mutable struct LinearSolveJLCache <: AbstractLinearSolverCache @@ -93,7 +93,7 @@ function (cache::NativeJLLinearSolveCache)(; else res = cache.A \ cache.b end - return LinearSolveResult(; u = res) + return LinearSolveResult(res, true) end fix_incompatible_linsolve_arguments(A, b, u) = u @@ -106,7 +106,7 @@ function fix_incompatible_linsolve_arguments(A, b, u::SArray) return MArray(u) end -set_lincache_u!(cache, u) = setproperty!(cache.lincache, :u, u) +set_lincache_u!(cache, u) = cache.lincache.u = u function set_lincache_u!(cache, u::SArray) cache.lincache.u isa MArray && return set_lincache_u!(cache, MArray(u)) cache.lincache.u = u From 7d785de7053d62642e43a4065da69858c84a3f4d Mon Sep 17 00:00:00 2001 From: Christopher Rackauckas Date: Tue, 27 May 2025 02:48:33 +0000 Subject: [PATCH 2/3] fix success --- lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl index b9d0c5bae..07fad2b6e 100644 --- a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl +++ b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl @@ -21,7 +21,7 @@ function (cache::LinearSolveJLCache)(; linu !== nothing && NonlinearSolveBase.set_lincache_u!(cache, linu) linres = solve!(cache.lincache) - LinearSolveResult(linu, linres.retcode == ReturnCode.Failure) + LinearSolveResult(linu, linres.retcode != ReturnCode.Failure) end function NonlinearSolveBase.needs_square_A(linsolve::SciMLLinearSolveAlgorithm, ::Any) From d1890006d9fab5f524eb9c51b7e4dcb5c70883d9 Mon Sep 17 00:00:00 2001 From: Christopher Rackauckas Date: Tue, 27 May 2025 07:41:41 +0000 Subject: [PATCH 3/3] Update lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl --- lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl index 07fad2b6e..820048de9 100644 --- a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl +++ b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl @@ -21,7 +21,7 @@ function (cache::LinearSolveJLCache)(; linu !== nothing && NonlinearSolveBase.set_lincache_u!(cache, linu) linres = solve!(cache.lincache) - LinearSolveResult(linu, linres.retcode != ReturnCode.Failure) + LinearSolveResult(linres.u, linres.retcode != ReturnCode.Failure) end function NonlinearSolveBase.needs_square_A(linsolve::SciMLLinearSolveAlgorithm, ::Any)