From 3b77b31be707f070b5eaf8f2a0d5f690fe10e01b Mon Sep 17 00:00:00 2001 From: vyudu Date: Fri, 10 Oct 2025 12:12:07 -0400 Subject: [PATCH 1/3] fix: retain inputs when composing systems --- src/systems/abstractsystem.jl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/systems/abstractsystem.jl b/src/systems/abstractsystem.jl index 0bd05bb4b9..da291499fb 100644 --- a/src/systems/abstractsystem.jl +++ b/src/systems/abstractsystem.jl @@ -2665,6 +2665,15 @@ function compose(sys::AbstractSystem, systems::AbstractArray; name = nameof(sys) end @set! sys.unknowns = unique!(vcat(get_unknowns(sys), collect(newunknowns))) @set! sys.ps = unique!(vcat(get_ps(sys), collect(newparams))) + + newinputs = map(systems) do sys + map(x -> namespace_expr(x, sys), inputs(sys)) + end + newoutputs = map(systems) do sys + map(x -> namespace_expr(x, sys), outputs(sys)) + end + @set! sys.inputs = OrderedSet(reduce(union, [inputs(sys); newinputs])) + @set! sys.outputs = OrderedSet(reduce(union, [outputs(sys); newoutputs])) return sys end """ From 6251241d1878fa6d92502351d6c5c0db97323ddc Mon Sep 17 00:00:00 2001 From: vyudu Date: Fri, 10 Oct 2025 12:22:50 -0400 Subject: [PATCH 2/3] test: add test --- test/input_output_handling.jl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/input_output_handling.jl b/test/input_output_handling.jl index cf02bc8d1e..3e1aea4a91 100644 --- a/test/input_output_handling.jl +++ b/test/input_output_handling.jl @@ -485,3 +485,16 @@ end @test issetequal(ModelingToolkit.inputs(ss2), [z]) @test issetequal(ModelingToolkit.outputs(ss2), [y]) end + +@testset "Retain inputs when composing systems" begin + @variables x(t) y(t) [input=true] + @named sys = System([D(x) ~ y * x], t) + csys = compose(System(Equation[], t; name = :outer), sys) + @test issetequal(ModelingToolkit.inputs(csys), [sys.y]) + + # More complex hierarchy + @variables z(t) [input = true] w(t) + @named sys2 = System([D(w) ~ z - w], t) + cosys = compose(System(Equation[], t; name = :outermost), [csys, sys2]) + @test issetequal(ModelingToolkit.inputs(cosys), [csys.sys.y, sys2.z]) +end From 918a083cfcc17cd564cf37ac64737fa198822ec0 Mon Sep 17 00:00:00 2001 From: vyudu Date: Fri, 10 Oct 2025 15:26:34 -0400 Subject: [PATCH 3/3] fix: fix concatenation of input vectors --- src/systems/abstractsystem.jl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/systems/abstractsystem.jl b/src/systems/abstractsystem.jl index da291499fb..51a495e4ff 100644 --- a/src/systems/abstractsystem.jl +++ b/src/systems/abstractsystem.jl @@ -2672,8 +2672,12 @@ function compose(sys::AbstractSystem, systems::AbstractArray; name = nameof(sys) newoutputs = map(systems) do sys map(x -> namespace_expr(x, sys), outputs(sys)) end - @set! sys.inputs = OrderedSet(reduce(union, [inputs(sys); newinputs])) - @set! sys.outputs = OrderedSet(reduce(union, [outputs(sys); newoutputs])) + + newinputs = reduce(vcat, newinputs) + newoutputs = reduce(vcat, newoutputs) + + @set! sys.inputs = OrderedSet(vcat(inputs(sys), newinputs)) + @set! sys.outputs = OrderedSet(vcat(outputs(sys), newoutputs)) return sys end """