Skip to content
This repository was archived by the owner on May 15, 2025. It is now read-only.

Commit 446f28a

Browse files
format
1 parent e63b1a8 commit 446f28a

File tree

7 files changed

+59
-57
lines changed

7 files changed

+59
-57
lines changed

src/SimpleNonlinearSolve.jl

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ using LinearAlgebra: LinearAlgebra, I, convert, copyto!, diagind, dot, issuccess
2020
using MaybeInplace: @bb, setindex_trait, CanSetindex, CannotSetindex
2121
using Reexport: @reexport
2222
using SciMLBase: @add_kwonly, SciMLBase, AbstractNonlinearProblem, IntervalNonlinearProblem,
23-
AbstractNonlinearFunction, StandardNonlinearProblem,
24-
NonlinearFunction, NonlinearLeastSquaresProblem, NonlinearProblem,
25-
ReturnCode, init, remake, solve, AbstractNonlinearAlgorithm,
26-
build_solution, isinplace, _unwrap_val, warn_paramtype
23+
AbstractNonlinearFunction, StandardNonlinearProblem, NonlinearFunction,
24+
NonlinearLeastSquaresProblem, NonlinearProblem, ReturnCode, init, remake,
25+
solve, AbstractNonlinearAlgorithm, build_solution, isinplace, _unwrap_val,
26+
warn_paramtype
2727
using Setfield: @set!
2828
using StaticArraysCore: StaticArray, SVector, SMatrix, SArray, MArray, Size
2929

@@ -81,8 +81,9 @@ function SciMLBase.solve(prob::NonlinearProblem, alg::AbstractSimpleNonlinearSol
8181
p === nothing, alg, args...; prob.kwargs..., kwargs...)
8282
end
8383

84-
function SciMLBase.solve(prob::ImmutableNonlinearProblem, alg::AbstractSimpleNonlinearSolveAlgorithm,
85-
args...; sensealg = nothing, u0 = nothing, p = nothing, kwargs...)
84+
function SciMLBase.solve(
85+
prob::ImmutableNonlinearProblem, alg::AbstractSimpleNonlinearSolveAlgorithm,
86+
args...; sensealg = nothing, u0 = nothing, p = nothing, kwargs...)
8687
if sensealg === nothing && haskey(prob.kwargs, :sensealg)
8788
sensealg = prob.kwargs[:sensealg]
8889
end
@@ -92,8 +93,8 @@ function SciMLBase.solve(prob::ImmutableNonlinearProblem, alg::AbstractSimpleNon
9293
p === nothing, alg, args...; prob.kwargs..., kwargs...)
9394
end
9495

95-
function __internal_solve_up(_prob::ImmutableNonlinearProblem, sensealg, u0, u0_changed,
96-
p, p_changed, alg, args...; kwargs...)
96+
function __internal_solve_up(_prob::ImmutableNonlinearProblem, sensealg, u0,
97+
u0_changed, p, p_changed, alg, args...; kwargs...)
9798
prob = u0_changed || p_changed ? remake(_prob; u0, p) : _prob
9899
return SciMLBase.__solve(prob, alg, args...; kwargs...)
99100
end

src/ad.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ for algType in (Bisection, Brent, Alefeld, Falsi, ITP, Ridder)
4242
end
4343

4444
function __nlsolve_ad(
45-
prob::Union{IntervalNonlinearProblem, NonlinearProblem, ImmutableNonlinearProblem}, alg, args...; kwargs...)
45+
prob::Union{IntervalNonlinearProblem, NonlinearProblem, ImmutableNonlinearProblem},
46+
alg, args...; kwargs...)
4647
p = value(prob.p)
4748
if prob isa IntervalNonlinearProblem
4849
tspan = value.(prob.tspan)

src/immutable_nonlinear_problem.jl

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,60 @@
11
struct ImmutableNonlinearProblem{uType, isinplace, P, F, K, PT} <:
2-
AbstractNonlinearProblem{uType, isinplace}
3-
f::F
4-
u0::uType
5-
p::P
6-
problem_type::PT
7-
kwargs::K
8-
@add_kwonly function ImmutableNonlinearProblem{iip}(f::AbstractNonlinearFunction{iip}, u0,
9-
p = NullParameters(),
10-
problem_type = StandardNonlinearProblem();
11-
kwargs...) where {iip}
12-
if haskey(kwargs, :p)
13-
error("`p` specified as a keyword argument `p = $(kwargs[:p])` to `NonlinearProblem`. This is not supported.")
14-
end
15-
warn_paramtype(p)
16-
new{typeof(u0), iip, typeof(p), typeof(f),
17-
typeof(kwargs), typeof(problem_type)}(f,
18-
u0,
19-
p,
20-
problem_type,
21-
kwargs)
22-
end
2+
AbstractNonlinearProblem{uType, isinplace}
3+
f::F
4+
u0::uType
5+
p::P
6+
problem_type::PT
7+
kwargs::K
8+
@add_kwonly function ImmutableNonlinearProblem{iip}(
9+
f::AbstractNonlinearFunction{iip}, u0, p = NullParameters(),
10+
problem_type = StandardNonlinearProblem(); kwargs...) where {iip}
11+
if haskey(kwargs, :p)
12+
error("`p` specified as a keyword argument `p = $(kwargs[:p])` to `NonlinearProblem`. This is not supported.")
13+
end
14+
warn_paramtype(p)
15+
new{typeof(u0), iip, typeof(p), typeof(f), typeof(kwargs), typeof(problem_type)}(
16+
f, u0, p, problem_type, kwargs)
17+
end
2318

24-
"""
25-
Define a steady state problem using the given function.
26-
`isinplace` optionally sets whether the function is inplace or not.
27-
This is determined automatically, but not inferred.
28-
"""
29-
function ImmutableNonlinearProblem{iip}(f, u0, p = NullParameters(); kwargs...) where {iip}
30-
ImmutableNonlinearProblem{iip}(NonlinearFunction{iip}(f), u0, p; kwargs...)
31-
end
19+
"""
20+
Define a steady state problem using the given function.
21+
`isinplace` optionally sets whether the function is inplace or not.
22+
This is determined automatically, but not inferred.
23+
"""
24+
function ImmutableNonlinearProblem{iip}(
25+
f, u0, p = NullParameters(); kwargs...) where {iip}
26+
ImmutableNonlinearProblem{iip}(NonlinearFunction{iip}(f), u0, p; kwargs...)
27+
end
3228
end
3329

3430
"""
3531
Define a nonlinear problem using an instance of
3632
[`AbstractNonlinearFunction`](@ref AbstractNonlinearFunction).
3733
"""
38-
function ImmutableNonlinearProblem(f::AbstractNonlinearFunction, u0, p = NullParameters(); kwargs...)
39-
ImmutableNonlinearProblem{isinplace(f)}(f, u0, p; kwargs...)
34+
function ImmutableNonlinearProblem(
35+
f::AbstractNonlinearFunction, u0, p = NullParameters(); kwargs...)
36+
ImmutableNonlinearProblem{isinplace(f)}(f, u0, p; kwargs...)
4037
end
4138

4239
function ImmutableNonlinearProblem(f, u0, p = NullParameters(); kwargs...)
43-
ImmutableNonlinearProblem(NonlinearFunction(f), u0, p; kwargs...)
40+
ImmutableNonlinearProblem(NonlinearFunction(f), u0, p; kwargs...)
4441
end
4542

4643
"""
4744
Define a ImmutableNonlinearProblem problem from SteadyStateProblem
4845
"""
4946
function ImmutableNonlinearProblem(prob::AbstractNonlinearProblem)
50-
ImmutableNonlinearProblem{isinplace(prob)}(prob.f, prob.u0, prob.p)
47+
ImmutableNonlinearProblem{isinplace(prob)}(prob.f, prob.u0, prob.p)
5148
end
5249

53-
54-
function Base.convert(::Type{ImmutableNonlinearProblem}, prob::T) where {T <: NonlinearProblem}
55-
ImmutableNonlinearProblem{isinplace(prob)}(prob.f,
56-
prob.u0,
57-
prob.p,
58-
prob.problem_type;
59-
prob.kwargs...)
50+
function Base.convert(
51+
::Type{ImmutableNonlinearProblem}, prob::T) where {T <: NonlinearProblem}
52+
ImmutableNonlinearProblem{isinplace(prob)}(
53+
prob.f, prob.u0, prob.p, prob.problem_type; prob.kwargs...)
6054
end
6155

62-
function DiffEqBase.get_concrete_problem(prob::ImmutableNonlinearProblem, isadapt; kwargs...)
56+
function DiffEqBase.get_concrete_problem(
57+
prob::ImmutableNonlinearProblem, isadapt; kwargs...)
6358
u0 = DiffEqBase.get_concrete_u0(prob, isadapt, nothing, kwargs)
6459
u0 = DiffEqBase.promote_u0(u0, prob.p, nothing)
6560
p = DiffEqBase.get_concrete_p(prob, kwargs)

src/nlsolve/lbroyden.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ function SciMLBase.__solve(prob::ImmutableNonlinearProblem, alg::SimpleLimitedMe
4444
return __generic_solve(prob, alg, args...; termination_condition, kwargs...)
4545
end
4646

47-
@views function __generic_solve(prob::ImmutableNonlinearProblem, alg::SimpleLimitedMemoryBroyden,
47+
@views function __generic_solve(
48+
prob::ImmutableNonlinearProblem, alg::SimpleLimitedMemoryBroyden,
4849
args...; abstol = nothing, reltol = nothing, maxiters = 1000,
4950
alias_u0 = false, termination_condition = nothing, kwargs...)
5051
x = __maybe_unaliased(prob.u0, alias_u0)
@@ -114,7 +115,8 @@ end
114115
# Non-allocating StaticArrays version of SimpleLimitedMemoryBroyden is actually quite
115116
# finicky, so we'll implement it separately from the generic version
116117
# Ignore termination_condition. Don't pass things into internal functions
117-
function __static_solve(prob::ImmutableNonlinearProblem{<:SArray}, alg::SimpleLimitedMemoryBroyden,
118+
function __static_solve(
119+
prob::ImmutableNonlinearProblem{<:SArray}, alg::SimpleLimitedMemoryBroyden,
118120
args...; abstol = nothing, maxiters = 1000, kwargs...)
119121
x = prob.u0
120122
fx = _get_fx(prob, x)

src/nlsolve/raphson.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ end
2323

2424
const SimpleGaussNewton = SimpleNewtonRaphson
2525

26-
function SciMLBase.__solve(prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem},
26+
function SciMLBase.__solve(
27+
prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem},
2728
alg::SimpleNewtonRaphson, args...; abstol = nothing, reltol = nothing,
2829
maxiters = 1000, termination_condition = nothing, alias_u0 = false, kwargs...)
2930
x = __maybe_unaliased(prob.u0, alias_u0)

src/nlsolve/trustRegion.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ scalar and static array problems.
5555
nlsolve_update_rule = Val(false)
5656
end
5757

58-
function SciMLBase.__solve(prob::ImmutableNonlinearProblem, alg::SimpleTrustRegion, args...;
59-
abstol = nothing, reltol = nothing, maxiters = 1000,
58+
function SciMLBase.__solve(prob::ImmutableNonlinearProblem, alg::SimpleTrustRegion,
59+
args...; abstol = nothing, reltol = nothing, maxiters = 1000,
6060
alias_u0 = false, termination_condition = nothing, kwargs...)
6161
x = __maybe_unaliased(prob.u0, alias_u0)
6262
T = eltype(real(x))

src/utils.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ end
145145
# different. NonlinearSolve is more for robust / cached solvers while SimpleNonlinearSolve
146146
# is meant for low overhead solvers, users can opt into the other termination modes but the
147147
# default is to use the least overhead version.
148-
function init_termination_cache(prob::ImmutableNonlinearProblem, abstol, reltol, du, u, ::Nothing)
148+
function init_termination_cache(
149+
prob::ImmutableNonlinearProblem, abstol, reltol, du, u, ::Nothing)
149150
return init_termination_cache(
150151
prob, abstol, reltol, du, u, AbsNormTerminationMode(Base.Fix1(maximum, abs)))
151152
end
@@ -155,7 +156,8 @@ function init_termination_cache(
155156
prob, abstol, reltol, du, u, AbsNormTerminationMode(Base.Fix2(norm, 2)))
156157
end
157158

158-
function init_termination_cache(prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem},
159+
function init_termination_cache(
160+
prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem},
159161
abstol, reltol, du, u, tc::AbstractNonlinearTerminationMode)
160162
T = promote_type(eltype(du), eltype(u))
161163
abstol = __get_tolerance(u, abstol, T)

0 commit comments

Comments
 (0)