@@ -19,10 +19,11 @@ using LinearAlgebra: LinearAlgebra, I, convert, copyto!, diagind, dot, issuccess
1919 norm, transpose
2020using MaybeInplace: @bb , setindex_trait, CanSetindex, CannotSetindex
2121using Reexport: @reexport
22- using SciMLBase: SciMLBase, AbstractNonlinearProblem, IntervalNonlinearProblem,
22+ using SciMLBase: @add_kwonly , SciMLBase, AbstractNonlinearProblem, IntervalNonlinearProblem,
23+ AbstractNonlinearFunction, StandardNonlinearProblem,
2324 NonlinearFunction, NonlinearLeastSquaresProblem, NonlinearProblem,
2425 ReturnCode, init, remake, solve, AbstractNonlinearAlgorithm,
25- build_solution, isinplace, _unwrap_val
26+ build_solution, isinplace, _unwrap_val, warn_paramtype
2627using Setfield: @set!
2728using StaticArraysCore: StaticArray, SVector, SMatrix, SArray, MArray, Size
2829
@@ -35,7 +36,7 @@ abstract type AbstractBracketingAlgorithm <: AbstractSimpleNonlinearSolveAlgorit
3536abstract type AbstractNewtonAlgorithm <: AbstractSimpleNonlinearSolveAlgorithm end
3637
3738@inline __is_extension_loaded (:: Val ) = false
38-
39+ include ( " immutable_nonlinear_problem.jl " )
3940include (" utils.jl" )
4041include (" linesearch.jl" )
4142
7071# By Pass the highlevel checks for NonlinearProblem for Simple Algorithms
7172function SciMLBase. solve (prob:: NonlinearProblem , alg:: AbstractSimpleNonlinearSolveAlgorithm ,
7273 args... ; sensealg = nothing , u0 = nothing , p = nothing , kwargs... )
74+ prob = convert (ImmutableNonlinearProblem, prob)
75+ if sensealg === nothing && haskey (prob. kwargs, :sensealg )
76+ sensealg = prob. kwargs[:sensealg ]
77+ end
78+ new_u0 = u0 != = nothing ? u0 : prob. u0
79+ new_p = p != = nothing ? p : prob. p
80+ return __internal_solve_up (prob, sensealg, new_u0, u0 === nothing , new_p,
81+ p === nothing , alg, args... ; prob. kwargs... , kwargs... )
82+ end
83+
84+ function SciMLBase. solve (prob:: ImmutableNonlinearProblem , alg:: AbstractSimpleNonlinearSolveAlgorithm ,
85+ args... ; sensealg = nothing , u0 = nothing , p = nothing , kwargs... )
7386 if sensealg === nothing && haskey (prob. kwargs, :sensealg )
7487 sensealg = prob. kwargs[:sensealg ]
7588 end
@@ -79,7 +92,7 @@ function SciMLBase.solve(prob::NonlinearProblem, alg::AbstractSimpleNonlinearSol
7992 p === nothing , alg, args... ; prob. kwargs... , kwargs... )
8093end
8194
82- function __internal_solve_up (_prob:: NonlinearProblem , sensealg, u0, u0_changed,
95+ function __internal_solve_up (_prob:: ImmutableNonlinearProblem , sensealg, u0, u0_changed,
8396 p, p_changed, alg, args... ; kwargs... )
8497 prob = u0_changed || p_changed ? remake (_prob; u0, p) : _prob
8598 return SciMLBase. __solve (prob, alg, args... ; kwargs... )
0 commit comments