Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ ModelingToolkit = "9.84, 10, 11"
OrdinaryDiffEq = "6.107, 7"
Plots = "1.41.6"
SBML = "1.6"
SBMLToolkitTestSuite = "0.0.5"
SBMLToolkitTestSuite = "0.0.5, 1"
SafeTestsets = "0.1, 1"
SciMLTesting = "2.1"
Sundials = "4.28, 5"
Sundials = "4.28, 5, 6.1"
SymbolicUtils = "3.32, 4"
Symbolics = "6.58, 7"
Test = "1"
Expand Down
5 changes: 2 additions & 3 deletions src/events.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@ function get_events(model) # Todo: implement up or downpass and parameters
mtk_evs = Pair{Vector{Equation}, Vector{Equation}}[]
for (_, e) in evs
trigger = SBML.extensive_kinetic_math(model, e.trigger.math)
trigger = Symbolics.unwrap(interpret_as_num(trigger, model))
lhs, rhs = map(
x -> substitute(x, subsdict),
SymbolicUtils.arguments(trigger),
x -> substitute(Symbolics.unwrap(interpret_as_num(x, model)), subsdict),
trigger.args,
)
trig = [lhs ~ rhs]
mtk_evas = Equation[]
Expand Down
6 changes: 3 additions & 3 deletions src/systems.jl
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ function SBML.readSBML(
sbmlfile::String, ::ODESystemImporter;
include_zero_odes::Bool = true, kwargs...
) # Returns an MTK.ODESystem
odesys = convert(
ODESystem, readSBML(sbmlfile, ReactionSystemImporter(), kwargs...),
include_zero_odes = include_zero_odes
odesys = _rs_to_odesys(
readSBML(sbmlfile, ReactionSystemImporter(); kwargs...);
include_zero_odes
)
return complete(odesys)
end
Expand Down
5 changes: 4 additions & 1 deletion src/utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,10 @@ function create_symbol(k::String, model::SBML.Model)
v = model.parameters[k]
if v.constant == false &&
(SBML.seemsdefined(k, model) || is_event_assignment(k, model))
sym = create_var(k, IV; isbcspecies = true)
sym = create_var(
k, IV; isbcspecies = true,
irreducible = is_event_assignment(k, model)
)
else
sym = create_param(k)
end
Expand Down
42 changes: 37 additions & 5 deletions test/systems.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using SBMLToolkit
using Catalyst, SBML
using Catalyst, ModelingToolkit, SBML
import Symbolics
using Test

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

@test convert(ModelingToolkit.ODESystem, rs) isa ODESystem
@test structural_simplify(convert(ModelingToolkit.ODESystem, rs)) isa ODESystem
if pkgversion(Catalyst) >= v"16"
odesys_from_rs = Catalyst.ode_model(rs)
@test odesys_from_rs isa ODESystem
@test mtkcompile(odesys_from_rs) isa ODESystem
else
odesys_from_rs = convert(ModelingToolkit.ODESystem, rs)
@test odesys_from_rs isa ODESystem
@test structural_simplify(odesys_from_rs) isa ODESystem
end

# Test ODESystem constructor
odesys = ODESystem(MODEL1)
Expand All @@ -123,7 +131,19 @@ trueeqs = Equation[default_time_deriv()(s1) ~ k1]
u0 = [s1 => 1.0]
par = [k1 => 1.0, c1 => 2.0]
testdef = merge(Dict(u0), Dict(par))
@test issubset(testdef, defaults(odesys))
if pkgversion(ModelingToolkit) >= v"11"
initial_conditions = ModelingToolkit.initial_conditions(odesys)
bindings = ModelingToolkit.bindings(odesys)
@test all(
isequal(Symbolics.wrap(initial_conditions[Symbolics.unwrap(k)]), v)
for (k, v) in u0
)
@test all(
isequal(Symbolics.wrap(bindings[Symbolics.unwrap(k)]), v) for (k, v) in par
)
else
@test issubset(testdef, ModelingToolkit.defaults(odesys))
end
@named odesys = ODESystem(MODEL1)
isequal(nameof(odesys), :odesys)
@test structural_simplify(odesys) isa ODESystem
Expand All @@ -142,7 +162,19 @@ trueeqs = Equation[
u0 = [s1 => 2 * 1.0, s2 => 2 * 1.0, s1s2 => 2 * 1.0]
par = [k1 => 1.0, c1 => 2.0]
testdef = merge(Dict(u0), Dict(par))
@test issubset(testdef, ModelingToolkit.defaults(odesys))
if pkgversion(ModelingToolkit) >= v"11"
initial_conditions = ModelingToolkit.initial_conditions(odesys)
bindings = ModelingToolkit.bindings(odesys)
@test all(
isequal(Symbolics.wrap(initial_conditions[Symbolics.unwrap(k)]), v)
for (k, v) in u0
)
@test all(
isequal(Symbolics.wrap(bindings[Symbolics.unwrap(k)]), v) for (k, v) in par
)
else
@test issubset(testdef, ModelingToolkit.defaults(odesys))
end
@named odesys = ODESystem(MODEL1)
isequal(nameof(odesys), :odesys)

Expand Down
Loading