@@ -384,6 +384,7 @@ renamespace(sys, eq::Equation) = namespace_equation(eq, sys)
384
384
385
385
renamespace (names:: AbstractVector , x) = foldr (renamespace, names, init= x)
386
386
function renamespace (sys, x)
387
+ sys === nothing && return x
387
388
x = unwrap (x)
388
389
if x isa Symbolic
389
390
let scope = getmetadata (x, SymScope, LocalScope ())
@@ -417,9 +418,9 @@ function namespace_equations(sys::AbstractSystem)
417
418
map (eq-> namespace_equation (eq, sys), eqs)
418
419
end
419
420
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 )
423
424
_lhs ~ _rhs
424
425
end
425
426
@@ -429,22 +430,22 @@ function namespace_assignment(eq::Assignment, sys)
429
430
Assignment (_lhs, _rhs)
430
431
end
431
432
432
- function namespace_expr (O, sys) where {T}
433
+ function namespace_expr (O, sys, n = nameof (sys) ) where {T}
433
434
ivs = independent_variables (sys)
434
435
O = unwrap (O)
435
436
if any (isequal (O), ivs)
436
437
return O
437
438
elseif isvariable (O)
438
- renamespace (sys , O)
439
+ renamespace (n , O)
439
440
elseif istree (O)
440
- renamed = map (a-> namespace_expr (a, sys), arguments (O))
441
+ renamed = map (a-> namespace_expr (a, sys, n ), arguments (O))
441
442
if symtype (operation (O)) <: FnType
442
- renamespace (sys , O)
443
+ renamespace (n , O)
443
444
else
444
445
similarterm (O, operation (O), renamed)
445
446
end
446
447
elseif O isa Array
447
- map (Base . Fix2 ( namespace_expr, sys), O)
448
+ map (o -> namespace_expr (o , sys, n ), O)
448
449
else
449
450
O
450
451
end
@@ -508,7 +509,7 @@ for f in [:states, :parameters]
508
509
@eval $ f (sys:: AbstractSystem , vs:: AbstractArray ) = map (v-> $ f (sys, v), vs)
509
510
end
510
511
511
- flatten (sys:: AbstractSystem ) = sys
512
+ flatten (sys:: AbstractSystem , args ... ) = sys
512
513
513
514
function equations (sys:: ModelingToolkit.AbstractSystem )
514
515
eqs = get_eqs (sys)
@@ -1038,14 +1039,14 @@ $(SIGNATURES)
1038
1039
compose multiple systems together. The resulting system would inherit the first
1039
1040
system's name.
1040
1041
"""
1041
- function compose (sys:: AbstractSystem , systems:: AbstractArray{<:AbstractSystem} ; name= nameof (sys))
1042
+ function compose (sys:: AbstractSystem , systems:: AbstractArray ; name= nameof (sys))
1042
1043
nsys = length (systems)
1043
- nsys >= 1 || throw ( ArgumentError ( " There must be at least 1 subsystem. Got $nsys subsystems. " ))
1044
+ nsys == 0 && return sys
1044
1045
@set! sys. name = name
1045
1046
@set! sys. systems = [get_systems (sys); systems]
1046
1047
return sys
1047
1048
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)
1049
1050
Base.:(∘ )(sys1:: AbstractSystem , sys2:: AbstractSystem ) = compose (sys1, sys2)
1050
1051
1051
1052
UnPack. unpack (sys:: ModelingToolkit.AbstractSystem , :: Val{p} ) where p = getproperty (sys, p; namespace= false )
0 commit comments