Skip to content

Commit dea31f3

Browse files
Merge pull request #74 from SciML/format
Format SciML Style
2 parents afbd81f + edae91d commit dea31f3

14 files changed

+816
-727
lines changed

.JuliaFormatter.toml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
style = "sciml"

.github/workflows/FormatCheck.yml

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: format-check
2+
3+
on:
4+
push:
5+
branches:
6+
- 'master'
7+
- 'release-'
8+
tags: '*'
9+
pull_request:
10+
11+
jobs:
12+
build:
13+
runs-on: ${{ matrix.os }}
14+
strategy:
15+
matrix:
16+
julia-version: [1]
17+
julia-arch: [x86]
18+
os: [ubuntu-latest]
19+
steps:
20+
- uses: julia-actions/setup-julia@latest
21+
with:
22+
version: ${{ matrix.julia-version }}
23+
24+
- uses: actions/checkout@v1
25+
- name: Install JuliaFormatter and format
26+
# This will use the latest version by default but you can set the version like so:
27+
#
28+
# julia -e 'using Pkg; Pkg.add(PackageSpec(name="JuliaFormatter", version="0.13.0"))'
29+
run: |
30+
julia -e 'using Pkg; Pkg.add(PackageSpec(name="JuliaFormatter"))'
31+
julia -e 'using JuliaFormatter; format(".", verbose=true)'
32+
- name: Format check
33+
run: |
34+
julia -e '
35+
out = Cmd(`git diff --name-only`) |> read |> String
36+
if out == ""
37+
exit(0)
38+
else
39+
@error "Some files have not been formatted !!!"
40+
write(stdout, out)
41+
exit(1)
42+
end'

docs/make.jl

+10-14
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@ using Documenter, NonlinearSolve
22

33
include("pages.jl")
44

5-
makedocs(
6-
sitename="NonlinearSolve.jl",
7-
authors="Chris Rackauckas",
8-
modules=[NonlinearSolve,NonlinearSolve.SciMLBase],
9-
clean=true,doctest=false,
10-
format = Documenter.HTML(analytics = "UA-90474609-3",
11-
assets = ["assets/favicon.ico"],
12-
canonical="https://nonlinearsolve.sciml.ai/stable/"),
13-
pages=pages
14-
)
5+
makedocs(sitename = "NonlinearSolve.jl",
6+
authors = "Chris Rackauckas",
7+
modules = [NonlinearSolve, NonlinearSolve.SciMLBase],
8+
clean = true, doctest = false,
9+
format = Documenter.HTML(analytics = "UA-90474609-3",
10+
assets = ["assets/favicon.ico"],
11+
canonical = "https://nonlinearsolve.sciml.ai/stable/"),
12+
pages = pages)
1513

16-
deploydocs(
17-
repo = "github.com/SciML/NonlinearSolve.jl.git";
18-
push_preview = true
19-
)
14+
deploydocs(repo = "github.com/SciML/NonlinearSolve.jl.git";
15+
push_preview = true)

docs/pages.jl

+9-15
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
# Put in a separate page so it can be used by SciMLDocs.jl
22

3-
pages=[
3+
pages = [
44
"Home" => "index.md",
5-
"Tutorials" => Any[
6-
"tutorials/nonlinear.md",
7-
"tutorials/iterator_interface.md"
8-
],
9-
"Basics" => Any[
10-
"basics/NonlinearProblem.md",
11-
"basics/NonlinearFunctions.md",
12-
"basics/FAQ.md"
13-
],
14-
"Solvers" => Any[
15-
"solvers/NonlinearSystemSolvers.md",
16-
"solvers/BracketingSolvers.md"
17-
]
18-
]
5+
"Tutorials" => Any["tutorials/nonlinear.md",
6+
"tutorials/iterator_interface.md"],
7+
"Basics" => Any["basics/NonlinearProblem.md",
8+
"basics/NonlinearFunctions.md",
9+
"basics/FAQ.md"],
10+
"Solvers" => Any["solvers/NonlinearSystemSolvers.md",
11+
"solvers/BracketingSolvers.md"],
12+
]

src/NonlinearSolve.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import RecursiveFactorization
1616

1717
abstract type AbstractNonlinearSolveAlgorithm <: SciMLBase.AbstractNonlinearAlgorithm end
1818
abstract type AbstractBracketingAlgorithm <: AbstractNonlinearSolveAlgorithm end
19-
abstract type AbstractNewtonAlgorithm{CS,AD} <: AbstractNonlinearSolveAlgorithm end
19+
abstract type AbstractNewtonAlgorithm{CS, AD} <: AbstractNonlinearSolveAlgorithm end
2020
abstract type AbstractImmutableNonlinearSolver <: AbstractNonlinearSolveAlgorithm end
2121

2222
include("utils.jl")

src/bisection.jl

+96-94
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,116 @@
11
struct Bisection <: AbstractBracketingAlgorithm
2-
exact_left::Bool
3-
exact_right::Bool
2+
exact_left::Bool
3+
exact_right::Bool
44
end
55

6-
function Bisection(;exact_left=false, exact_right=false)
7-
Bisection(exact_left, exact_right)
6+
function Bisection(; exact_left = false, exact_right = false)
7+
Bisection(exact_left, exact_right)
88
end
99

1010
struct BisectionCache{uType}
11-
state::Int
12-
left::uType
13-
right::uType
11+
state::Int
12+
left::uType
13+
right::uType
1414
end
1515

1616
function alg_cache(alg::Bisection, left, right, p, ::Val{true})
17-
BisectionCache(0, left, right)
17+
BisectionCache(0, left, right)
1818
end
1919

2020
function alg_cache(alg::Bisection, left, right, p, ::Val{false})
21-
BisectionCache(0, left, right)
21+
BisectionCache(0, left, right)
2222
end
2323

2424
function perform_step(solver::BracketingImmutableSolver, alg::Bisection, cache)
25-
@unpack f, p, left, right, fl, fr, cache = solver
26-
27-
if cache.state == 0
28-
fzero = zero(fl)
29-
fl * fr > fzero && error("Bracket became non-containing in between iterations. This could mean that "
30-
* "input function crosses the x axis multiple times. Bisection is not the right method to solve this.")
31-
32-
mid = (left + right) / 2
33-
34-
if left == mid || right == mid
35-
@set! solver.force_stop = true
36-
@set! solver.retcode = FLOATING_POINT_LIMIT
37-
return solver
38-
end
39-
40-
fm = f(mid, p)
41-
42-
if iszero(fm)
43-
if alg.exact_left
44-
@set! cache.state = 1
45-
@set! cache.right = mid
46-
@set! cache.left = mid
47-
@set! solver.cache = cache
48-
elseif alg.exact_right
49-
@set! solver.left = prevfloat_tdir(mid, left, right)
50-
solver = sync_residuals!(solver)
51-
@set! cache.state = 2
52-
@set! cache.left = mid
53-
@set! solver.cache = cache
54-
else
55-
@set! solver.left = prevfloat_tdir(mid, left, right)
56-
@set! solver.right = nextfloat_tdir(mid, left, right)
57-
solver = sync_residuals!(solver)
58-
@set! solver.force_stop = true
59-
return solver
60-
end
61-
else
62-
if sign(fm) == sign(fl)
63-
@set! solver.left = mid
64-
@set! solver.fl = fm
65-
else
66-
@set! solver.right = mid
67-
@set! solver.fr = fm
68-
end
69-
end
70-
elseif cache.state == 1
71-
mid = (left + cache.right) / 2
72-
73-
if cache.right == mid || left == mid
74-
if alg.exact_right
75-
@set! cache.state = 2
76-
@set! solver.cache = cache
77-
return solver
78-
else
79-
@set! solver.right = nextfloat_tdir(mid, left, right)
80-
solver = sync_residuals!(solver)
81-
@set! solver.force_stop = true
82-
return solver
83-
end
84-
end
85-
86-
fm = f(mid, p)
25+
@unpack f, p, left, right, fl, fr, cache = solver
8726

88-
if iszero(fm)
89-
@set! cache.right = mid
90-
@set! solver.cache = cache
91-
else
92-
@set! solver.left = mid
93-
@set! solver.fl = fm
94-
end
95-
else
96-
mid = (cache.left + right) / 2
97-
98-
if right == mid || cache.left == mid
99-
@set! solver.force_stop = true
100-
return solver
101-
end
102-
103-
fm = f(mid, p)
27+
if cache.state == 0
28+
fzero = zero(fl)
29+
fl * fr > fzero &&
30+
error("Bracket became non-containing in between iterations. This could mean that "
31+
*
32+
"input function crosses the x axis multiple times. Bisection is not the right method to solve this.")
33+
34+
mid = (left + right) / 2
10435

105-
if iszero(fm)
106-
@set! cache.left = mid
107-
@set! solver.cache = cache
36+
if left == mid || right == mid
37+
@set! solver.force_stop = true
38+
@set! solver.retcode = FLOATING_POINT_LIMIT
39+
return solver
40+
end
41+
42+
fm = f(mid, p)
43+
44+
if iszero(fm)
45+
if alg.exact_left
46+
@set! cache.state = 1
47+
@set! cache.right = mid
48+
@set! cache.left = mid
49+
@set! solver.cache = cache
50+
elseif alg.exact_right
51+
@set! solver.left = prevfloat_tdir(mid, left, right)
52+
solver = sync_residuals!(solver)
53+
@set! cache.state = 2
54+
@set! cache.left = mid
55+
@set! solver.cache = cache
56+
else
57+
@set! solver.left = prevfloat_tdir(mid, left, right)
58+
@set! solver.right = nextfloat_tdir(mid, left, right)
59+
solver = sync_residuals!(solver)
60+
@set! solver.force_stop = true
61+
return solver
62+
end
63+
else
64+
if sign(fm) == sign(fl)
65+
@set! solver.left = mid
66+
@set! solver.fl = fm
67+
else
68+
@set! solver.right = mid
69+
@set! solver.fr = fm
70+
end
71+
end
72+
elseif cache.state == 1
73+
mid = (left + cache.right) / 2
74+
75+
if cache.right == mid || left == mid
76+
if alg.exact_right
77+
@set! cache.state = 2
78+
@set! solver.cache = cache
79+
return solver
80+
else
81+
@set! solver.right = nextfloat_tdir(mid, left, right)
82+
solver = sync_residuals!(solver)
83+
@set! solver.force_stop = true
84+
return solver
85+
end
86+
end
87+
88+
fm = f(mid, p)
89+
90+
if iszero(fm)
91+
@set! cache.right = mid
92+
@set! solver.cache = cache
93+
else
94+
@set! solver.left = mid
95+
@set! solver.fl = fm
96+
end
10897
else
109-
@set! solver.right = mid
110-
@set! solver.fr = fm
98+
mid = (cache.left + right) / 2
99+
100+
if right == mid || cache.left == mid
101+
@set! solver.force_stop = true
102+
return solver
103+
end
104+
105+
fm = f(mid, p)
106+
107+
if iszero(fm)
108+
@set! cache.left = mid
109+
@set! solver.cache = cache
110+
else
111+
@set! solver.right = mid
112+
@set! solver.fr = fm
113+
end
111114
end
112-
end
113-
solver
115+
solver
114116
end

0 commit comments

Comments
 (0)