Skip to content

Commit 3a680ef

Browse files
committed
feat: remove LineSearches.jl dependency
1 parent 02323bb commit 3a680ef

File tree

10 files changed

+25
-67
lines changed

10 files changed

+25
-67
lines changed

Project.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "NonlinearSolve"
22
uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
33
authors = ["SciML"]
4-
version = "3.15.2"
4+
version = "4.0.0"
55

66
[deps]
77
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
@@ -15,7 +15,6 @@ FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41"
1515
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
1616
LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
1717
LineSearch = "87fe0de2-c867-4266-b59a-2f0a94fc965b"
18-
LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255"
1918
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
2019
LinearSolve = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae"
2120
MaybeInplace = "bb5d69b7-63fc-4a16-80bd-7e42200c7bdb"
@@ -41,6 +40,7 @@ BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
4140
FastLevenbergMarquardt = "7a0df574-e128-4d35-8cbd-3d84502bf7ce"
4241
FixedPointAcceleration = "817d07cb-a79a-5c30-9a31-890123675176"
4342
LeastSquaresOptim = "0fc2ff8b-aaa3-5acd-a817-1944a5e08891"
43+
LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255"
4444
MINPACK = "4854310b-de5a-5eb6-a2a5-c1dee2bd17f9"
4545
NLSolvers = "337daf1e-9722-11e9-073e-8b9effe078ba"
4646
NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56"
@@ -54,7 +54,7 @@ NonlinearSolveFixedPointAccelerationExt = "FixedPointAcceleration"
5454
NonlinearSolveLeastSquaresOptimExt = "LeastSquaresOptim"
5555
NonlinearSolveMINPACKExt = "MINPACK"
5656
NonlinearSolveNLSolversExt = "NLSolvers"
57-
NonlinearSolveNLsolveExt = "NLsolve"
57+
NonlinearSolveNLsolveExt = ["NLsolve", "LineSearches"]
5858
NonlinearSolveSIAMFANLEquationsExt = "SIAMFANLEquations"
5959
NonlinearSolveSpeedMappingExt = "SpeedMapping"
6060

@@ -132,6 +132,7 @@ FixedPointAcceleration = "817d07cb-a79a-5c30-9a31-890123675176"
132132
Hwloc = "0e44f5e4-bd66-52a0-8798-143a42290a1d"
133133
InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
134134
LeastSquaresOptim = "0fc2ff8b-aaa3-5acd-a817-1944a5e08891"
135+
LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255"
135136
MINPACK = "4854310b-de5a-5eb6-a2a5-c1dee2bd17f9"
136137
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
137138
NLSolvers = "337daf1e-9722-11e9-073e-8b9effe078ba"
@@ -151,4 +152,4 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
151152
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
152153

153154
[targets]
154-
test = ["Aqua", "BandedMatrices", "BenchmarkTools", "CUDA", "Enzyme", "ExplicitImports", "FastLevenbergMarquardt", "FixedPointAcceleration", "Hwloc", "InteractiveUtils", "LeastSquaresOptim", "MINPACK", "ModelingToolkit", "NLSolvers", "NLsolve", "NaNMath", "NonlinearProblemLibrary", "OrdinaryDiffEqTsit5", "Pkg", "Random", "ReTestItems", "SIAMFANLEquations", "SpeedMapping", "StableRNGs", "StaticArrays", "Sundials", "Test", "Zygote"]
155+
test = ["Aqua", "BandedMatrices", "BenchmarkTools", "CUDA", "Enzyme", "ExplicitImports", "FastLevenbergMarquardt", "FixedPointAcceleration", "Hwloc", "InteractiveUtils", "LeastSquaresOptim", "LineSearches", "MINPACK", "ModelingToolkit", "NLSolvers", "NLsolve", "NaNMath", "NonlinearProblemLibrary", "OrdinaryDiffEqTsit5", "Pkg", "Random", "ReTestItems", "SIAMFANLEquations", "SpeedMapping", "StableRNGs", "StaticArrays", "Sundials", "Test", "Zygote"]

docs/src/native/solvers.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ documentation.
2323
algorithms, consult the
2424
[LinearSolve.jl documentation](https://docs.sciml.ai/LinearSolve/stable/).
2525
- `linesearch`: the line search algorithm to use. Defaults to [`NoLineSearch()`](@extref LineSearch.NoLineSearch),
26-
which means that no line search is performed. Algorithms from
27-
[`LineSearches.jl`](https://github.com/JuliaNLSolvers/LineSearches.jl/) must be
28-
wrapped in [`LineSearchesJL`](@ref) before being supplied. For a detailed documentation
29-
refer to [Line Search Algorithms](@ref line-search).
26+
which means that no line search is performed.
3027
- `autodiff`/`jacobian_ad`: etermines the backend used for the Jacobian. Note that this
3128
argument is ignored if an analytical Jacobian is passed, as that will be used instead.
3229
Defaults to `nothing` which means that a default is selected according to the problem

ext/NonlinearSolveNLsolveExt.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module NonlinearSolveNLsolveExt
22

3+
using LineSearches: Static
34
using NonlinearSolve: NonlinearSolve, NLsolveJL, TraceMinimal
45
using NLsolve: NLsolve, OnceDifferentiable, nlsolve
56
using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
@@ -31,9 +32,11 @@ function SciMLBase.__solve(
3132
store_trace = StT || alg.store_trace
3233
extended_trace = !(trace_level isa TraceMinimal) || alg.extended_trace
3334

35+
linesearch = alg.linesearch === missing ? Static() : alg.linesearch
36+
3437
original = nlsolve(df, vec(u0); ftol = abstol, iterations = maxiters, alg.method,
35-
store_trace, extended_trace, alg.linesearch, alg.linsolve,
36-
alg.factor, alg.autoscale, alg.m, alg.beta, show_trace)
38+
store_trace, extended_trace, linesearch, alg.linsolve, alg.factor,
39+
alg.autoscale, alg.m, alg.beta, show_trace)
3740

3841
f!(vec(resid), original.zero)
3942
u = prob.u0 isa Number ? original.zero[1] : reshape(original.zero, size(prob.u0))

src/NonlinearSolve.jl

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ using LinearAlgebra: LinearAlgebra, ColumnNorm, Diagonal, I, LowerTriangular, Sy
2323
UpperTriangular, axpy!, cond, diag, diagind, dot, issuccess, istril,
2424
istriu, lu, mul!, norm, pinv, tril!, triu!
2525
using LineSearch: LineSearch, AbstractLineSearchAlgorithm, AbstractLineSearchCache,
26-
NoLineSearch, RobustNonMonotoneLineSearch
27-
using LineSearches: LineSearches
26+
NoLineSearch, RobustNonMonotoneLineSearch, BackTracking
2827
using LinearSolve: LinearSolve, LUFactorization, QRFactorization,
2928
needs_concrete_A, AbstractFactorization,
3029
DefaultAlgorithmChoice, DefaultLinearSolver
@@ -174,9 +173,7 @@ export NewtonDescent, SteepestDescent, Dogleg, DampedNewtonDescent, GeodesicAcce
174173

175174
# Globalization
176175
## Line Search Algorithms
177-
export LineSearchesJL, LiFukushimaLineSearch # FIXME: deprecated. use LineSearch.jl directly
178-
export Static, HagerZhang, MoreThuente, StrongWolfe, BackTracking # FIXME: deprecated
179-
export LineSearch, NoLineSearch, RobustNonMonotoneLineSearch
176+
export LineSearch, BackTracking, NoLineSearch, RobustNonMonotoneLineSearch, LineSearchesJL
180177
## Trust Region Algorithms
181178
export RadiusUpdateSchemes
182179

src/algorithms/extension_algs.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,12 @@ end
203203
acceleration of the fixed-point iteration xₙ₊₁ = xₙ + beta*f(xₙ), where by default
204204
beta = 1.
205205
206+
!!! warning
207+
208+
Line Search Algorithms from [`LineSearch.jl`](https://github.com/SciML/LineSearch.jl)
209+
aren't supported by `NLsolveJL`. Instead, use the line search algorithms from
210+
[`LineSearches.jl`](https://github.com/JuliaNLSolvers/LineSearches.jl).
211+
206212
### Submethod Choice
207213
208214
Choices for methods in `NLsolveJL`:
@@ -234,7 +240,7 @@ For more information on these arguments, consult the
234240
end
235241

236242
function NLsolveJL(; method = :trust_region, autodiff = :central, store_trace = missing,
237-
extended_trace = missing, linesearch = LineSearches.Static(),
243+
extended_trace = missing, linesearch = missing,
238244
linsolve = (x, A, b) -> copyto!(x, A \ b), factor = 1.0,
239245
autoscale = true, m = 10, beta = one(Float64), show_trace = missing)
240246
if Base.get_extension(@__MODULE__, :NonlinearSolveNLsolveExt) === nothing

src/algorithms/klement.jl

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,6 @@ over this.
2727
function Klement(; max_resets::Int = 100, linsolve = nothing, alpha = nothing,
2828
linesearch = NoLineSearch(), precs = DEFAULT_PRECS,
2929
autodiff = nothing, init_jacobian::Val{IJ} = Val(:identity)) where {IJ}
30-
if !(linesearch isa AbstractLineSearchAlgorithm)
31-
Base.depwarn(
32-
"Passing in a `LineSearches.jl` algorithm directly is deprecated. \
33-
Please use `LineSearchesJL` instead.", :Klement)
34-
linesearch = LineSearchesJL(; method = linesearch)
35-
end
36-
3730
if IJ === :identity
3831
initialization = IdentityInitialization(alpha, DiagonalStructure())
3932
elseif IJ === :true_jacobian

src/core/approximate_jacobian.jl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,6 @@ function ApproximateJacobianSolveAlgorithm{concrete_jac, name}(;
5959
linesearch = missing, trustregion = missing, descent, update_rule,
6060
reinit_rule, initialization, max_resets::Int = typemax(Int),
6161
max_shrink_times::Int = typemax(Int)) where {concrete_jac, name}
62-
if linesearch !== missing && !(linesearch isa AbstractLineSearchAlgorithm)
63-
Base.depwarn("Passing in a `LineSearches.jl` algorithm directly is deprecated. \
64-
Please use `LineSearchesJL` instead.",
65-
:GeneralizedFirstOrderAlgorithm)
66-
linesearch = LineSearchesJL(; method = linesearch)
67-
end
6862
return ApproximateJacobianSolveAlgorithm{concrete_jac, name}(
6963
linesearch, trustregion, descent, update_rule,
7064
reinit_rule, max_resets, max_shrink_times, initialization)

src/core/generalized_first_order.jl

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,6 @@ function GeneralizedFirstOrderAlgorithm{concrete_jac, name}(;
6666
jacobian_ad !== nothing && ADTypes.mode(jacobian_ad) isa ADTypes.ReverseMode,
6767
jacobian_ad, nothing))
6868

69-
if linesearch !== missing && !(linesearch isa AbstractLineSearchAlgorithm)
70-
Base.depwarn("Passing in a `LineSearches.jl` algorithm directly is deprecated. \
71-
Please use `LineSearchesJL` instead.",
72-
:GeneralizedFirstOrderAlgorithm)
73-
linesearch = LineSearchesJL(; method = linesearch)
74-
end
75-
7669
return GeneralizedFirstOrderAlgorithm{concrete_jac, name}(
7770
linesearch, trustregion, descent, max_shrink_times,
7871
jacobian_ad, forward_ad, reverse_ad)

src/default.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ function RobustMultiNewton(::Type{T} = Float64; concrete_jac = nothing, linsolve
364364
radius_update_scheme = RadiusUpdateSchemes.Bastin),
365365
NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
366366
NewtonRaphson(; concrete_jac, linsolve, precs,
367-
linesearch = LineSearch.BackTracking(), autodiff),
367+
linesearch = BackTracking(), autodiff),
368368
TrustRegion(; concrete_jac, linsolve, precs,
369369
radius_update_scheme = RadiusUpdateSchemes.NLsolve, autodiff),
370370
TrustRegion(; concrete_jac, linsolve, precs,
@@ -405,7 +405,7 @@ function FastShortcutNonlinearPolyalg(
405405
else
406406
algs = (NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
407407
NewtonRaphson(; concrete_jac, linsolve, precs,
408-
linesearch = LineSearch.BackTracking(), autodiff),
408+
linesearch = BackTracking(), autodiff),
409409
TrustRegion(; concrete_jac, linsolve, precs, autodiff),
410410
TrustRegion(; concrete_jac, linsolve, precs,
411411
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff))
@@ -426,7 +426,7 @@ function FastShortcutNonlinearPolyalg(
426426
SimpleKlement(),
427427
NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
428428
NewtonRaphson(; concrete_jac, linsolve, precs,
429-
linesearch = LineSearch.BackTracking(), autodiff),
429+
linesearch = BackTracking(), autodiff),
430430
TrustRegion(; concrete_jac, linsolve, precs,
431431
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff))
432432
end
@@ -445,7 +445,7 @@ function FastShortcutNonlinearPolyalg(
445445
Klement(; linsolve, precs, autodiff),
446446
NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
447447
NewtonRaphson(; concrete_jac, linsolve, precs,
448-
linesearch = LineSearch.BackTracking(), autodiff),
448+
linesearch = BackTracking(), autodiff),
449449
TrustRegion(; concrete_jac, linsolve, precs, autodiff),
450450
TrustRegion(; concrete_jac, linsolve, precs,
451451
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff))
@@ -481,7 +481,7 @@ function FastShortcutNLLSPolyalg(
481481
linsolve, precs, disable_geodesic = Val(true), autodiff, kwargs...),
482482
TrustRegion(; concrete_jac, linsolve, precs, autodiff, kwargs...),
483483
GaussNewton(; concrete_jac, linsolve, precs,
484-
linesearch = LineSearch.BackTracking(), autodiff, kwargs...),
484+
linesearch = BackTracking(), autodiff, kwargs...),
485485
TrustRegion(; concrete_jac, linsolve, precs,
486486
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff, kwargs...),
487487
LevenbergMarquardt(; linsolve, precs, autodiff, kwargs...))

src/globalization/line_search.jl

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,3 @@
1-
LineSearchesJL(method; kwargs...) = LineSearchesJL(; method, kwargs...)
2-
function LineSearchesJL(; method = LineSearches.Static(), autodiff = nothing, α = true)
3-
Base.depwarn("`LineSearchesJL(...)` is deprecated. Please use `LineSearchesJL` from \
4-
LineSearch.jl instead.",
5-
:LineSearchesJL)
6-
7-
# Prevent breaking old code
8-
method isa LineSearch.LineSearchesJL &&
9-
return LineSearch.LineSearchesJL(method.method, α, autodiff)
10-
method isa AbstractLineSearchAlgorithm && return method
11-
return LineSearch.LineSearchesJL(method, α, autodiff)
12-
end
13-
14-
for alg in (:Static, :HagerZhang, :MoreThuente, :BackTracking, :StrongWolfe)
15-
depmsg = "`$(alg)(args...; kwargs...)` is deprecated. Please use `LineSearchesJL(; \
16-
method = $(alg)(args...; kwargs...))` instead."
17-
@eval function $(alg)(args...; autodiff = nothing, initial_alpha = true, kwargs...)
18-
Base.depwarn($(depmsg), $(Meta.quot(alg)))
19-
return LineSearch.LineSearchesJL(;
20-
method = LineSearches.$(alg)(args...; kwargs...), autodiff, initial_alpha)
21-
end
22-
end
23-
24-
Base.@deprecate LiFukushimaLineSearch(; nan_max_iter::Int = 5, kwargs...) LineSearch.LiFukushimaLineSearch(;
25-
nan_maxiters = nan_max_iter, kwargs...)
26-
271
function callback_into_cache!(topcache, cache::AbstractLineSearchCache, args...)
282
LineSearch.callback_into_cache!(cache, get_fu(topcache))
293
end

0 commit comments

Comments
 (0)