Skip to content

Commit 60e202e

Browse files
Merge pull request #3541 from vyudu/drop_functionexpr
fix: don't call eval'd XFunctions in the tests
2 parents d54449d + be7b8d8 commit 60e202e

File tree

4 files changed

+48
-57
lines changed

4 files changed

+48
-57
lines changed

test/discrete_system.jl

+10-15
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,16 @@ eqs = [S ~ S(k - 1) - infection * h,
3434
syss = structural_simplify(sys)
3535
@test syss == syss
3636

37-
for df in [
38-
DiscreteFunction(syss),
39-
eval(DiscreteFunctionExpr(syss))
40-
]
41-
42-
# iip
43-
du = zeros(3)
44-
u = collect(1:3)
45-
p = MTKParameters(syss, [c, nsteps, δt, β, γ] .=> collect(1:5))
46-
df.f(du, u, p, 0)
47-
@test du [0.01831563888873422, 0.9816849729159067, 4.999999388195359]
48-
49-
# oop
50-
@test df.f(u, p, 0) [0.01831563888873422, 0.9816849729159067, 4.999999388195359]
51-
end
37+
df = DiscreteFunction(syss)
38+
# iip
39+
du = zeros(3)
40+
u = collect(1:3)
41+
p = MTKParameters(syss, [c, nsteps, δt, β, γ] .=> collect(1:5))
42+
df.f(du, u, p, 0)
43+
@test du [0.01831563888873422, 0.9816849729159067, 4.999999388195359]
44+
45+
# oop
46+
@test df.f(u, p, 0) [0.01831563888873422, 0.9816849729159067, 4.999999388195359]
5247

5348
# Problem
5449
u0 = [S(k - 1) => 990.0, I(k - 1) => 10.0, R(k - 1) => 0.0]

test/nonlinearsystem.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ eqs = [0 ~ σ * (y - x) * h,
3030
@test eval(toexpr(ns)) == ns
3131
test_nlsys_inference("standard", ns, (x, y, z), (σ, ρ, β))
3232
@test begin
33-
f = eval(generate_function(ns, [x, y, z], [σ, ρ, β])[2])
33+
f = generate_function(ns, [x, y, z], [σ, ρ, β], expression = Val{false})[2]
3434
du = [0.0, 0.0, 0.0]
3535
f(du, [1, 2, 3], [1, 2, 3])
3636
du [1, -3, -7]

test/odesystem.jl

+35-39
Original file line numberDiff line numberDiff line change
@@ -54,42 +54,38 @@ jac = calculate_jacobian(de)
5454
jacfun = eval(jac_expr[2])
5555

5656
de = complete(de)
57-
for f in [
58-
ODEFunction(de, [x, y, z], [σ, ρ, β], tgrad = true, jac = true),
59-
eval(ODEFunctionExpr(de, [x, y, z], [σ, ρ, β], tgrad = true, jac = true))
60-
]
61-
# system
62-
@test f.sys === de
63-
64-
# iip
65-
du = zeros(3)
66-
u = collect(1:3)
67-
p = ModelingToolkit.MTKParameters(de, [σ, ρ, β] .=> 4.0:6.0)
68-
f.f(du, u, p, 0.1)
69-
@test du == [4, 0, -16]
70-
71-
# oop
72-
du = @SArray zeros(3)
73-
u = SVector(1:3...)
74-
p = ModelingToolkit.MTKParameters(de, SVector{3}([σ, ρ, β] .=> 4.0:6.0))
75-
@test f.f(u, p, 0.1) === @SArray [4.0, 0.0, -16.0]
76-
77-
# iip vs oop
78-
du = zeros(3)
79-
g = similar(du)
80-
J = zeros(3, 3)
81-
u = collect(1:3)
82-
p = ModelingToolkit.MTKParameters(de, [σ, ρ, β] .=> 4.0:6.0)
83-
f.f(du, u, p, 0.1)
84-
@test du == f(u, p, 0.1)
85-
f.tgrad(g, u, p, t)
86-
@test g == f.tgrad(u, p, t)
87-
f.jac(J, u, p, t)
88-
@test J == f.jac(u, p, t)
89-
end
57+
f = ODEFunction(de, [x, y, z], [σ, ρ, β], tgrad = true, jac = true)
58+
# system
59+
@test f.sys === de
60+
61+
# iip
62+
du = zeros(3)
63+
u = collect(1:3)
64+
p = ModelingToolkit.MTKParameters(de, [σ, ρ, β] .=> 4.0:6.0)
65+
f.f(du, u, p, 0.1)
66+
@test du == [4, 0, -16]
67+
68+
# oop
69+
du = @SArray zeros(3)
70+
u = SVector(1:3...)
71+
p = ModelingToolkit.MTKParameters(de, SVector{3}([σ, ρ, β] .=> 4.0:6.0))
72+
@test f.f(u, p, 0.1) === @SArray [4.0, 0.0, -16.0]
73+
74+
# iip vs oop
75+
du = zeros(3)
76+
g = similar(du)
77+
J = zeros(3, 3)
78+
u = collect(1:3)
79+
p = ModelingToolkit.MTKParameters(de, [σ, ρ, β] .=> 4.0:6.0)
80+
f.f(du, u, p, 0.1)
81+
@test du == f(u, p, 0.1)
82+
f.tgrad(g, u, p, t)
83+
@test g == f.tgrad(u, p, t)
84+
f.jac(J, u, p, t)
85+
@test J == f.jac(u, p, t)
9086

9187
#check iip_config
92-
f = eval(ODEFunctionExpr(de, [x, y, z], [σ, ρ, β], iip_config = (false, true)))
88+
f = ODEFunction(de, [x, y, z], [σ, ρ, β], iip_config = (false, true))
9389
du = zeros(3)
9490
u = collect(1:3)
9591
p = ModelingToolkit.MTKParameters(de, [σ, ρ, β] .=> 4.0:6.0)
@@ -146,7 +142,7 @@ eqs = [D(x) ~ σ′ * (y - x),
146142
@named de = ODESystem(eqs, t)
147143
test_diffeq_inference("global iv-varying", de, t, (x, y, z), (σ′, ρ, β))
148144

149-
f = eval(generate_function(de, [x, y, z], [σ′, ρ, β])[2])
145+
f = generate_function(de, [x, y, z], [σ′, ρ, β], expression = Val{false})[2]
150146
du = [0.0, 0.0, 0.0]
151147
f(du, [1.0, 2.0, 3.0], [x -> x + 7, 2, 3], 5.0)
152148
@test du [11, -3, -7]
@@ -157,15 +153,15 @@ eqs = [D(x) ~ σ(t - 1) * (y - x),
157153
D(z) ~ x * y - β * z * κ]
158154
@named de = ODESystem(eqs, t)
159155
test_diffeq_inference("single internal iv-varying", de, t, (x, y, z), (σ, ρ, β))
160-
f = eval(generate_function(de, [x, y, z], [σ, ρ, β])[2])
156+
f = generate_function(de, [x, y, z], [σ, ρ, β], expression = Val{false})[2]
161157
du = [0.0, 0.0, 0.0]
162158
f(du, [1.0, 2.0, 3.0], [x -> x + 7, 2, 3], 5.0)
163159
@test du [11, -3, -7]
164160

165161
eqs = [D(x) ~ x + 10σ(t - 1) + 100σ(t - 2) + 1000σ(t^2)]
166162
@named de = ODESystem(eqs, t)
167163
test_diffeq_inference("many internal iv-varying", de, t, (x,), (σ,))
168-
f = eval(generate_function(de, [x], [σ])[2])
164+
f = generate_function(de, [x], [σ], expression = Val{false})[2]
169165
du = [0.0]
170166
f(du, [1.0], [t -> t + 2], 5.0)
171167
@test du [27561]
@@ -218,11 +214,11 @@ eqs = [D(x) ~ -A * x,
218214
@named de = ODESystem(eqs, t)
219215
@test begin
220216
local f, du
221-
f = eval(generate_function(de, [x, y], [A, B, C])[2])
217+
f = generate_function(de, [x, y], [A, B, C], expression = Val{false})[2]
222218
du = [0.0, 0.0]
223219
f(du, [1.0, 2.0], [1, 2, 3], 0.0)
224220
du [-1, -1 / 3]
225-
f = eval(generate_function(de, [x, y], [A, B, C])[1])
221+
f = generate_function(de, [x, y], [A, B, C], expression = Val{false})[1]
226222
du f([1.0, 2.0], [1, 2, 3], 0.0)
227223
end
228224

test/steadystatesystems.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ for factor in [1e-1, 1e0, 1e10],
1717
ss_prob = SteadyStateProblem(de, u0, p)
1818
sol = solve(ss_prob, SSRootfind()).u[1]
1919
@test abs(sol^2 - factor * u0_p[2]) < 1e-8
20-
ss_prob = SteadyStateProblemExpr(de, u0, p)
21-
sol_expr = solve(eval(ss_prob), SSRootfind()).u[1]
20+
ss_prob = SteadyStateProblem(de, u0, p)
21+
sol_expr = solve(ss_prob, SSRootfind()).u[1]
2222
@test all(x -> x == 0, sol - sol_expr)
2323
end

0 commit comments

Comments
 (0)