Skip to content

Commit 4a0ea98

Browse files
authored
Merge pull request #1525 from SciML/myb/fix
Redo stream connectors
2 parents 2204a33 + 4dce14f commit 4a0ea98

File tree

7 files changed

+478
-268
lines changed

7 files changed

+478
-268
lines changed

src/systems/abstractsystem.jl

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,7 @@ renamespace(sys, eq::Equation) = namespace_equation(eq, sys)
384384

385385
renamespace(names::AbstractVector, x) = foldr(renamespace, names, init=x)
386386
function renamespace(sys, x)
387+
sys === nothing && return x
387388
x = unwrap(x)
388389
if x isa Symbolic
389390
let scope = getmetadata(x, SymScope, LocalScope())
@@ -417,9 +418,9 @@ function namespace_equations(sys::AbstractSystem)
417418
map(eq->namespace_equation(eq, sys), eqs)
418419
end
419420

420-
function namespace_equation(eq::Equation, sys)
421-
_lhs = namespace_expr(eq.lhs, sys)
422-
_rhs = namespace_expr(eq.rhs, sys)
421+
function namespace_equation(eq::Equation, sys, n=nameof(sys))
422+
_lhs = namespace_expr(eq.lhs, sys, n)
423+
_rhs = namespace_expr(eq.rhs, sys, n)
423424
_lhs ~ _rhs
424425
end
425426

@@ -429,22 +430,22 @@ function namespace_assignment(eq::Assignment, sys)
429430
Assignment(_lhs, _rhs)
430431
end
431432

432-
function namespace_expr(O, sys) where {T}
433+
function namespace_expr(O, sys, n=nameof(sys)) where {T}
433434
ivs = independent_variables(sys)
434435
O = unwrap(O)
435436
if any(isequal(O), ivs)
436437
return O
437438
elseif isvariable(O)
438-
renamespace(sys, O)
439+
renamespace(n, O)
439440
elseif istree(O)
440-
renamed = map(a->namespace_expr(a, sys), arguments(O))
441+
renamed = map(a->namespace_expr(a, sys, n), arguments(O))
441442
if symtype(operation(O)) <: FnType
442-
renamespace(sys, O)
443+
renamespace(n, O)
443444
else
444445
similarterm(O, operation(O), renamed)
445446
end
446447
elseif O isa Array
447-
map(Base.Fix2(namespace_expr, sys), O)
448+
map(o->namespace_expr(o, sys, n), O)
448449
else
449450
O
450451
end
@@ -508,7 +509,7 @@ for f in [:states, :parameters]
508509
@eval $f(sys::AbstractSystem, vs::AbstractArray) = map(v->$f(sys, v), vs)
509510
end
510511

511-
flatten(sys::AbstractSystem) = sys
512+
flatten(sys::AbstractSystem, args...) = sys
512513

513514
function equations(sys::ModelingToolkit.AbstractSystem)
514515
eqs = get_eqs(sys)
@@ -1038,14 +1039,14 @@ $(SIGNATURES)
10381039
compose multiple systems together. The resulting system would inherit the first
10391040
system's name.
10401041
"""
1041-
function compose(sys::AbstractSystem, systems::AbstractArray{<:AbstractSystem}; name=nameof(sys))
1042+
function compose(sys::AbstractSystem, systems::AbstractArray; name=nameof(sys))
10421043
nsys = length(systems)
1043-
nsys >= 1 || throw(ArgumentError("There must be at least 1 subsystem. Got $nsys subsystems."))
1044+
nsys == 0 && return sys
10441045
@set! sys.name = name
10451046
@set! sys.systems = [get_systems(sys); systems]
10461047
return sys
10471048
end
1048-
compose(syss::AbstractSystem...; name=nameof(first(syss))) = compose(first(syss), collect(syss[2:end]); name=name)
1049+
compose(syss...; name=nameof(first(syss))) = compose(first(syss), collect(syss[2:end]); name=name)
10491050
Base.:()(sys1::AbstractSystem, sys2::AbstractSystem) = compose(sys1, sys2)
10501051

10511052
UnPack.unpack(sys::ModelingToolkit.AbstractSystem, ::Val{p}) where p = getproperty(sys, p; namespace=false)

0 commit comments

Comments
 (0)