Skip to content

Commit e24b188

Browse files
test: add tests for array variable namespacing from solved issues
1 parent 802ac1d commit e24b188

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

src/systems/abstractsystem.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -875,7 +875,8 @@ function namespace_assignment(eq::Assignment, sys)
875875
Assignment(_lhs, _rhs)
876876
end
877877

878-
function namespace_expr(O, sys, n = nameof(sys); ivs = independent_variables(sys))
878+
function namespace_expr(
879+
O, sys, n = nameof(sys); ivs = independent_variables(sys))
879880
O = unwrap(O)
880881
if any(isequal(O), ivs)
881882
return O

test/odesystem.jl

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,3 +1066,57 @@ prob = SteadyStateProblem(sys, u0, p)
10661066
@test prob isa SteadyStateProblem
10671067
prob = SteadyStateProblem(ODEProblem(sys, u0, (0.0, 10.0), p))
10681068
@test prob isa SteadyStateProblem
1069+
1070+
# Issue#2344
1071+
using ModelingToolkitStandardLibrary.Blocks
1072+
1073+
function FML2(; name)
1074+
@parameters begin
1075+
k2[1:1] = [1.0]
1076+
end
1077+
systems = @named begin
1078+
constant = Constant(k = k2[1])
1079+
end
1080+
@variables begin
1081+
x(t) = 0
1082+
end
1083+
eqs = [
1084+
D(x) ~ constant.output.u + k2[1]
1085+
]
1086+
ODESystem(eqs, t; systems, name)
1087+
end
1088+
1089+
@mtkbuild model = FML2()
1090+
1091+
@test isequal(ModelingToolkit.defaults(model)[model.constant.k], model.k2[1])
1092+
@test_nowarn ODEProblem(model, [], (0.0, 10.0))
1093+
1094+
# Issue#2477
1095+
function RealExpression(; name, y)
1096+
vars = @variables begin
1097+
u(t)
1098+
end
1099+
eqns = [
1100+
u ~ y
1101+
]
1102+
sys = ODESystem(eqns, t, vars, []; name)
1103+
end
1104+
1105+
function RealExpressionSystem(; name)
1106+
vars = @variables begin
1107+
x(t)
1108+
z(t)[1:1]
1109+
end # doing a collect on z doesn't work either.
1110+
@named e1 = RealExpression(y = x) # This works perfectly.
1111+
@named e2 = RealExpression(y = z[1]) # This bugs. However, `full_equations(e2)` works as expected.
1112+
systems = [e1, e2]
1113+
ODESystem(Equation[], t, Iterators.flatten(vars), []; systems, name)
1114+
end
1115+
1116+
@named sys = RealExpressionSystem()
1117+
sys = complete(sys)
1118+
@test Set(equations(sys)) == Set([sys.e1.u ~ sys.x, sys.e2.u ~ sys.z[1]])
1119+
tearing_state = TearingState(expand_connections(sys))
1120+
ts_vars = tearing_state.fullvars
1121+
orig_vars = unknowns(sys)
1122+
@test isempty(setdiff(ts_vars, orig_vars))

0 commit comments

Comments
 (0)