Skip to content
This repository was archived by the owner on Apr 16, 2025. It is now read-only.

Commit 2d21b01

Browse files
committed
Precompile in extensions
1 parent 7649c80 commit 2d21b01

File tree

4 files changed

+62
-11
lines changed

4 files changed

+62
-11
lines changed

ext/SimpleNonlinearSolveDiffResultsForwardDiffExt/SimpleNonlinearSolveDiffResultsForwardDiffExt.jl

+30
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module SimpleNonlinearSolveDiffResultsForwardDiffExt
22

3+
import PrecompileTools: @compile_workload, @setup_workload
4+
35
import ADTypes: AutoForwardDiff, AutoPolyesterForwardDiff
46
import ArrayInterface, SciMLBase, SimpleNonlinearSolve, DiffResults, ForwardDiff
57
import FastClosures: @closure
@@ -23,4 +25,32 @@ include("jacobian.jl")
2325
include("hessian.jl")
2426
include("forward_ad.jl")
2527

28+
@setup_workload begin
29+
for T in (Float32, Float64)
30+
prob_no_brack_scalar = NonlinearProblem{false}((u, p) -> u .* u .- p, T(0.1), T(2))
31+
prob_no_brack_iip = NonlinearProblem{true}((du, u, p) -> du .= u .* u .- p,
32+
T.([1.0, 1.0, 1.0]), T(2))
33+
prob_no_brack_oop = NonlinearProblem{false}((u, p) -> u .* u .- p,
34+
T.([1.0, 1.0, 1.0]), T(2))
35+
36+
algs = [SimpleNonlinearSolve.SimpleNewtonRaphson(; autodiff = AutoForwardDiff()),
37+
SimpleNonlinearSolve.SimpleTrustRegion(; autodiff = AutoForwardDiff())]
38+
39+
algs_no_iip = [SimpleNonlinearSolve.SimpleHalley(; autodiff = AutoForwardDiff())]
40+
41+
@compile_workload begin
42+
for alg in algs
43+
solve(prob_no_brack_scalar, alg, abstol = T(1e-2))
44+
solve(prob_no_brack_iip, alg, abstol = T(1e-2))
45+
solve(prob_no_brack_oop, alg, abstol = T(1e-2))
46+
end
47+
48+
for alg in algs_no_iip
49+
solve(prob_no_brack_scalar, alg, abstol = T(1e-2))
50+
solve(prob_no_brack_oop, alg, abstol = T(1e-2))
51+
end
52+
end
53+
end
54+
end
55+
2656
end

ext/SimpleNonlinearSolveDiffResultsForwardDiffExt/jacobian.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,4 @@ function SimpleNonlinearSolve.__value_and_jacobian!(
9292
end
9393
out = f(ForwardDiff.Dual{T}(x, one(x)))
9494
return ForwardDiff.value(out), ForwardDiff.extract_derivative(T, out)
95-
end
95+
end

ext/SimpleNonlinearSolveFiniteDiffExt.jl

+31
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
module SimpleNonlinearSolveFiniteDiffExt
22

3+
import PrecompileTools: @compile_workload, @setup_workload
4+
35
import ADTypes: AutoFiniteDiff
46
import SciMLBase, SimpleNonlinearSolve, FiniteDiff
7+
import SciMLBase: NonlinearProblem, NonlinearLeastSquaresProblem, solve
58
import StaticArraysCore: SArray
69

710
@inline SimpleNonlinearSolve.__is_extension_loaded(::Val{:FiniteDiff}) = true
@@ -56,4 +59,32 @@ function SimpleNonlinearSolve.compute_jacobian_and_hessian(
5659
end
5760
end
5861

62+
@setup_workload begin
63+
for T in (Float32, Float64)
64+
prob_no_brack_scalar = NonlinearProblem{false}((u, p) -> u .* u .- p, T(0.1), T(2))
65+
prob_no_brack_iip = NonlinearProblem{true}((du, u, p) -> du .= u .* u .- p,
66+
T.([1.0, 1.0, 1.0]), T(2))
67+
prob_no_brack_oop = NonlinearProblem{false}((u, p) -> u .* u .- p,
68+
T.([1.0, 1.0, 1.0]), T(2))
69+
70+
algs = [SimpleNonlinearSolve.SimpleNewtonRaphson(; autodiff = AutoFiniteDiff()),
71+
SimpleNonlinearSolve.SimpleTrustRegion(; autodiff = AutoFiniteDiff())]
72+
73+
algs_no_iip = [SimpleNonlinearSolve.SimpleHalley(; autodiff = AutoFiniteDiff())]
74+
75+
@compile_workload begin
76+
for alg in algs
77+
solve(prob_no_brack_scalar, alg, abstol = T(1e-2))
78+
solve(prob_no_brack_iip, alg, abstol = T(1e-2))
79+
solve(prob_no_brack_oop, alg, abstol = T(1e-2))
80+
end
81+
82+
for alg in algs_no_iip
83+
solve(prob_no_brack_scalar, alg, abstol = T(1e-2))
84+
solve(prob_no_brack_oop, alg, abstol = T(1e-2))
85+
end
86+
end
87+
end
88+
end
89+
5990
end

src/SimpleNonlinearSolve.jl

-10
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ end
8686

8787
@setup_workload begin
8888
for T in (Float32, Float64)
89-
# FIXME Move this precompilation into the forwarddiff & finitediff extensions
9089
prob_no_brack_scalar = NonlinearProblem{false}((u, p) -> u .* u .- p, T(0.1), T(2))
9190
prob_no_brack_iip = NonlinearProblem{true}((du, u, p) -> du .= u .* u .- p,
9291
T.([1.0, 1.0, 1.0]), T(2))
@@ -96,21 +95,12 @@ end
9695
algs = [SimpleBroyden(), SimpleKlement(), SimpleDFSane(),
9796
SimpleLimitedMemoryBroyden(; threshold = 2)]
9897

99-
# algs = [SimpleNewtonRaphson(), SimpleTrustRegion()]
100-
101-
# algs_no_iip = [SimpleHalley()]
102-
10398
@compile_workload begin
10499
for alg in algs
105100
solve(prob_no_brack_scalar, alg, abstol = T(1e-2))
106101
solve(prob_no_brack_iip, alg, abstol = T(1e-2))
107102
solve(prob_no_brack_oop, alg, abstol = T(1e-2))
108103
end
109-
110-
# for alg in algs_no_iip
111-
# solve(prob_no_brack_scalar, alg, abstol = T(1e-2))
112-
# solve(prob_no_brack_oop, alg, abstol = T(1e-2))
113-
# end
114104
end
115105

116106
prob_brack = IntervalNonlinearProblem{false}((u, p) -> u * u - p,

0 commit comments

Comments
 (0)