1
- # Define Algorithms extended via extensions
1
+ # This file only include the algorithm struct to be exported by LinearSolve.jl. The main
2
+ # functionality is implemented as package extensions
2
3
"""
3
- LSOptimSolver (alg = :lm; linsolve = nothing, autodiff::Symbol = :central)
4
+ LeastSquaresOptimJL (alg = :lm; linsolve = nothing, autodiff::Symbol = :central)
4
5
5
- Wrapper over [LeastSquaresOptim.jl](https://github.com/matthieugomez/LeastSquaresOptim.jl) for solving
6
- `NonlinearLeastSquaresProblem`.
6
+ Wrapper over [LeastSquaresOptim.jl](https://github.com/matthieugomez/LeastSquaresOptim.jl)
7
+ for solving `NonlinearLeastSquaresProblem`.
7
8
8
9
## Arguments:
9
10
@@ -16,25 +17,24 @@ Wrapper over [LeastSquaresOptim.jl](https://github.com/matthieugomez/LeastSquare
16
17
!!! note
17
18
This algorithm is only available if `LeastSquaresOptim.jl` is installed.
18
19
"""
19
- struct LSOptimSolver {alg, linsolve} <: AbstractNonlinearSolveAlgorithm
20
+ struct LeastSquaresOptimJL {alg, linsolve} <: AbstractNonlinearSolveAlgorithm
20
21
autodiff:: Symbol
21
22
end
22
23
23
- function LSOptimSolver (alg = :lm ; linsolve = nothing , autodiff:: Symbol = :central )
24
+ function LeastSquaresOptimJL (alg = :lm ; linsolve = nothing , autodiff:: Symbol = :central )
24
25
@assert alg in (:lm , :dogleg )
25
26
@assert linsolve === nothing || linsolve in (:qr , :cholesky , :lsmr )
26
27
@assert autodiff in (:central , :forward )
27
28
28
- if ! extension_loaded (Val (:LeastSquaresOptim ))
29
- @warn " LeastSquaresOptim.jl is not loaded! It needs to be explicitly loaded \
30
- before `solve(prob, LSOptimSolver())` is called."
29
+ if Base. get_extension (@__MODULE__ , :NonlinearSolveLeastSquaresOptimExt ) === nothing
30
+ error (" LeastSquaresOptimJL requires LeastSquaresOptim.jl to be loaded" )
31
31
end
32
32
33
- return LSOptimSolver {alg, linsolve} (autodiff)
33
+ return LeastSquaresOptimJL {alg, linsolve} (autodiff)
34
34
end
35
35
36
36
"""
37
- FastLevenbergMarquardtSolver (linsolve = :cholesky)
37
+ FastLevenbergMarquardtJL (linsolve = :cholesky)
38
38
39
39
Wrapper over [FastLevenbergMarquardt.jl](https://github.com/kamesy/FastLevenbergMarquardt.jl) for solving
40
40
`NonlinearLeastSquaresProblem`.
@@ -53,7 +53,7 @@ Wrapper over [FastLevenbergMarquardt.jl](https://github.com/kamesy/FastLevenberg
53
53
!!! note
54
54
This algorithm is only available if `FastLevenbergMarquardt.jl` is installed.
55
55
"""
56
- @concrete struct FastLevenbergMarquardtSolver {linsolve} <: AbstractNonlinearSolveAlgorithm
56
+ @concrete struct FastLevenbergMarquardtJL {linsolve} <: AbstractNonlinearSolveAlgorithm
57
57
factor
58
58
factoraccept
59
59
factorreject
@@ -64,17 +64,16 @@ Wrapper over [FastLevenbergMarquardt.jl](https://github.com/kamesy/FastLevenberg
64
64
maxfactor
65
65
end
66
66
67
- function FastLevenbergMarquardtSolver (linsolve:: Symbol = :cholesky ; factor = 1e-6 ,
67
+ function FastLevenbergMarquardtJL (linsolve:: Symbol = :cholesky ; factor = 1e-6 ,
68
68
factoraccept = 13.0 , factorreject = 3.0 , factorupdate = :marquardt ,
69
69
minscale = 1e-12 , maxscale = 1e16 , minfactor = 1e-28 , maxfactor = 1e32 )
70
70
@assert linsolve in (:qr , :cholesky )
71
71
@assert factorupdate in (:marquardt , :nielson )
72
72
73
- if ! extension_loaded (Val (:FastLevenbergMarquardt ))
74
- @warn " FastLevenbergMarquardt.jl is not loaded! It needs to be explicitly loaded \
75
- before `solve(prob, FastLevenbergMarquardtSolver())` is called."
73
+ if Base. get_extension (@__MODULE__ , :NonlinearSolveFastLevenbergMarquardtExt ) === nothing
74
+ error (" LeastSquaresOptimJL requires FastLevenbergMarquardt.jl to be loaded" )
76
75
end
77
76
78
- return FastLevenbergMarquardtSolver {linsolve} (factor, factoraccept, factorreject,
77
+ return FastLevenbergMarquardtJL {linsolve} (factor, factoraccept, factorreject,
79
78
factorupdate, minscale, maxscale, minfactor, maxfactor)
80
79
end
0 commit comments