Skip to content

Commit 5c904d2

Browse files
committed
Add extend
1 parent 0629d70 commit 5c904d2

File tree

5 files changed

+32
-4
lines changed

5 files changed

+32
-4
lines changed

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
1616
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
1717
DomainSets = "5b8099bc-c8ec-5219-889f-1d9e522a28bf"
1818
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
19+
InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
1920
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
2021
LabelledArrays = "2ee39098-c373-598a-b85f-a56591580800"
2122
Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"

src/ModelingToolkit.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ using AbstractTrees
77
using DiffEqBase, SciMLBase, Reexport
88
using Distributed
99
using StaticArrays, LinearAlgebra, SparseArrays, LabelledArrays
10+
using InteractiveUtils
1011
using Latexify, Unitful, ArrayInterface
1112
using MacroTools
12-
using UnPack: @unpack
13+
@reexport using UnPack
1314
using Setfield, ConstructionBase
1415
using DiffEqJump
1516
using DataStructures
@@ -139,6 +140,11 @@ include("systems/alias_elimination.jl")
139140
include("structural_transformation/StructuralTransformations.jl")
140141
@reexport using .StructuralTransformations
141142

143+
for S in subtypes(ModelingToolkit.AbstractSystem)
144+
S = nameof(S)
145+
@eval convert_system(::Type{<:$S}, sys::$S) = sys
146+
end
147+
142148
export ODESystem, ODEFunction, ODEFunctionExpr, ODEProblemExpr, convert_system
143149
export DAEFunctionExpr, DAEProblemExpr
144150
export SDESystem, SDEFunction, SDEFunctionExpr, SDESystemExpr
@@ -184,6 +190,6 @@ export simplify, substitute
184190
export build_function
185191
export modelingtoolkitize
186192
export @variables, @parameters
187-
export @named, @nonamespace, @namespace
193+
export @named, @nonamespace, @namespace, extend
188194

189195
end # module

src/bipartite_graph.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ module BipartiteGraphs
22

33
export BipartiteEdge, BipartiteGraph
44

5+
using Reexport
56
export 𝑠vertices, 𝑑vertices, has_𝑠vertex, has_𝑑vertex, 𝑠neighbors, 𝑑neighbors,
67
𝑠edges, 𝑑edges, nsrcs, ndsts, SRC, DST
78

89
using DocStringExtensions
9-
using Reexport
1010
using UnPack
1111
using SparseArrays
1212
@reexport using LightGraphs

src/systems/abstractsystem.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,3 +793,24 @@ end
793793
function connect(syss...)
794794
connect(promote_connect_type(map(get_connection_type, syss)...), syss...)
795795
end
796+
797+
# Inheritance
798+
function extend(basesys::AbstractSystem, sys::AbstractSystem; name::Symbol)
799+
T = SciMLBase.parameterless_type(basesys)
800+
iv = independent_variable(basesys)
801+
sys = convert_system(T, sys, iv)
802+
eqs = union(equations(basesys), equations(sys))
803+
sts = union(states(basesys), states(sys))
804+
ps = union(parameters(basesys), parameters(sys))
805+
obs = union(observed(basesys), observed(sys))
806+
defs = merge(defaults(basesys), defaults(sys)) # prefer `sys`
807+
syss = union(get_systems(basesys), get_systems(sys))
808+
809+
if iv === nothing
810+
T(eqs, sts, ps, observed=obs, defaults=defs, name=name, systems=syss)
811+
else
812+
T(eqs, iv, sts, ps, observed=obs, defaults=defs, name=name, systems=syss)
813+
end
814+
end
815+
816+
UnPack.unpack(sys::ModelingToolkit.AbstractSystem, ::Val{p}) where p = getproperty(sys, p; namespace=false)

src/utils.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ function collect_differentials(eqs)
126126
vars!(vars, eq)
127127
for v in vars
128128
isdifferential(v) || continue
129-
collect_ivs_from_nested_differential!(ivs, v)
129+
collect_ivs_from_nested_differential!(ivs, v)
130130
end
131131
empty!(vars)
132132
end

0 commit comments

Comments
 (0)