diff --git a/ext/NonlinearSolveFixedPointAccelerationExt.jl b/ext/NonlinearSolveFixedPointAccelerationExt.jl index bee8e8ee7..5160beafb 100644 --- a/ext/NonlinearSolveFixedPointAccelerationExt.jl +++ b/ext/NonlinearSolveFixedPointAccelerationExt.jl @@ -8,9 +8,13 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode function SciMLBase.__solve( prob::NonlinearProblem, alg::FixedPointAccelerationJL, args...; - abstol = nothing, maxiters = 1000, alias_u0::Bool = false, + abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), show_trace::Val = Val(false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 NonlinearSolveBase.assert_extension_supported_termination_condition( termination_condition, alg ) diff --git a/ext/NonlinearSolveNLSolversExt.jl b/ext/NonlinearSolveNLSolversExt.jl index b72ffbec3..bb79ba4b5 100644 --- a/ext/NonlinearSolveNLSolversExt.jl +++ b/ext/NonlinearSolveNLSolversExt.jl @@ -13,9 +13,13 @@ const DI = DifferentiationInterface function SciMLBase.__solve( prob::NonlinearProblem, alg::NLSolversJL, args...; - abstol = nothing, reltol = nothing, maxiters = 1000, alias_u0::Bool = false, + abstol = nothing, reltol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 NonlinearSolveBase.assert_extension_supported_termination_condition( termination_condition, alg ) diff --git a/ext/NonlinearSolveNLsolveExt.jl b/ext/NonlinearSolveNLsolveExt.jl index 1b0beb993..7fa040282 100644 --- a/ext/NonlinearSolveNLsolveExt.jl +++ b/ext/NonlinearSolveNLsolveExt.jl @@ -9,10 +9,14 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode function SciMLBase.__solve( prob::NonlinearProblem, alg::NLsolveJL, args...; - abstol = nothing, maxiters = 1000, alias_u0::Bool = false, + abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, trace_level = TraceMinimal(), store_trace::Val = Val(false), show_trace::Val = Val(false), kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 NonlinearSolveBase.assert_extension_supported_termination_condition( termination_condition, alg ) diff --git a/ext/NonlinearSolvePETScExt.jl b/ext/NonlinearSolvePETScExt.jl index cee56fc77..309daaae5 100644 --- a/ext/NonlinearSolvePETScExt.jl +++ b/ext/NonlinearSolvePETScExt.jl @@ -14,9 +14,13 @@ using SparseArrays: AbstractSparseMatrix function SciMLBase.__solve( prob::NonlinearProblem, alg::PETScSNES, args...; abstol = nothing, reltol = nothing, - maxiters = 1000, alias_u0::Bool = false, termination_condition = nothing, + maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, show_trace::Val = Val(false), kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 # XXX: https://petsc.org/release/manualpages/SNES/SNESSetConvergenceTest/ NonlinearSolveBase.assert_extension_supported_termination_condition( termination_condition, alg; abs_norm_supported = false diff --git a/ext/NonlinearSolveSIAMFANLEquationsExt.jl b/ext/NonlinearSolveSIAMFANLEquationsExt.jl index ab2fd5ebf..e41cbf1f4 100644 --- a/ext/NonlinearSolveSIAMFANLEquationsExt.jl +++ b/ext/NonlinearSolveSIAMFANLEquationsExt.jl @@ -39,9 +39,13 @@ end function SciMLBase.__solve( prob::NonlinearProblem, alg::SIAMFANLEquationsJL, args...; - abstol = nothing, reltol = nothing, alias_u0::Bool = false, maxiters = 1000, + abstol = nothing, reltol = nothing, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000, termination_condition = nothing, show_trace = Val(false), kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 NonlinearSolveBase.assert_extension_supported_termination_condition( termination_condition, alg ) diff --git a/ext/NonlinearSolveSpeedMappingExt.jl b/ext/NonlinearSolveSpeedMappingExt.jl index e32dbb559..e6b8498e0 100644 --- a/ext/NonlinearSolveSpeedMappingExt.jl +++ b/ext/NonlinearSolveSpeedMappingExt.jl @@ -8,10 +8,14 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode function SciMLBase.__solve( prob::NonlinearProblem, alg::SpeedMappingJL, args...; - abstol = nothing, maxiters = 1000, alias_u0::Bool = false, + abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxtime = nothing, store_trace::Val = Val(false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 NonlinearSolveBase.assert_extension_supported_termination_condition( termination_condition, alg ) diff --git a/lib/NonlinearSolveBase/src/polyalg.jl b/lib/NonlinearSolveBase/src/polyalg.jl index 76edb3033..a4f631b92 100644 --- a/lib/NonlinearSolveBase/src/polyalg.jl +++ b/lib/NonlinearSolveBase/src/polyalg.jl @@ -119,9 +119,13 @@ end function SciMLBase.__init( prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm, args...; stats = NLStats(0, 0, 0, 0, 0), maxtime = nothing, maxiters = 1000, - internalnorm::IN = L2_NORM, alias_u0 = false, verbose = NonlinearVerbosity(), + internalnorm::IN = L2_NORM, alias = NonlinearAliasSpecifier(alias_u0 = false), verbose = NonlinearVerbosity(), initializealg = NonlinearSolveDefaultInit(), kwargs... ) where {IN} + if haskey(kwargs, :alias_u0) + alias = NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 if alias_u0 && !ArrayInterface.ismutable(prob.u0) @SciMLMessage("`alias_u0` has been set to `true`, but `u0` is immutable (checked using `ArrayInterface.ismutable``).", verbose, :alias_u0_immutable) @@ -147,7 +151,7 @@ function SciMLBase.__init( map(alg.algs) do solver SciMLBase.__init( prob, solver, args...; - stats, maxtime, internalnorm, alias_u0, verbose, + stats, maxtime, internalnorm, alias, verbose, initializealg = SciMLBase.NoInit(), kwargs... ) end, diff --git a/lib/NonlinearSolveBase/src/solve.jl b/lib/NonlinearSolveBase/src/solve.jl index 7632171f8..36e8a602f 100644 --- a/lib/NonlinearSolveBase/src/solve.jl +++ b/lib/NonlinearSolveBase/src/solve.jl @@ -62,30 +62,24 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing, verbose = NonlinearVerbosity(verbose) end - if haskey(prob.kwargs, :alias_u0) - @warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`." - alias_spec = NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0]) + alias_spec = if haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier + kwargs[:alias] + elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier + prob.kwargs[:alias] + elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool + NonlinearAliasSpecifier(alias = kwargs[:alias]) + elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool + NonlinearAliasSpecifier(alias = prob.kwargs[:alias]) elseif haskey(kwargs, :alias_u0) @warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`." - alias_spec = NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) - end - - if haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool - alias_spec = NonlinearAliasSpecifier(alias = prob.kwargs[:alias]) - elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool - alias_spec = NonlinearAliasSpecifier(alias = kwargs[:alias]) - end - - if haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier - alias_spec = prob.kwargs[:alias] - elseif haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier - alias_spec = kwargs[:alias] + NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + elseif haskey(prob.kwargs, :alias_u0) + @warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`." + NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0]) else - alias_spec = NonlinearAliasSpecifier(alias_u0 = false) + NonlinearAliasSpecifier(alias_u0 = false) end - alias_u0 = alias_spec.alias_u0 - u0 = u0 !== nothing ? u0 : prob.u0 p = p !== nothing ? p : prob.p @@ -95,7 +89,7 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing, u0, p, args...; - alias_u0 = alias_u0, + alias = alias_spec, originator = SciMLBase.ChainRulesOriginator(), verbose, kwargs...)) @@ -105,7 +99,7 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing, u0, p, args...; - alias_u0 = alias_u0, + alias = alias_spec, originator = SciMLBase.ChainRulesOriginator(), verbose, kwargs...) @@ -184,6 +178,24 @@ function init( sensealg = prob.kwargs[:sensealg] end + alias_spec = if haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier + kwargs[:alias] + elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier + prob.kwargs[:alias] + elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool + NonlinearAliasSpecifier(alias = kwargs[:alias]) + elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool + NonlinearAliasSpecifier(alias = prob.kwargs[:alias]) + elseif haskey(kwargs, :alias_u0) + @warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`." + NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + elseif haskey(prob.kwargs, :alias_u0) + @warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`." + NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0]) + else + NonlinearAliasSpecifier(alias_u0 = false) + end + if verbose isa Bool # @warn "Using `true` or `false` for `verbose` is being deprecated. Please use a `NonlinearVerbosity` type to specify verbosity settings. # For details see the verbosity section of the common solver options documentation page." @@ -199,7 +211,7 @@ function init( u0 = u0 !== nothing ? u0 : prob.u0 p = p !== nothing ? p : prob.p - init_up(prob, sensealg, u0, p, args...; verbose, kwargs...) + init_up(prob, sensealg, u0, p, args...; alias = alias_spec, verbose, kwargs...) end function init_up(prob::AbstractNonlinearProblem, @@ -401,7 +413,7 @@ end @generated function __generated_polysolve( prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm{Val{N}}, args...; - stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, verbose = NonlinearVerbosity(), + stats = NLStats(0, 0, 0, 0, 0), alias = NonlinearAliasSpecifier(alias_u0 = false), verbose = NonlinearVerbosity(), initializealg = NonlinearSolveDefaultInit(), kwargs... ) where {N} @@ -419,6 +431,7 @@ end prob_syms = [gensym("prob") for _ in 1:N] u_result_syms = [gensym("u_result") for _ in 1:N] calls = [quote + alias_u0 = alias.alias_u0 current = alg.start_index if alias_u0 && !ArrayInterface.ismutable(prob.u0) @SciMLMessage("`alias_u0` has been set to `true`, but `u0` is diff --git a/lib/NonlinearSolveFirstOrder/src/solve.jl b/lib/NonlinearSolveFirstOrder/src/solve.jl index e577da907..7b7267aac 100644 --- a/lib/NonlinearSolveFirstOrder/src/solve.jl +++ b/lib/NonlinearSolveFirstOrder/src/solve.jl @@ -129,11 +129,15 @@ NonlinearSolveBase.@internal_caches(GeneralizedFirstOrderAlgorithmCache, function SciMLBase.__init( prob::AbstractNonlinearProblem, alg::GeneralizedFirstOrderAlgorithm, args...; - stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxiters = 1000, + stats = NLStats(0, 0, 0, 0, 0), alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000, abstol = nothing, reltol = nothing, maxtime = nothing, termination_condition = nothing, internalnorm::IN = L2_NORM, verbose = NonlinearVerbosity(), linsolve_kwargs = (;), initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(), kwargs... ) where {IN} + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 @set! alg.autodiff = NonlinearSolveBase.select_jacobian_autodiff(prob, alg.autodiff) provided_jvp_autodiff = alg.jvp_autodiff !== nothing @set! alg.jvp_autodiff = if !provided_jvp_autodiff && alg.autodiff !== nothing && diff --git a/lib/NonlinearSolveQuasiNewton/src/solve.jl b/lib/NonlinearSolveQuasiNewton/src/solve.jl index 7585f537e..dfc4c6283 100644 --- a/lib/NonlinearSolveQuasiNewton/src/solve.jl +++ b/lib/NonlinearSolveQuasiNewton/src/solve.jl @@ -147,13 +147,17 @@ NonlinearSolveBase.@internal_caches(QuasiNewtonCache, function SciMLBase.__init( prob::AbstractNonlinearProblem, alg::QuasiNewtonAlgorithm, args...; - stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxtime = nothing, + stats = NLStats(0, 0, 0, 0, 0), alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxtime = nothing, maxiters = 1000, abstol = nothing, reltol = nothing, linsolve_kwargs = (;), termination_condition = nothing, internalnorm::F = L2_NORM, initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(), verbose = NonlinearVerbosity(), kwargs... ) where {F} + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 timer = get_timer_output() @static_timeit timer "cache construction" begin diff --git a/lib/NonlinearSolveSpectralMethods/src/solve.jl b/lib/NonlinearSolveSpectralMethods/src/solve.jl index 04dc2d661..9c9b18e06 100644 --- a/lib/NonlinearSolveSpectralMethods/src/solve.jl +++ b/lib/NonlinearSolveSpectralMethods/src/solve.jl @@ -124,11 +124,15 @@ NonlinearSolveBase.@internal_caches GeneralizedDFSaneCache :linesearch_cache function SciMLBase.__init( prob::AbstractNonlinearProblem, alg::GeneralizedDFSane, args...; - stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxiters = 1000, + stats = NLStats(0, 0, 0, 0, 0), alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000, abstol = nothing, reltol = nothing, termination_condition = nothing, maxtime = nothing, verbose = NonlinearVerbosity(), initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(), kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 timer = get_timer_output() @static_timeit timer "cache construction" begin diff --git a/lib/SimpleNonlinearSolve/src/SimpleNonlinearSolve.jl b/lib/SimpleNonlinearSolve/src/SimpleNonlinearSolve.jl index 0cc71cdb6..6f486b42a 100644 --- a/lib/SimpleNonlinearSolve/src/SimpleNonlinearSolve.jl +++ b/lib/SimpleNonlinearSolve/src/SimpleNonlinearSolve.jl @@ -16,7 +16,6 @@ using NonlinearSolveBase: NonlinearSolveBase, ImmutableNonlinearProblem, L2_NORM AbstractVerbosityPreset using SciMLBase: SciMLBase, NonlinearFunction, NonlinearProblem, NonlinearLeastSquaresProblem, ReturnCode, remake - using LinearAlgebra: LinearAlgebra, dot using StaticArraysCore: StaticArray, SArray, SVector, MArray diff --git a/lib/SimpleNonlinearSolve/src/dfsane.jl b/lib/SimpleNonlinearSolve/src/dfsane.jl index 0ba330440..66a596a62 100644 --- a/lib/SimpleNonlinearSolve/src/dfsane.jl +++ b/lib/SimpleNonlinearSolve/src/dfsane.jl @@ -65,9 +65,13 @@ end function SciMLBase.__solve( prob::ImmutableNonlinearProblem, alg::SimpleDFSane, args...; - abstol = nothing, reltol = nothing, maxiters = 1000, alias_u0 = false, + abstol = nothing, reltol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 x = NLBUtils.maybe_unaliased(prob.u0, alias_u0) fx = NLBUtils.evaluate_f(prob, x) T = promote_type(eltype(fx), eltype(x)) diff --git a/lib/SimpleNonlinearSolve/src/halley.jl b/lib/SimpleNonlinearSolve/src/halley.jl index 7935e1ede..6efd28e58 100644 --- a/lib/SimpleNonlinearSolve/src/halley.jl +++ b/lib/SimpleNonlinearSolve/src/halley.jl @@ -31,8 +31,12 @@ end function SciMLBase.__solve( prob::ImmutableNonlinearProblem, alg::SimpleHalley, args...; abstol = nothing, reltol = nothing, maxiters = 1000, - alias_u0 = false, termination_condition = nothing, kwargs... + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 autodiff = alg.autodiff x = NLBUtils.maybe_unaliased(prob.u0, alias_u0) fx = NLBUtils.evaluate_f(prob, x) diff --git a/lib/SimpleNonlinearSolve/src/lbroyden.jl b/lib/SimpleNonlinearSolve/src/lbroyden.jl index 85a884ede..1e4a03d4d 100644 --- a/lib/SimpleNonlinearSolve/src/lbroyden.jl +++ b/lib/SimpleNonlinearSolve/src/lbroyden.jl @@ -66,8 +66,12 @@ end @views function internal_generic_solve( prob::ImmutableNonlinearProblem, alg::SimpleLimitedMemoryBroyden, args...; abstol = nothing, reltol = nothing, maxiters = 1000, - alias_u0 = false, termination_condition = nothing, kwargs... + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 x = NLBUtils.maybe_unaliased(prob.u0, alias_u0) η = min(NLBUtils.unwrap_val(alg.threshold), maxiters) diff --git a/lib/SimpleNonlinearSolve/src/raphson.jl b/lib/SimpleNonlinearSolve/src/raphson.jl index 812c53d02..f40da122d 100644 --- a/lib/SimpleNonlinearSolve/src/raphson.jl +++ b/lib/SimpleNonlinearSolve/src/raphson.jl @@ -35,8 +35,12 @@ function SciMLBase.__solve( prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem}, alg::SimpleNewtonRaphson, args...; abstol = nothing, reltol = nothing, maxiters = 1000, - alias_u0 = false, termination_condition = nothing, kwargs... + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 autodiff = alg.autodiff x = NLBUtils.maybe_unaliased(prob.u0, alias_u0) fx = NLBUtils.evaluate_f(prob, x) diff --git a/lib/SimpleNonlinearSolve/src/trust_region.jl b/lib/SimpleNonlinearSolve/src/trust_region.jl index aa6041d61..262ef0e63 100644 --- a/lib/SimpleNonlinearSolve/src/trust_region.jl +++ b/lib/SimpleNonlinearSolve/src/trust_region.jl @@ -61,8 +61,12 @@ function SciMLBase.__solve( prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem}, alg::SimpleTrustRegion, args...; abstol = nothing, reltol = nothing, maxiters = 1000, - alias_u0 = false, termination_condition = nothing, kwargs... + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs... ) + if haskey(kwargs, :alias_u0) + alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0]) + end + alias_u0 = alias.alias_u0 x = NLBUtils.maybe_unaliased(prob.u0, alias_u0) T = eltype(x) Δₘₐₓ = T(alg.max_trust_radius)