Skip to content

Commit 70b2e35

Browse files
Restore current SBML test-suite compatibility
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
1 parent bb86386 commit 70b2e35

5 files changed

Lines changed: 48 additions & 14 deletions

File tree

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ ModelingToolkit = "9.84, 10, 11"
1919
OrdinaryDiffEq = "6.107, 7"
2020
Plots = "1.41.6"
2121
SBML = "1.6"
22-
SBMLToolkitTestSuite = "0.0.5"
22+
SBMLToolkitTestSuite = "0.0.5, 1"
2323
SafeTestsets = "0.1, 1"
2424
SciMLTesting = "2.1"
25-
Sundials = "4.28, 5"
25+
Sundials = "4.28, 5, 6.1"
2626
SymbolicUtils = "3.32, 4"
2727
Symbolics = "6.58, 7"
2828
Test = "1"

src/events.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ function get_events(model) # Todo: implement up or downpass and parameters
77
mtk_evs = Pair{Vector{Equation}, Vector{Equation}}[]
88
for (_, e) in evs
99
trigger = SBML.extensive_kinetic_math(model, e.trigger.math)
10-
trigger = Symbolics.unwrap(interpret_as_num(trigger, model))
1110
lhs, rhs = map(
12-
x -> substitute(x, subsdict),
13-
SymbolicUtils.arguments(trigger),
11+
x -> substitute(Symbolics.unwrap(interpret_as_num(x, model)), subsdict),
12+
trigger.args,
1413
)
1514
trig = [lhs ~ rhs]
1615
mtk_evas = Equation[]

src/systems.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ function SBML.readSBML(
4141
sbmlfile::String, ::ODESystemImporter;
4242
include_zero_odes::Bool = true, kwargs...
4343
) # Returns an MTK.ODESystem
44-
odesys = convert(
45-
ODESystem, readSBML(sbmlfile, ReactionSystemImporter(), kwargs...),
46-
include_zero_odes = include_zero_odes
44+
odesys = _rs_to_odesys(
45+
readSBML(sbmlfile, ReactionSystemImporter(); kwargs...);
46+
include_zero_odes
4747
)
4848
return complete(odesys)
4949
end

src/utils.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,10 @@ function create_symbol(k::String, model::SBML.Model)
154154
v = model.parameters[k]
155155
if v.constant == false &&
156156
(SBML.seemsdefined(k, model) || is_event_assignment(k, model))
157-
sym = create_var(k, IV; isbcspecies = true)
157+
sym = create_var(
158+
k, IV; isbcspecies = true,
159+
irreducible = is_event_assignment(k, model)
160+
)
158161
else
159162
sym = create_param(k)
160163
end

test/systems.jl

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using SBMLToolkit
2-
using Catalyst, SBML
2+
using Catalyst, ModelingToolkit, SBML
3+
import Symbolics
34
using Test
45

56
cd(@__DIR__)
@@ -110,8 +111,15 @@ rs = ReactionSystem(MODEL2) # Contains reversible reaction
110111
@test isequal(Catalyst.get_species(rs), [s1])
111112
@test issetequal(Catalyst.get_ps(rs), [k1, c1])
112113

113-
@test convert(ModelingToolkit.ODESystem, rs) isa ODESystem
114-
@test structural_simplify(convert(ModelingToolkit.ODESystem, rs)) isa ODESystem
114+
if pkgversion(Catalyst) >= v"16"
115+
odesys_from_rs = Catalyst.ode_model(rs)
116+
@test odesys_from_rs isa ODESystem
117+
@test mtkcompile(odesys_from_rs) isa ODESystem
118+
else
119+
odesys_from_rs = convert(ModelingToolkit.ODESystem, rs)
120+
@test odesys_from_rs isa ODESystem
121+
@test structural_simplify(odesys_from_rs) isa ODESystem
122+
end
115123

116124
# Test ODESystem constructor
117125
odesys = ODESystem(MODEL1)
@@ -123,7 +131,19 @@ trueeqs = Equation[default_time_deriv()(s1) ~ k1]
123131
u0 = [s1 => 1.0]
124132
par = [k1 => 1.0, c1 => 2.0]
125133
testdef = merge(Dict(u0), Dict(par))
126-
@test issubset(testdef, defaults(odesys))
134+
if pkgversion(ModelingToolkit) >= v"11"
135+
initial_conditions = ModelingToolkit.initial_conditions(odesys)
136+
bindings = ModelingToolkit.bindings(odesys)
137+
@test all(
138+
isequal(Symbolics.wrap(initial_conditions[Symbolics.unwrap(k)]), v)
139+
for (k, v) in u0
140+
)
141+
@test all(
142+
isequal(Symbolics.wrap(bindings[Symbolics.unwrap(k)]), v) for (k, v) in par
143+
)
144+
else
145+
@test issubset(testdef, ModelingToolkit.defaults(odesys))
146+
end
127147
@named odesys = ODESystem(MODEL1)
128148
isequal(nameof(odesys), :odesys)
129149
@test structural_simplify(odesys) isa ODESystem
@@ -142,7 +162,19 @@ trueeqs = Equation[
142162
u0 = [s1 => 2 * 1.0, s2 => 2 * 1.0, s1s2 => 2 * 1.0]
143163
par = [k1 => 1.0, c1 => 2.0]
144164
testdef = merge(Dict(u0), Dict(par))
145-
@test issubset(testdef, ModelingToolkit.defaults(odesys))
165+
if pkgversion(ModelingToolkit) >= v"11"
166+
initial_conditions = ModelingToolkit.initial_conditions(odesys)
167+
bindings = ModelingToolkit.bindings(odesys)
168+
@test all(
169+
isequal(Symbolics.wrap(initial_conditions[Symbolics.unwrap(k)]), v)
170+
for (k, v) in u0
171+
)
172+
@test all(
173+
isequal(Symbolics.wrap(bindings[Symbolics.unwrap(k)]), v) for (k, v) in par
174+
)
175+
else
176+
@test issubset(testdef, ModelingToolkit.defaults(odesys))
177+
end
146178
@named odesys = ODESystem(MODEL1)
147179
isequal(nameof(odesys), :odesys)
148180

0 commit comments

Comments
 (0)