@@ -49,9 +49,28 @@ using NonlinearSolve
4949 @test integ. ps[p2] == 10.0
5050end
5151
52+ @testset " vector parameter deps" begin
53+ @parameters p1[1 : 2 ]= [1.0 , 2.0 ] p2[1 : 2 ]= [0.0 , 0.0 ]
54+ @variables x (t) = 0
55+
56+ @named sys = ODESystem (
57+ [D (x) ~ sum (p1) * t + sum (p2)],
58+ t;
59+ parameter_dependencies = [p2 => 2 p1]
60+ )
61+ prob = ODEProblem (complete (sys))
62+ setp1! = setp (prob, p1)
63+ get_p1 = getp (prob, p1)
64+ get_p2 = getp (prob, p2)
65+ setp1! (prob, [1.5 , 2.5 ])
66+
67+ @test get_p1 (prob) == [1.5 , 2.5 ]
68+ @test get_p2 (prob) == [3.0 , 5.0 ]
69+ end
70+
5271@testset " extend" begin
5372 @parameters p1= 1.0 p2= 1.0
54- @variables x (t)
73+ @variables x (t) = 0
5574
5675 @mtkbuild sys1 = ODESystem (
5776 [D (x) ~ p1 * t + p2],
6584 sys = extend (sys2, sys1)
6685 @test isequal (only (parameters (sys)), p1)
6786 @test Set (full_parameters (sys)) == Set ([p1, p2])
87+ prob = ODEProblem (complete (sys))
88+ get_dep = getu (prob, 2 p2)
89+ @test get_dep (prob) == 4
90+ end
91+
92+ @testset " getu with parameter deps" begin
93+ @parameters p1= 1.0 p2= 1.0
94+ @variables x (t) = 0
95+
96+ @named sys = ODESystem (
97+ [D (x) ~ p1 * t + p2],
98+ t;
99+ parameter_dependencies = [p2 => 2 p1]
100+ )
101+ prob = ODEProblem (complete (sys))
102+ get_dep = getu (prob, 2 p2)
103+ @test get_dep (prob) == 4
104+ end
105+
106+ @testset " getu with vector parameter deps" begin
107+ @parameters p1[1 : 2 ]= [1.0 , 2.0 ] p2[1 : 2 ]= [0.0 , 0.0 ]
108+ @variables x (t) = 0
109+
110+ @named sys = ODESystem (
111+ [D (x) ~ sum (p1) * t + sum (p2)],
112+ t;
113+ parameter_dependencies = [p2 => 2 p1]
114+ )
115+ prob = ODEProblem (complete (sys))
116+ get_dep = getu (prob, 2 p1)
117+ @test get_dep (prob) == [2.0 , 4.0 ]
118+ end
119+
120+ @testset " composing systems with parameter deps" begin
121+ @parameters p1= 1.0 p2= 2.0
122+ @variables x (t) = 0
123+
124+ @mtkbuild sys1 = ODESystem (
125+ [D (x) ~ p1 * t + p2],
126+ t
127+ )
128+ @named sys2 = ODESystem (
129+ [D (x) ~ p1 * t - p2],
130+ t;
131+ parameter_dependencies = [p2 => 2 p1]
132+ )
133+ sys = complete (ODESystem ([], t, systems = [sys1, sys2], name = :sys ))
134+
135+ prob = ODEProblem (sys)
136+ v1 = sys. sys2. p2
137+ v2 = 2 * v1
138+ @test is_parameter (prob, v1)
139+ @test is_observed (prob, v2)
140+ get_v1 = getu (prob, v1)
141+ get_v2 = getu (prob, v2)
142+ @test get_v1 (prob) == 2
143+ @test get_v2 (prob) == 4
144+
145+ setp1! = setp (prob, sys2. p1)
146+ setp1! (prob, 2.5 )
147+ @test prob. ps[sys2. p2] == 5.0
148+
149+ new_prob = remake (prob, p = [sys2. p1 => 1.5 ])
150+
151+ @test ! isempty (ModelingToolkit. parameter_dependencies (sys2))
152+ @test new_prob. ps[sys2. p1] == 1.5
153+ @test new_prob. ps[sys2. p2] == 3.0
68154end
69155
70156@testset " Clock system" begin
0 commit comments