Skip to content

Commit 276d331

Browse files
jClugstorChrisRackauckas
authored andcommitted
thread alias through to __solve
1 parent 23ae280 commit 276d331

File tree

17 files changed

+69
-41
lines changed

17 files changed

+69
-41
lines changed

ext/NonlinearSolveFixedPointAccelerationExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
88

99
function SciMLBase.__solve(
1010
prob::NonlinearProblem, alg::FixedPointAccelerationJL, args...;
11-
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,
11+
abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
1212
show_trace::Val = Val(false), termination_condition = nothing, kwargs...
1313
)
14+
alias_u0 = alias.alias_u0
1415
NonlinearSolveBase.assert_extension_supported_termination_condition(
1516
termination_condition, alg
1617
)

ext/NonlinearSolveNLSolversExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ const DI = DifferentiationInterface
1313

1414
function SciMLBase.__solve(
1515
prob::NonlinearProblem, alg::NLSolversJL, args...;
16-
abstol = nothing, reltol = nothing, maxiters = 1000, alias_u0::Bool = false,
16+
abstol = nothing, reltol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
1717
termination_condition = nothing, kwargs...
1818
)
19+
alias_u0 = alias.alias_u0
1920
NonlinearSolveBase.assert_extension_supported_termination_condition(
2021
termination_condition, alg
2122
)

ext/NonlinearSolveNLsolveExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
99

1010
function SciMLBase.__solve(
1111
prob::NonlinearProblem, alg::NLsolveJL, args...;
12-
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,
12+
abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
1313
termination_condition = nothing, trace_level = TraceMinimal(),
1414
store_trace::Val = Val(false), show_trace::Val = Val(false), kwargs...
1515
)
16+
alias_u0 = alias.alias_u0
1617
NonlinearSolveBase.assert_extension_supported_termination_condition(
1718
termination_condition, alg
1819
)

ext/NonlinearSolvePETScExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ using SparseArrays: AbstractSparseMatrix
1414
function SciMLBase.__solve(
1515
prob::NonlinearProblem, alg::PETScSNES, args...;
1616
abstol = nothing, reltol = nothing,
17-
maxiters = 1000, alias_u0::Bool = false, termination_condition = nothing,
17+
maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing,
1818
show_trace::Val = Val(false), kwargs...
1919
)
20+
alias_u0 = alias.alias_u0
2021
# XXX: https://petsc.org/release/manualpages/SNES/SNESSetConvergenceTest/
2122
NonlinearSolveBase.assert_extension_supported_termination_condition(
2223
termination_condition, alg; abs_norm_supported = false

ext/NonlinearSolveSIAMFANLEquationsExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ end
3939

4040
function SciMLBase.__solve(
4141
prob::NonlinearProblem, alg::SIAMFANLEquationsJL, args...;
42-
abstol = nothing, reltol = nothing, alias_u0::Bool = false, maxiters = 1000,
42+
abstol = nothing, reltol = nothing, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000,
4343
termination_condition = nothing, show_trace = Val(false), kwargs...
4444
)
45+
alias_u0 = alias.alias_u0
4546
NonlinearSolveBase.assert_extension_supported_termination_condition(
4647
termination_condition, alg
4748
)

ext/NonlinearSolveSpeedMappingExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
88

99
function SciMLBase.__solve(
1010
prob::NonlinearProblem, alg::SpeedMappingJL, args...;
11-
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,
11+
abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
1212
maxtime = nothing, store_trace::Val = Val(false),
1313
termination_condition = nothing, kwargs...
1414
)
15+
alias_u0 = alias.alias_u0
1516
NonlinearSolveBase.assert_extension_supported_termination_condition(
1617
termination_condition, alg
1718
)

lib/NonlinearSolveBase/src/polyalg.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,10 @@ end
119119
function SciMLBase.__init(
120120
prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm, args...;
121121
stats = NLStats(0, 0, 0, 0, 0), maxtime = nothing, maxiters = 1000,
122-
internalnorm::IN = L2_NORM, alias_u0 = false, verbose = NonlinearVerbosity(),
122+
internalnorm::IN = L2_NORM, alias = NonlinearAliasSpecifier(alias_u0 = false), verbose = NonlinearVerbosity(),
123123
initializealg = NonlinearSolveDefaultInit(), kwargs...
124124
) where {IN}
125+
alias_u0 = alias.alias_u0
125126
if alias_u0 && !ArrayInterface.ismutable(prob.u0)
126127
@SciMLMessage("`alias_u0` has been set to `true`, but `u0` is
127128
immutable (checked using `ArrayInterface.ismutable``).", verbose, :alias_u0_immutable)
@@ -147,7 +148,7 @@ function SciMLBase.__init(
147148
map(alg.algs) do solver
148149
SciMLBase.__init(
149150
prob, solver, args...;
150-
stats, maxtime, internalnorm, alias_u0, verbose,
151+
stats, maxtime, internalnorm, alias, verbose,
151152
initializealg = SciMLBase.NoInit(), kwargs...
152153
)
153154
end,

lib/NonlinearSolveBase/src/solve.jl

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -62,30 +62,24 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing,
6262
verbose = NonlinearVerbosity(verbose)
6363
end
6464

65-
if haskey(prob.kwargs, :alias_u0)
66-
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
67-
alias_spec = NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0])
68-
elseif haskey(kwargs, :alias_u0)
69-
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
70-
alias_spec = NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
71-
end
72-
73-
if haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool
74-
alias_spec = NonlinearAliasSpecifier(alias = prob.kwargs[:alias])
65+
alias_spec = if haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier
66+
kwargs[:alias]
67+
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier
68+
prob.kwargs[:alias]
7569
elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool
76-
alias_spec = NonlinearAliasSpecifier(alias = kwargs[:alias])
77-
end
78-
79-
if haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier
80-
alias_spec = prob.kwargs[:alias]
81-
elseif haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier
82-
alias_spec = kwargs[:alias]
70+
NonlinearAliasSpecifier(alias = kwargs[:alias])
71+
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool
72+
NonlinearAliasSpecifier(alias = prob.kwargs[:alias])
73+
elseif haskey(kwargs, :alias_u0)
74+
@warn lazy"The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
75+
NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
76+
elseif haskey(prob.kwargs, :alias_u0)
77+
@warn lazy"The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
78+
NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0])
8379
else
84-
alias_spec = NonlinearAliasSpecifier(alias_u0 = false)
80+
NonlinearAliasSpecifier(alias_u0 = false)
8581
end
8682

87-
alias_u0 = alias_spec.alias_u0
88-
8983
u0 = u0 !== nothing ? u0 : prob.u0
9084
p = p !== nothing ? p : prob.p
9185

@@ -95,7 +89,7 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing,
9589
u0,
9690
p,
9791
args...;
98-
alias_u0 = alias_u0,
92+
alias = alias_spec,
9993
originator = SciMLBase.ChainRulesOriginator(),
10094
verbose,
10195
kwargs...))
@@ -105,7 +99,7 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing,
10599
u0,
106100
p,
107101
args...;
108-
alias_u0 = alias_u0,
102+
alias = alias_spec,
109103
originator = SciMLBase.ChainRulesOriginator(),
110104
verbose,
111105
kwargs...)
@@ -184,6 +178,24 @@ function init(
184178
sensealg = prob.kwargs[:sensealg]
185179
end
186180

181+
alias_spec = if haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier
182+
kwargs[:alias]
183+
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier
184+
prob.kwargs[:alias]
185+
elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool
186+
NonlinearAliasSpecifier(alias = kwargs[:alias])
187+
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool
188+
NonlinearAliasSpecifier(alias = prob.kwargs[:alias])
189+
elseif haskey(kwargs, :alias_u0)
190+
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
191+
NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
192+
elseif haskey(prob.kwargs, :alias_u0)
193+
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
194+
NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0])
195+
else
196+
NonlinearAliasSpecifier(alias_u0 = false)
197+
end
198+
187199
if verbose isa Bool
188200
# @warn "Using `true` or `false` for `verbose` is being deprecated. Please use a `NonlinearVerbosity` type to specify verbosity settings.
189201
# For details see the verbosity section of the common solver options documentation page."
@@ -199,7 +211,7 @@ function init(
199211
u0 = u0 !== nothing ? u0 : prob.u0
200212
p = p !== nothing ? p : prob.p
201213

202-
init_up(prob, sensealg, u0, p, args...; verbose, kwargs...)
214+
init_up(prob, sensealg, u0, p, args...; alias = alias_spec, verbose, kwargs...)
203215
end
204216

205217
function init_up(prob::AbstractNonlinearProblem,
@@ -401,7 +413,7 @@ end
401413

402414
@generated function __generated_polysolve(
403415
prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm{Val{N}}, args...;
404-
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, verbose = NonlinearVerbosity(),
416+
stats = NLStats(0, 0, 0, 0, 0), alias = NonlinearAliasSpecifier(alias_u0 = false), verbose = NonlinearVerbosity(),
405417
initializealg = NonlinearSolveDefaultInit(), kwargs...
406418
) where {N}
407419

@@ -419,6 +431,7 @@ end
419431
prob_syms = [gensym("prob") for _ in 1:N]
420432
u_result_syms = [gensym("u_result") for _ in 1:N]
421433
calls = [quote
434+
alias_u0 = alias.alias_u0
422435
current = alg.start_index
423436
if alias_u0 && !ArrayInterface.ismutable(prob.u0)
424437
@SciMLMessage("`alias_u0` has been set to `true`, but `u0` is

lib/NonlinearSolveFirstOrder/src/solve.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,12 @@ NonlinearSolveBase.@internal_caches(GeneralizedFirstOrderAlgorithmCache,
129129

130130
function SciMLBase.__init(
131131
prob::AbstractNonlinearProblem, alg::GeneralizedFirstOrderAlgorithm, args...;
132-
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxiters = 1000,
132+
stats = NLStats(0, 0, 0, 0, 0), alias = NonlinearSolveBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000,
133133
abstol = nothing, reltol = nothing, maxtime = nothing,
134134
termination_condition = nothing, internalnorm::IN = L2_NORM, verbose = NonlinearVerbosity(),
135135
linsolve_kwargs = (;), initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(), kwargs...
136136
) where {IN}
137+
alias_u0 = alias.alias_u0
137138
@set! alg.autodiff = NonlinearSolveBase.select_jacobian_autodiff(prob, alg.autodiff)
138139
provided_jvp_autodiff = alg.jvp_autodiff !== nothing
139140
@set! alg.jvp_autodiff = if !provided_jvp_autodiff && alg.autodiff !== nothing &&

lib/NonlinearSolveQuasiNewton/src/solve.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,14 @@ NonlinearSolveBase.@internal_caches(QuasiNewtonCache,
147147

148148
function SciMLBase.__init(
149149
prob::AbstractNonlinearProblem, alg::QuasiNewtonAlgorithm, args...;
150-
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxtime = nothing,
150+
stats = NLStats(0, 0, 0, 0, 0), alias = NonlinearSolveBase.NonlinearAliasSpecifier(alias_u0 = false), maxtime = nothing,
151151
maxiters = 1000, abstol = nothing, reltol = nothing,
152152
linsolve_kwargs = (;), termination_condition = nothing,
153153
internalnorm::F = L2_NORM, initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(),
154154
verbose = NonlinearVerbosity(),
155155
kwargs...
156156
) where {F}
157+
alias_u0 = alias.alias_u0
157158
timer = get_timer_output()
158159
@static_timeit timer "cache construction" begin
159160

0 commit comments

Comments
 (0)