Skip to content

Commit e8d8dce

Browse files
Merge pull request #818 from pbouffard/issue_808
Require systems kwarg to ODESystem constructor to have unique names (#808)
2 parents f9e4e19 + d657fec commit e8d8dce

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/systems/diffeqs/odesystem.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ struct ODESystem <: AbstractODESystem
5757
"""
5858
name::Symbol
5959
"""
60-
systems: The internal systems
60+
systems: The internal systems. These are required to have unique names.
6161
"""
6262
systems::Vector{ODESystem}
6363
"""
@@ -97,6 +97,10 @@ function ODESystem(
9797
jac = RefValue{Any}(Matrix{Num}(undef, 0, 0))
9898
Wfact = RefValue(Matrix{Num}(undef, 0, 0))
9999
Wfact_t = RefValue(Matrix{Num}(undef, 0, 0))
100+
sysnames = nameof.(systems)
101+
if length(unique(sysnames)) != length(sysnames)
102+
throw(ArgumentError("System names must be unique."))
103+
end
100104
ODESystem(deqs, iv′, dvs′, ps′, observed, tgrad, jac, Wfact, Wfact_t, name, systems, default_u0, default_p, nothing)
101105
end
102106

test/odesystem.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,3 +282,24 @@ D = Differential(t)
282282
eq = D(x) ~ r*x
283283
ode = ODESystem(eq)
284284
@test equations(ode) == [eq]
285+
# issue #808
286+
@testset "Combined system name collisions" begin
287+
function makesys(name)
288+
@parameters t a
289+
@variables x(t) f(t)
290+
D = Differential(t)
291+
292+
ODESystem([D(x) ~ -a*x + f], name=name)
293+
end
294+
295+
function issue808()
296+
sys1 = makesys(:sys1)
297+
sys2 = makesys(:sys1)
298+
299+
@parameters t
300+
D = Differential(t)
301+
@test_throws ArgumentError ODESystem([sys2.f ~ sys1.x, D(sys1.f) ~ 0], t, systems=[sys1, sys2])
302+
end
303+
issue808()
304+
305+
end

0 commit comments

Comments
 (0)