Skip to content

Commit 91043dc

Browse files
authored
Merge pull request #719 from SciML/myb/eqs
Make sure equations returns Vector{Equation}
2 parents 0c5e6a3 + 12bae1b commit 91043dc

File tree

4 files changed

+29
-6
lines changed

4 files changed

+29
-6
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ModelingToolkit"
22
uuid = "961ee093-0014-501f-94e3-6117800e7a78"
33
authors = ["Chris Rackauckas <[email protected]>"]
4-
version = "4.5.0"
4+
version = "4.5.1"
55

66
[deps]
77
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"

src/systems/abstractsystem.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ function namespace_pins(sys::AbstractSystem)
176176
[renamespace(sys.name,x) for x in pins(sys)]
177177
end
178178

179-
namespace_equations(sys::AbstractSystem) = namespace_equation.(equations(sys),sys.name,sys.iv.name)
179+
function namespace_equations(sys::AbstractSystem)
180+
eqs = equations(sys)
181+
isempty(eqs) && return Equation[]
182+
map(eq->namespace_equation(eq,sys.name,sys.iv.name), eqs)
183+
end
180184

181185
function namespace_equation(eq::Equation,name,ivname)
182186
_lhs = namespace_expr(eq.lhs,name,ivname)
@@ -236,11 +240,10 @@ function equations(sys::ModelingToolkit.AbstractSystem)
236240
if isempty(sys.systems)
237241
return sys.eqs
238242
else
239-
eqs = [sys.eqs;
243+
eqs = Equation[sys.eqs;
240244
reduce(vcat,
241245
namespace_equations.(sys.systems);
242246
init=Equation[])]
243-
244247
return eqs
245248
end
246249
end

src/systems/reduction.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export alias_elimination
1+
export alias_elimination, flatten
22

33
function flatten(sys::ODESystem)
44
if isempty(sys.systems)

test/reduction.jl

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,28 @@ let
109109
x ~ y
110110
];
111111
sys = ODESystem(eqs, t, [x], []);
112-
asys = alias_elimination(ModelingToolkit.flatten(sys))
112+
asys = alias_elimination(flatten(sys))
113113

114114
test_equal.(asys.eqs, [D(x) ~ 2x])
115115
test_equal.(asys.observed, [y ~ x])
116116
end
117+
118+
# issue #716
119+
let
120+
@parameters t
121+
@derivatives D'~t
122+
@variables x(t), u(t), y(t)
123+
@parameters a, b, c, d
124+
ol = ODESystem([D(x) ~ a * x + b * u, y ~ c * x], t, name=:ol)
125+
@variables u_c(t), y_c(t)
126+
@parameters k_P
127+
pc = ODESystem(Equation[], t, pins=[y_c], observed = [u_c ~ k_P * y_c], name=:pc)
128+
connections = [
129+
ol.u ~ pc.u_c,
130+
y_c ~ ol.y
131+
]
132+
connected = ODESystem(connections, t, systems=[ol, pc])
133+
134+
@test equations(connected) isa Vector{Equation}
135+
@test_nowarn flatten(connected)
136+
end

0 commit comments

Comments
 (0)