Skip to content

Commit 571f3da

Browse files
committed
Use unpack for inheritance
1 parent 5c904d2 commit 571f3da

10 files changed

+90
-97
lines changed

examples/electrical_components.jl

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
using Test
22
using ModelingToolkit, OrdinaryDiffEq
33

4-
# Basic electric components
54
@parameters t
65
@connector function Pin(;name)
76
sts = @variables v(t)=1.0 i(t)=1.0
8-
ODESystem(Equation[], t, sts, [], name=name)
7+
ODESystem(Equation[], t, sts, []; name=name)
98
end
109

11-
@namespace function ModelingToolkit.connect(::Type{Pin}, ps...)
10+
function ModelingToolkit.connect(::Type{Pin}, ps...)
1211
eqs = [
1312
0 ~ sum(p->p.i, ps) # KCL
1413
]
@@ -20,61 +19,62 @@ end
2019
return eqs
2120
end
2221

23-
@namespace function Ground(;name)
22+
function Ground(;name)
2423
@named g = Pin()
2524
eqs = [g.v ~ 0]
26-
ODESystem(eqs, t, [], [], systems=[g], name=name)
25+
ODESystem(eqs, t, [], [], systems=[g]; name=name)
2726
end
2827

29-
@namespace function ConstantVoltage(;name, V = 1.0)
28+
function OnePort(;name)
3029
@named p = Pin()
3130
@named n = Pin()
32-
ps = @parameters V=V
31+
sts = @variables v(t)=1.0 i(t)=1.0
3332
eqs = [
34-
V ~ p.v - n.v
33+
v ~ p.v - n.v
3534
0 ~ p.i + n.i
35+
i ~ p.i
3636
]
37-
ODESystem(eqs, t, [], ps, systems=[p, n], name=name)
37+
ODESystem(eqs, t, sts, [], systems=[p, n]; name=name)
3838
end
3939

40-
@namespace function Resistor(;name, R = 1.0)
41-
@named p = Pin()
42-
@named n = Pin()
43-
sts = @variables v(t)
40+
function ConstantVoltage(;name, V = 1.0)
41+
@named oneport = OnePort()
42+
@unpack v = oneport
43+
ps = @parameters V=V
44+
eqs = [
45+
V ~ v
46+
]
47+
extend(oneport, ODESystem(eqs, t, [], ps; name=name); name=name)
48+
end
49+
50+
function Resistor(;name, R = 1.0)
51+
@named oneport = OnePort()
52+
@unpack v, i = oneport
4453
ps = @parameters R=R
4554
eqs = [
46-
v ~ p.v - n.v
47-
0 ~ p.i + n.i
48-
v ~ p.i * R
55+
v ~ i * R
4956
]
50-
ODESystem(eqs, t, sts, ps, systems=[p, n], name=name)
57+
extend(oneport, ODESystem(eqs, t, [], ps; name=name); name=name)
5158
end
5259

53-
@namespace function Capacitor(;name, C = 1.0)
54-
@named p = Pin()
55-
@named n = Pin()
56-
sts = @variables v(t)
60+
function Capacitor(;name, C = 1.0)
61+
@named oneport = OnePort()
62+
@unpack v, i = oneport
5763
ps = @parameters C=C
5864
D = Differential(t)
5965
eqs = [
60-
v ~ p.v - n.v
61-
0 ~ p.i + n.i
62-
D(v) ~ p.i / C
66+
D(v) ~ i / C
6367
]
64-
ODESystem(eqs, t, sts, ps, systems=[p, n], name=name)
68+
extend(oneport, ODESystem(eqs, t, [], ps; name=name); name=name)
6569
end
6670

67-
@namespace function Inductor(; name, L = 1.0)
68-
@named p = Pin()
69-
@named n = Pin()
70-
sts = @variables v(t) i(t)
71+
function Inductor(; name, L = 1.0)
72+
@named oneport = OnePort()
73+
@unpack v, i = oneport
7174
ps = @parameters L=L
7275
D = Differential(t)
7376
eqs = [
74-
v ~ p.v - n.v
75-
0 ~ p.i + n.i
76-
i ~ p.i
7777
D(i) ~ v / L
7878
]
79-
ODESystem(eqs, t, sts, ps, systems=[p, n], name=name)
79+
extend(oneport, ODESystem(eqs, t, [], ps; name=name); name=name)
8080
end

examples/rc_model.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ V = 1.0
88
@named source = ConstantVoltage(V=V)
99
@named ground = Ground()
1010

11-
rc_eqs = @namespace [
11+
rc_eqs = [
1212
connect(source.p, resistor.p)
1313
connect(resistor.n, capacitor.p)
1414
connect(capacitor.n, source.n, ground.g)

examples/serial_inductor.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ include("electrical_components.jl")
66
@named inductor2 = Inductor(L=2.0e-2)
77
@named ground = Ground()
88

9-
eqs = @namespace [
9+
eqs = [
1010
connect(source.p, resistor.p)
1111
connect(resistor.n, inductor1.p)
1212
connect(inductor1.n, inductor2.p)

test/components.jl

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,36 @@ include("../examples/rc_model.jl")
55

66
sys = structural_simplify(rc_model)
77
@test !isempty(ModelingToolkit.defaults(sys))
8-
u0 = @namespace [
8+
u0 = [
99
capacitor.v => 0.0
1010
capacitor.p.i => 0.0
1111
resistor.v => 0.0
1212
]
1313
prob = ODEProblem(sys, u0, (0, 10.0))
1414
sol = solve(prob, Rodas4())
1515

16-
@namespace begin
17-
@test sol[resistor.p.i] == sol[capacitor.p.i]
18-
@test sol[resistor.n.i] == -sol[capacitor.p.i]
19-
@test sol[capacitor.n.i] == -sol[capacitor.p.i]
20-
@test iszero(sol[ground.g.i])
21-
@test iszero(sol[ground.g.v])
22-
@test sol[resistor.v] == sol[source.p.v] - sol[capacitor.p.v]
23-
end
16+
@test sol[resistor.p.i] == sol[capacitor.p.i]
17+
@test sol[resistor.n.i] == -sol[capacitor.p.i]
18+
@test sol[capacitor.n.i] == -sol[capacitor.p.i]
19+
@test iszero(sol[ground.g.i])
20+
@test iszero(sol[ground.g.v])
21+
@test sol[resistor.v] == sol[source.p.v] - sol[capacitor.p.v]
2422

2523
prob = ODAEProblem(sys, u0, (0, 10.0))
2624
sol = solve(prob, Tsit5())
2725

28-
@namespace begin
29-
@test sol[resistor.p.i] == sol[capacitor.p.i]
30-
@test sol[resistor.n.i] == -sol[capacitor.p.i]
31-
@test sol[capacitor.n.i] == -sol[capacitor.p.i]
32-
@test iszero(sol[ground.g.i])
33-
@test iszero(sol[ground.g.v])
34-
@test sol[resistor.v] == sol[source.p.v] - sol[capacitor.p.v]
35-
end
26+
@test sol[resistor.p.i] == sol[capacitor.p.i]
27+
@test sol[resistor.n.i] == -sol[capacitor.p.i]
28+
@test sol[capacitor.n.i] == -sol[capacitor.p.i]
29+
@test iszero(sol[ground.g.i])
30+
@test iszero(sol[ground.g.v])
31+
@test sol[resistor.v] == sol[source.p.v] - sol[capacitor.p.v]
3632
#using Plots
3733
#plot(sol)
3834

3935
include("../examples/serial_inductor.jl")
4036
sys = structural_simplify(ll_model)
41-
u0 = @namespace [
37+
u0 = [
4238
inductor1.i => 0.0
4339
inductor2.i => 0.0
4440
inductor2.v => 0.0

test/lowering_solving.jl

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,26 +50,24 @@ lorenz2 = ODESystem(eqs,name=:lorenz2)
5050

5151
@variables α(t)
5252
@parameters γ
53-
connections = @namespace [0 ~ lorenz1.x + lorenz2.y + α*γ]
53+
connections = [0 ~ lorenz1.x + lorenz2.y + α*γ]
5454
connected = ODESystem(connections,t,[α],[γ],systems=[lorenz1,lorenz2])
5555

56-
@namespace begin
57-
u0 = [lorenz1.x => 1.0,
58-
lorenz1.y => 0.0,
59-
lorenz1.z => 0.0,
60-
lorenz2.x => 0.0,
61-
lorenz2.y => 1.0,
62-
lorenz2.z => 0.0,
63-
α => 2.0]
56+
u0 = [lorenz1.x => 1.0,
57+
lorenz1.y => 0.0,
58+
lorenz1.z => 0.0,
59+
lorenz2.x => 0.0,
60+
lorenz2.y => 1.0,
61+
lorenz2.z => 0.0,
62+
α => 2.0]
6463

65-
p = [lorenz1.σ => 10.0,
66-
lorenz1.ρ => 28.0,
67-
lorenz1.β => 8/3,
68-
lorenz2.σ => 10.0,
69-
lorenz2.ρ => 28.0,
70-
lorenz2.β => 8/3,
71-
γ => 2.0]
72-
end
64+
p = [lorenz1.σ => 10.0,
65+
lorenz1.ρ => 28.0,
66+
lorenz1.β => 8/3,
67+
lorenz2.σ => 10.0,
68+
lorenz2.ρ => 28.0,
69+
lorenz2.β => 8/3,
70+
γ => 2.0]
7371

7472
tspan = (0.0,100.0)
7573
prob = ODEProblem(connected,u0,tspan,p)

test/nonlinearsystem.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,23 +90,23 @@ lorenz = name -> NonlinearSystem(eqs1, [x,y,z,u,F], [σ,ρ,β], name=name)
9090
lorenz1 = lorenz(:lorenz1)
9191
@test_throws ArgumentError NonlinearProblem(lorenz1, zeros(5))
9292
lorenz2 = lorenz(:lorenz2)
93-
connected = NonlinearSystem((@namespace [s ~ a + lorenz1.x
93+
connected = NonlinearSystem([s ~ a + lorenz1.x
9494
lorenz2.y ~ s
9595
lorenz1.F ~ lorenz2.u
96-
lorenz2.F ~ lorenz1.u]), [s, a], [], systems=[lorenz1,lorenz2])
96+
lorenz2.F ~ lorenz1.u], [s, a], [], systems=[lorenz1,lorenz2])
9797
@test_nowarn alias_elimination(connected)
9898

9999
# system promotion
100100
using OrdinaryDiffEq
101101
@variables t
102102
D = Differential(t)
103103
@named subsys = convert_system(ODESystem, lorenz1, t)
104-
@named sys = ODESystem((@namespace [D(subsys.x) ~ subsys.x + subsys.x]), t, systems=[subsys])
104+
@named sys = ODESystem([D(subsys.x) ~ subsys.x + subsys.x], t, systems=[subsys])
105105
sys = structural_simplify(sys)
106-
u0 = @namespace [subsys.x => 1, subsys.z => 2.0]
107-
prob = ODEProblem(sys, u0, (0, 1.0), @namespace [subsys.σ=>1,subsys.ρ=>2,subsys.β=>3])
106+
u0 = [subsys.x => 1, subsys.z => 2.0]
107+
prob = ODEProblem(sys, u0, (0, 1.0), [subsys.σ=>1,subsys.ρ=>2,subsys.β=>3])
108108
sol = solve(prob, Rodas5())
109-
@test @namespace sol[subsys.x] + sol[subsys.y] - sol[subsys.z] sol[subsys.u]
109+
@test sol[subsys.x] + sol[subsys.y] - sol[subsys.z] sol[subsys.u]
110110
@test_throws ArgumentError convert_system(ODESystem, sys, t)
111111

112112
@parameters t σ ρ β
@@ -132,7 +132,7 @@ np = NonlinearProblem(ns, [0,0,0], [1,2,3], jac=true, sparse=true)
132132
function issue819()
133133
sys1 = makesys(:sys1)
134134
sys2 = makesys(:sys1)
135-
@test_throws ArgumentError NonlinearSystem((@namespace [sys2.f ~ sys1.x, sys1.f ~ 0]), [], [], systems = [sys1, sys2])
135+
@test_throws ArgumentError NonlinearSystem([sys2.f ~ sys1.x, sys1.f ~ 0], [], [], systems = [sys1, sys2])
136136
end
137137
issue819()
138138
end

test/optimizationsystem.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ sys2 = OptimizationSystem(loss,[x,y],[a,b],name=:sys2)
88

99
@variables z
1010
@parameters β
11-
loss2 = @namespace sys1.x - sys2.y + z*β
11+
loss2 = sys1.x - sys2.y + z*β
1212
combinedsys = OptimizationSystem(loss2,[z],[β],systems=[sys1,sys2],name=:combinedsys)
1313

1414
equations(combinedsys)
@@ -22,14 +22,14 @@ generate_gradient(combinedsys)
2222
generate_hessian(combinedsys)
2323
ModelingToolkit.hessian_sparsity(combinedsys)
2424

25-
u0 = @namespace [
25+
u0 = [
2626
sys1.x=>1.0
2727
sys1.y=>2.0
2828
sys2.x=>3.0
2929
sys2.y=>4.0
3030
z=>5.0
3131
]
32-
p = @namespace [
32+
p = [
3333
sys1.a => 6.0
3434
sys1.b => 7.0
3535
sys2.a => 8.0

test/reactionsystem_components.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ pars = [α₀,α,K,n,δ,β,μ]
2020
@named os₁ = convert(ODESystem, rs; include_zero_odes=false)
2121
@named os₂ = convert(ODESystem, rs; include_zero_odes=false)
2222
@named os₃ = convert(ODESystem, rs; include_zero_odes=false)
23-
connections = @namespace [os₁.R ~ os₃.P,
23+
connections = [os₁.R ~ os₃.P,
2424
os₂.R ~ os₁.P,
2525
os₃.R ~ os₂.P]
2626
@named connected = ODESystem(connections, t, [], [], systems=[os₁,os₂,os₃])
2727
oderepressilator = structural_simplify(connected)
2828

29-
pvals = @namespace [os₁.α₀ => 5e-4,
29+
pvals = [os₁.α₀ => 5e-4,
3030
os₁.α => .5,
3131
os₁.K => 40.0,
3232
os₁.n => 2,
@@ -47,7 +47,7 @@ pvals = @namespace [os₁.α₀ => 5e-4,
4747
os₃.δ => (log(2)/120),
4848
os₃.β => (20*log(2)/120),
4949
os₃.μ => (log(2)/600)]
50-
u₀ = @namespace [os₁.m => 0.0, os₁.P => 20.0, os₂.m => 0.0, os₂.P => 0.0, os₃.m => 0.0, os₃.P => 0.0]
50+
u₀ = [os₁.m => 0.0, os₁.P => 20.0, os₂.m => 0.0, os₂.P => 0.0, os₃.m => 0.0, os₃.P => 0.0]
5151
tspan = (0.0, 100000.0)
5252
oprob = ODEProblem(oderepressilator, u₀, tspan, pvals)
5353
sol = solve(oprob, Tsit5())

0 commit comments

Comments
 (0)