Skip to content

Commit b845c57

Browse files
committed
Shift from Symbols to Enum for Retcode
1 parent 72d38ee commit b845c57

File tree

6 files changed

+30
-22
lines changed

6 files changed

+30
-22
lines changed

src/bisection.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function perform_step(solver::BracketingImmutableSolver, alg::Bisection, cache)
3333

3434
if left == mid || right == mid
3535
@set! solver.force_stop = true
36-
@set! solver.retcode = :FloatingPointLimit
36+
@set! solver.retcode = FLOATING_POINT_LIMIT
3737
return solver
3838
end
3939

src/falsi.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function perform_step(solver, alg::Falsi, cache)
2020

2121
if right == mid || right == mid
2222
@set! solver.force_stop = true
23-
@set! solver.retcode = :FloatingPointLimit
23+
@set! solver.retcode = FLOATING_POINT_LIMIT
2424
return solver
2525
end
2626

@@ -31,7 +31,7 @@ function perform_step(solver, alg::Falsi, cache)
3131
@set! solver.force_stop = true
3232
@set! solver.left = mid
3333
@set! solver.fl = fm
34-
@set! solver.retcode = :ExactSolutionAtLeft
34+
@set! solver.retcode = EXACT_SOLUTION_LEFT
3535
else
3636
if sign(fm) == sign(fl)
3737
@set! solver.left = mid

src/scalar.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ function DiffEqBase.solve(prob::NonlinearProblem{<:Number}, ::NewtonRaphson, arg
88
xo = oftype(x, Inf)
99
for i in 1:maxiters
1010
fx, dfx = value_derivative(f, x)
11-
iszero(fx) && return NewtonSolution(x, :Default)
11+
iszero(fx) && return NewtonSolution(x, DEFAULT)
1212
Δx = dfx \ fx
1313
x -= Δx
1414
if isapprox(x, xo, atol=atol, rtol=rtol)
15-
return NewtonSolution(x, :Default)
15+
return NewtonSolution(x, DEFAULT)
1616
end
1717
xo = x
1818
end
19-
return NewtonSolution(x, :MaxitersExceeded)
19+
return NewtonSolution(x, MAXITERS_EXCEED)
2020
end
2121

2222
function DiffEqBase.solve(prob::NonlinearProblem, ::Bisection, args...; maxiters = 1000, kwargs...)
@@ -25,14 +25,14 @@ function DiffEqBase.solve(prob::NonlinearProblem, ::Bisection, args...; maxiters
2525
fl, fr = f(left), f(right)
2626

2727
if iszero(fl)
28-
return BracketingSolution(left, right, :ExactSolutionAtLeft)
28+
return BracketingSolution(left, right, EXACT_SOLUTION_LEFT)
2929
end
3030

3131
i = 1
3232
if !iszero(fr)
3333
while i < maxiters
3434
mid = (left + right) / 2
35-
(mid == left || mid == right) && return BracketingSolution(left, right, :FloatingPointLimit)
35+
(mid == left || mid == right) && return BracketingSolution(left, right, FLOATING_POINT_LIMIT)
3636
fm = f(mid)
3737
if iszero(fm)
3838
right = mid
@@ -51,7 +51,7 @@ function DiffEqBase.solve(prob::NonlinearProblem, ::Bisection, args...; maxiters
5151

5252
while i < maxiters
5353
mid = (left + right) / 2
54-
(mid == left || mid == right) && return BracketingSolution(left, right, :FloatingPointLimit)
54+
(mid == left || mid == right) && return BracketingSolution(left, right, FLOATING_POINT_LIMIT)
5555
fm = f(mid)
5656
if iszero(fm)
5757
right = mid
@@ -63,5 +63,5 @@ function DiffEqBase.solve(prob::NonlinearProblem, ::Bisection, args...; maxiters
6363
i += 1
6464
end
6565

66-
return BracketingSolution(left, right, :MaxitersExceeded)
66+
return BracketingSolution(left, right, MAXITERS_EXCEED)
6767
end

src/solve.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ function DiffEqBase.init(prob::NonlinearProblem{uType, iip}, alg::AbstractBracke
3030
fl = f(left, p)
3131
fr = f(right, p)
3232
cache = alg_cache(alg, left, right,p, Val(iip))
33-
return BracketingImmutableSolver(1, f, alg, left, right, fl, fr, p, false, maxiters, :Default, cache, iip)
33+
return BracketingImmutableSolver(1, f, alg, left, right, fl, fr, p, false, maxiters, DEFAULT, cache, iip)
3434
end
3535

3636
function DiffEqBase.init(prob::NonlinearProblem{uType, iip}, alg::AbstractNewtonAlgorithm, args...;
@@ -55,7 +55,7 @@ function DiffEqBase.init(prob::NonlinearProblem{uType, iip}, alg::AbstractNewton
5555
fu = f(u, p)
5656
end
5757
cache = alg_cache(alg, f, u, p, Val(iip))
58-
return NewtonImmutableSolver(1, f, alg, u, fu, p, false, maxiters, internalnorm, :Default, tol, cache, iip)
58+
return NewtonImmutableSolver(1, f, alg, u, fu, p, false, maxiters, internalnorm, DEFAULT, tol, cache, iip)
5959
end
6060

6161
function DiffEqBase.solve!(solver::AbstractImmutableNonlinearSolver)
@@ -65,7 +65,7 @@ function DiffEqBase.solve!(solver::AbstractImmutableNonlinearSolver)
6565
@set! solver.iter += 1
6666
end
6767
if solver.iter == solver.maxiters
68-
@set! solver.retcode = :MaxitersExceeded
68+
@set! solver.retcode = MAXITERS_EXCEED
6969
end
7070
sol = get_solution(solver)
7171
return sol
@@ -84,10 +84,10 @@ function mic_check(solver::BracketingImmutableSolver)
8484
(flr > fzero) && error("Non bracketing interval passed in bracketing method.")
8585
if fl == fzero
8686
@set! solver.force_stop = true
87-
@set! solver.retcode = :ExactSolutionAtLeft
87+
@set! solver.retcode = EXACT_SOLUTION_LEFT
8888
elseif fr == fzero
8989
@set! solver.force_stop = true
90-
@set! solver.retcode = :ExactSolutionAtRight
90+
@set! solver.retcode = EXACT_SOLUTION_RIGHT
9191
end
9292
solver
9393
end

src/types.jl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
@enum Retcode::Int begin
2+
DEFAULT
3+
EXACT_SOLUTION_LEFT
4+
EXACT_SOLUTION_RIGHT
5+
MAXITERS_EXCEED
6+
FLOATING_POINT_LIMIT
7+
end
8+
19
struct BracketingImmutableSolver{fType, algType, uType, resType, pType, cacheType} <: AbstractImmutableNonlinearSolver
210
iter::Int
311
f::fType
@@ -9,7 +17,7 @@ struct BracketingImmutableSolver{fType, algType, uType, resType, pType, cacheTyp
917
p::pType
1018
force_stop::Bool
1119
maxiters::Int
12-
retcode::Symbol
20+
retcode::Retcode
1321
cache::cacheType
1422
iip::Bool
1523
end
@@ -29,7 +37,7 @@ struct NewtonImmutableSolver{fType, algType, uType, resType, pType, INType, tolT
2937
force_stop::Bool
3038
maxiters::Int
3139
internalnorm::INType
32-
retcode::Symbol
40+
retcode::Retcode
3341
tol::tolType
3442
cache::cacheType
3543
iip::Bool
@@ -43,12 +51,12 @@ end
4351
struct BracketingSolution{uType}
4452
left::uType
4553
right::uType
46-
retcode::Symbol
54+
retcode::Retcode
4755
end
4856

4957
struct NewtonSolution{uType}
5058
u::uType
51-
retcode::Symbol
59+
retcode::Retcode
5260
end
5361

5462
function sync_residuals!(solver::BracketingImmutableSolver)

test/runtests.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ end
2323
f, u0 = (u,p) -> u .* u .- 2, @SVector[1.0, 1.0]
2424
sf, su0 = (u,p) -> u * u - 2, 1.0
2525
sol = benchmark_immutable(f, u0)
26-
@test sol.retcode === :Default
26+
@test sol.retcode === NonlinearSolve.DEFAULT
2727
@test all(sol.u .* sol.u .- 2 .< 1e-9)
2828
sol = benchmark_mutable(f, u0)
29-
@test sol.retcode === :Default
29+
@test sol.retcode === NonlinearSolve.DEFAULT
3030
@test all(sol.u .* sol.u .- 2 .< 1e-9)
3131
sol = benchmark_scalar(sf, su0)
32-
@test sol.retcode === :Default
32+
@test sol.retcode === NonlinearSolve.DEFAULT
3333
@test sol.u * sol.u - 2 < 1e-9
3434

3535
@test (@ballocated benchmark_immutable($f, $u0)) == 0

0 commit comments

Comments
 (0)