Skip to content

Commit 5c0bd3b

Browse files
committed
up
1 parent d25dd22 commit 5c0bd3b

File tree

1 file changed

+196
-0
lines changed

1 file changed

+196
-0
lines changed

test/upstream/mtk_problem_inputs.jl

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,202 @@ let
175175
end
176176
end
177177

178+
### Vector Species/Parameters Tests ###
179+
180+
begin
181+
# Declares the model (with vector species/parameters, with/without default values, and observables).
182+
t = default_t()
183+
@species X(t)[1:2] Y(t)[1:2] = [10.0, 20.0] XY(t)[1:2]
184+
@parameters p[1:2] d[1:2] = [0.2, 0.5]
185+
rxs = [
186+
Reaction(p[1], [], [X[1]]),
187+
Reaction(p[2], [], [X[2]]),
188+
Reaction(d[1], [X[1]], []),
189+
Reaction(d[2], [X[2]], []),
190+
Reaction(p[1], [], [Y[1]]),
191+
Reaction(p[2], [], [Y[2]]),
192+
Reaction(d[1], [Y[1]], []),
193+
Reaction(d[2], [Y[2]], [])
194+
]
195+
observed = [XY[1] ~ X[1] + Y[1], XY[2] ~ X[2] + Y[2]]
196+
@named model_vec = ReactionSystem(rxs, t; observed)
197+
model_vec = complete(model_vec)
198+
199+
# Declares various u0 versions (scalarised and vector forms).
200+
u0_alts_vec = [
201+
# Vectors not providing default values.
202+
[X => [1.0, 2.0]],
203+
[X[1] => 1.0, X[2] => 2.0],
204+
[model_vec.X => [1.0, 2.0]],
205+
[model_vec.X[1] => 1.0, model_vec.X[2] => 2.0],
206+
[:X => [1.0, 2.0]],
207+
# Vectors providing default values.
208+
[X => [1.0, 2.0], Y => [10.0, 20.0]],
209+
[X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0],
210+
[model_vec.X => [1.0, 2.0], model_vec.Y => [10.0, 20.0]],
211+
[model_vec.X[1] => 1.0, model_vec.X[2] => 2.0, model_vec.Y[1] => 10.0, model_vec.Y[2] => 20.0],
212+
[:X => [1.0, 2.0], :Y => [10.0, 20.0]],
213+
# Static vectors not providing default values.
214+
SA[X => [1.0, 2.0]],
215+
SA[X[1] => 1.0, X[2] => 2.0],
216+
SA[model_vec.X => [1.0, 2.0]],
217+
SA[model_vec.X[1] => 1.0, model_vec.X[2] => 2.0],
218+
SA[:X => [1.0, 2.0]],
219+
# Static vectors providing default values.
220+
SA[X => [1.0, 2.0], Y => [10.0, 20.0]],
221+
SA[X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0],
222+
SA[model_vec.X => [1.0, 2.0], model_vec.Y => [10.0, 20.0]],
223+
SA[model_vec.X[1] => 1.0, model_vec.X[2] => 2.0, model_vec.Y[1] => 10.0, model_vec.Y[2] => 20.0],
224+
SA[:X => [1.0, 2.0], :Y => [10.0, 20.0]],
225+
# Dicts not providing default values.
226+
Dict([X => [1.0, 2.0]]),
227+
Dict([X[1] => 1.0, X[2] => 2.0]),
228+
Dict([model_vec.X => [1.0, 2.0]]),
229+
Dict([model_vec.X[1] => 1.0, model_vec.X[2] => 2.0]),
230+
Dict([:X => [1.0, 2.0]]),
231+
# Dicts providing default values.
232+
Dict([X => [1.0, 2.0], Y => [10.0, 20.0]]),
233+
Dict([X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0]),
234+
Dict([model_vec.X => [1.0, 2.0], model_vec.Y => [10.0, 20.0]]),
235+
Dict([model_vec.X[1] => 1.0, model_vec.X[2] => 2.0, model_vec.Y[1] => 10.0, model_vec.Y[2] => 20.0]),
236+
Dict([:X => [1.0, 2.0], :Y => [10.0, 20.0]]),
237+
# Tuples not providing default values.
238+
(X => [1.0, 2.0]),
239+
(X[1] => 1.0, X[2] => 2.0),
240+
(model_vec.X => [1.0, 2.0]),
241+
(model_vec.X[1] => 1.0, model_vec.X[2] => 2.0),
242+
(:X => [1.0, 2.0]),
243+
# Tuples providing default values.
244+
(X => [1.0, 2.0], Y => [10.0, 20.0]),
245+
(X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0),
246+
(model_vec.X => [1.0, 2.0], model_vec.Y => [10.0, 20.0]),
247+
(model_vec.X[1] => 1.0, model_vec.X[2] => 2.0, model_vec.Y[1] => 10.0, model_vec.Y[2] => 20.0),
248+
(:X => [1.0, 2.0], :Y => [10.0, 20.0]),
249+
]
250+
251+
# Declares various ps versions (vector forms only).
252+
p_alts_vec = [
253+
# Vectors not providing default values.
254+
[p => [1.0, 2.0]],
255+
[model_vec.p => [1.0, 2.0]],
256+
[:p => [1.0, 2.0]],
257+
# Vectors providing default values.
258+
[p => [4.0, 5.0], d => [0.2, 0.5]],
259+
[model_vec.p => [4.0, 5.0], model_vec.d => [0.2, 0.5]],
260+
[:p => [4.0, 5.0], :d => [0.2, 0.5]],
261+
# Static vectors not providing default values.
262+
SA[p => [1.0, 2.0]],
263+
SA[model_vec.p => [1.0, 2.0]],
264+
SA[:p => [1.0, 2.0]],
265+
# Static vectors providing default values.
266+
SA[p => [4.0, 5.0], d => [0.2, 0.5]],
267+
SA[model_vec.p => [4.0, 5.0], model_vec.d => [0.2, 0.5]],
268+
SA[:p => [4.0, 5.0], :d => [0.2, 0.5]],
269+
# Dicts not providing default values.
270+
Dict([p => [1.0, 2.0]]),
271+
Dict([model_vec.p => [1.0, 2.0]]),
272+
Dict([:p => [1.0, 2.0]]),
273+
# Dicts providing default values.
274+
Dict([p => [4.0, 5.0], d => [0.2, 0.5]]),
275+
Dict([model_vec.p => [4.0, 5.0], model_vec.d => [0.2, 0.5]]),
276+
Dict([:p => [4.0, 5.0], :d => [0.2, 0.5]]),
277+
# Tuples not providing default values.
278+
(p => [1.0, 2.0]),
279+
(model_vec.p => [1.0, 2.0]),
280+
(:p => [1.0, 2.0]),
281+
# Tuples providing default values.
282+
(p => [4.0, 5.0], d => [0.2, 0.5]),
283+
(model_vec.p => [4.0, 5.0], model_vec.d => [0.2, 0.5]),
284+
(:p => [4.0, 5.0], :d => [0.2, 0.5]),
285+
]
286+
287+
# Declares a timespan.
288+
tspan = (0.0, 10.0)
289+
end
290+
291+
# Perform ODE simulations (singular and ensemble).
292+
let
293+
# Creates normal and ensemble problems.
294+
base_oprob = ODEProblem(model_vec, u0_alts_vec[1], tspan, p_alts_vec[1])
295+
base_sol = solve(base_oprob, Tsit5(); saveat = 1.0)
296+
base_eprob = EnsembleProblem(base_oprob)
297+
base_esol = solve(base_eprob, Tsit5(); trajectories = 2, saveat = 1.0)
298+
299+
# Simulates problems for all input types, checking that identical solutions are found.
300+
@test_broken false # Cannot remake problem (https://github.com/SciML/ModelingToolkit.jl/issues/2804).
301+
# for u0 in u0_alts_vec, p in p_alts_vec
302+
# oprob = remake(base_oprob; u0, p)
303+
# @test base_sol == solve(oprob, Tsit5(); saveat = 1.0)
304+
# eprob = remake(base_eprob; u0, p)
305+
# @test base_esol == solve(eprob, Tsit5(); trajectories = 2, saveat = 1.0)
306+
# end
307+
end
308+
309+
# Perform SDE simulations (singular and ensemble).
310+
let
311+
# Creates normal and ensemble problems.
312+
base_sprob = SDEProblem(model_vec, u0_alts_vec[1], tspan, p_alts_vec[1])
313+
base_sol = solve(base_sprob, ImplicitEM(); seed, saveat = 1.0)
314+
base_eprob = EnsembleProblem(base_sprob)
315+
base_esol = solve(base_eprob, ImplicitEM(); seed, trajectories = 2, saveat = 1.0)
316+
317+
# Simulates problems for all input types, checking that identical solutions are found.
318+
@test_broken false # Cannot remake problem (https://github.com/SciML/ModelingToolkit.jl/issues/2804).
319+
# for u0 in u0_alts_vec, p in p_alts_vec
320+
# sprob = remake(base_sprob; u0, p)
321+
# @test base_sol == solve(sprob, ImplicitEM(); seed, saveat = 1.0)
322+
# eprob = remake(base_eprob; u0, p)
323+
# @test base_esol == solve(eprob, ImplicitEM(); seed, trajectories = 2, saveat = 1.0)
324+
# end
325+
end
326+
327+
# Perform jump simulations (singular and ensemble).
328+
let
329+
# Creates normal and ensemble problems.
330+
base_dprob = DiscreteProblem(model_vec, u0_alts_vec[1], tspan, p_alts_vec[1])
331+
base_jprob = JumpProblem(model_vec, base_dprob, Direct(); rng)
332+
base_sol = solve(base_jprob, SSAStepper(); seed, saveat = 1.0)
333+
base_eprob = EnsembleProblem(base_jprob)
334+
base_esol = solve(base_eprob, SSAStepper(); seed, trajectories = 2, saveat = 1.0)
335+
336+
# Simulates problems for all input types, checking that identical solutions are found.
337+
@test_broken false # Cannot remake problem (https://github.com/SciML/ModelingToolkit.jl/issues/2804).
338+
# for u0 in u0_alts_vec, p in p_alts_vec
339+
# jprob = remake(base_jprob; u0, p)
340+
# @test base_sol == solve(base_jprob, SSAStepper(); seed, saveat = 1.0)
341+
# eprob = remake(base_eprob; u0, p)
342+
# @test base_esol == solve(eprob, SSAStepper(); seed, trajectories = 2, saveat = 1.0)
343+
# end
344+
end
345+
346+
# Solves a nonlinear problem (EnsembleProblems are not possible for these).
347+
let
348+
base_nlprob = NonlinearProblem(model_vec, u0_alts_vec[1], p_alts_vec[1])
349+
base_sol = solve(base_nlprob, NewtonRaphson())
350+
@test_broken false # Cannot remake problem (https://github.com/SciML/ModelingToolkit.jl/issues/2804).
351+
# for u0 in u0_alts_vec, p in p_alts_vec
352+
# nlprob = remake(base_nlprob; u0, p)
353+
# @test base_sol == solve(nlprob, NewtonRaphson())
354+
# end
355+
end
356+
357+
# Perform steady state simulations (singular and ensemble).
358+
let
359+
# Creates normal and ensemble problems.
360+
base_ssprob = SteadyStateProblem(model_vec, u0_alts_vec[1], p_alts_vec[1])
361+
base_sol = solve(base_ssprob, DynamicSS(Tsit5()))
362+
base_eprob = EnsembleProblem(base_ssprob)
363+
base_esol = solve(base_eprob, DynamicSS(Tsit5()); trajectories = 2)
364+
365+
# Simulates problems for all input types, checking that identical solutions are found.
366+
@test_broken false # Cannot remake problem (https://github.com/SciML/ModelingToolkit.jl/issues/2804).
367+
# for u0 in u0_alts_vec, p in p_alts_vec
368+
# ssprob = remake(base_ssprob; u0, p)
369+
# @test base_sol == solve(ssprob, DynamicSS(Tsit5()))
370+
# eprob = remake(base_eprob; u0, p)
371+
# @test base_esol == solve(eprob, DynamicSS(Tsit5()); trajectories = 2)
372+
# end
373+
end
178374

179375
### Checks Errors On Faulty Inputs ###
180376

0 commit comments

Comments
 (0)