|
118 | 118 | end
|
119 | 119 | end
|
120 | 120 |
|
121 |
| -# Perform SDE simulations (singular and ensemble). |
122 |
| -let |
123 |
| - # Creates normal and ensemble problems. |
124 |
| - base_sprob = SDEProblem(ssys, u0_alts[1], tspan, p_alts[1]) |
125 |
| - base_sol = solve(base_sprob, ImplicitEM(); seed, saveat = 1.0) |
126 |
| - base_eprob = EnsembleProblem(base_sprob) |
127 |
| - base_esol = solve(base_eprob, ImplicitEM(); seed, trajectories = 2, saveat = 1.0) |
128 |
| - |
129 |
| - # Simulates problems for all input types, checking that identical solutions are found. |
130 |
| - @test_broken false # first remake in subsequent test yields a `ERROR: type Nothing has no field portion`. |
131 |
| - for u0 in u0_alts, p in p_alts |
132 |
| - # sprob = remake(base_sprob; u0, p) |
133 |
| - # @test base_sol == solve(sprob, ImplicitEM(); seed, saveat = 1.0) |
134 |
| - # eprob = remake(base_eprob; u0, p) |
135 |
| - # @test base_esol == solve(eprob, ImplicitEM(); seed, trajectories = 2, saveat = 1.0) |
136 |
| - end |
137 |
| -end |
138 |
| - |
139 |
| -# Perform jump simulations (singular and ensemble). |
140 |
| -let |
141 |
| - # Creates normal and ensemble problems. |
142 |
| - base_dprob = DiscreteProblem(jsys, u0_alts[1], tspan, p_alts[1]) |
143 |
| - base_jprob = JumpProblem(jsys, base_dprob, Direct(); rng) |
144 |
| - base_sol = solve(base_jprob, SSAStepper(); seed, saveat = 1.0) |
145 |
| - base_eprob = EnsembleProblem(base_jprob) |
146 |
| - base_esol = solve(base_eprob, SSAStepper(); seed, trajectories = 2, saveat = 1.0) |
147 |
| - |
148 |
| - # Simulates problems for all input types, checking that identical solutions are found. |
149 |
| - @test_broken false # first remake in subsequent test yields a `ERROR: type Nothing has no field portion`. |
150 |
| - for u0 in u0_alts, p in p_alts |
151 |
| - # jprob = remake(base_jprob; u0, p) |
152 |
| - # @test base_sol == solve(base_jprob, SSAStepper(); seed, saveat = 1.0) |
153 |
| - # eprob = remake(base_eprob; u0, p) |
154 |
| - # @test base_esol == solve(eprob, SSAStepper(); seed, trajectories = 2, saveat = 1.0) |
155 |
| - end |
156 |
| -end |
157 |
| - |
158 | 121 | # Solves a nonlinear problem (EnsembleProblems are not possible for these).
|
159 | 122 | let
|
160 | 123 | base_nlprob = NonlinearProblem(nsys, u0_alts[1], p_alts[1])
|
@@ -183,298 +146,3 @@ let
|
183 | 146 | @test base_esol == solve(eprob, DynamicSS(Tsit5()); trajectories = 2)
|
184 | 147 | end
|
185 | 148 | end
|
186 |
| - |
187 |
| -### Checks Errors On Faulty Inputs ### |
188 |
| - |
189 |
| -# Checks various erroneous problem inputs, ensuring that these throw errors. |
190 |
| -let |
191 |
| - # Prepare system components. |
192 |
| - @parameters k1 k2 k3 |
193 |
| - @variables X1(t) X2(t) X3(t) |
194 |
| - alg_eqs = [ |
195 |
| - 0 ~ -k1 * X1 + k2 * X2, |
196 |
| - 0 ~ k1 * X1 - k2 * X2 |
197 |
| - ] |
198 |
| - diff_eqs = [ |
199 |
| - D(X1) ~ -k1 * X1 + k2 * X2, |
200 |
| - D(X2) ~ k1 * X1 - k2 * X2 |
201 |
| - ] |
202 |
| - noise_eqs = fill(0.01, 2, 2) |
203 |
| - jumps = [ |
204 |
| - MassActionJump(k1, [X1 => 1], [X1 => -1, X2 => 1]), |
205 |
| - MassActionJump(k2, [X2 => 1], [X1 => 1, X2 => -1]) |
206 |
| - ] |
207 |
| - |
208 |
| - # Create systems (without structural_simplify, since that might modify systems to affect intended tests). |
209 |
| - osys = complete(ODESystem(diff_eqs, t; name = :osys)) |
210 |
| - ssys = complete(SDESystem(diff_eqs, noise_eqs, t, [X1, X2], [k1, k2]; name = :ssys)) |
211 |
| - jsys = complete(JumpSystem(jumps, t, [X1, X2], [k1, k2]; name = :jsys)) |
212 |
| - nsys = complete(NonlinearSystem(alg_eqs; name = :nsys)) |
213 |
| - |
214 |
| - # Declares valid initial conditions and parameter values |
215 |
| - u0_valid = [X1 => 1, X2 => 2] |
216 |
| - ps_valid = [k1 => 0.5, k2 => 0.1] |
217 |
| - |
218 |
| - # Declares invalid initial conditions and parameters. This includes both cases where values are |
219 |
| - # missing, or additional ones are given. Includes vector/Tuple/Dict forms. |
220 |
| - u0s_invalid = [ |
221 |
| - # Missing a value. |
222 |
| - [X1 => 1], |
223 |
| - [osys.X1 => 1], |
224 |
| - SA[X1 => 1], |
225 |
| - SA[osys.X1 => 1], |
226 |
| - Dict([X1 => 1]), |
227 |
| - Dict([osys.X1 => 1]), |
228 |
| - (X1 => 1), |
229 |
| - (osys.X1 => 1), |
230 |
| - # Contain an additional value. |
231 |
| - [X1 => 1, X2 => 2, X3 => 3], |
232 |
| - SA[X1 => 1, X2 => 2, X3 => 3], |
233 |
| - Dict([X1 => 1, X2 => 2, X3 => 3]), |
234 |
| - (X1 => 1, X2 => 2, X3 => 3) |
235 |
| - ] |
236 |
| - ps_invalid = [ |
237 |
| - # Missing a value. |
238 |
| - [k1 => 1.0], |
239 |
| - [osys.k1 => 1.0], |
240 |
| - SA[k1 => 1.0], |
241 |
| - SA[osys.k1 => 1.0], |
242 |
| - Dict([k1 => 1.0]), |
243 |
| - Dict([osys.k1 => 1.0]), |
244 |
| - (k1 => 1.0), |
245 |
| - (osys.k1 => 1.0), |
246 |
| - # Contain an additional value. |
247 |
| - [k1 => 1.0, k2 => 2.0, k3 => 3.0], |
248 |
| - SA[k1 => 1.0, k2 => 2.0, k3 => 3.0], |
249 |
| - Dict([k1 => 1.0, k2 => 2.0, k3 => 3.0]), |
250 |
| - (k1 => 1.0, k2 => 2.0, k3 => 3.0) |
251 |
| - ] |
252 |
| - |
253 |
| - # Loops through all potential parameter sets, checking their inputs yield errors. |
254 |
| - # Broken tests are due to this issue: https://github.com/SciML/ModelingToolkit.jl/issues/2779 |
255 |
| - for ps in [[ps_valid]; ps_invalid], u0 in [[u0_valid]; u0s_invalid] |
256 |
| - # Handles problems with/without tspan separately. Special check ensuring that valid inputs passes. |
257 |
| - for (xsys, XProblem) in zip([osys, ssys, jsys], |
258 |
| - [ODEProblem, SDEProblem, DiscreteProblem]) |
259 |
| - if isequal(ps, ps_valid) && isequal(u0, u0_valid) |
260 |
| - XProblem(xsys, u0, (0.0, 1.0), ps) |
261 |
| - @test true |
262 |
| - else |
263 |
| - @test_broken false |
264 |
| - continue |
265 |
| - @test_throws Exception XProblem(xsys, u0, (0.0, 1.0), ps) |
266 |
| - end |
267 |
| - end |
268 |
| - for (xsys, XProblem) in zip([nsys, osys], [NonlinearProblem, SteadyStateProblem]) |
269 |
| - if isequal(ps, ps_valid) && isequal(u0, u0_valid) |
270 |
| - XProblem(xsys, u0, ps) |
271 |
| - @test true |
272 |
| - else |
273 |
| - @test_broken false |
274 |
| - continue |
275 |
| - @test_throws Exception XProblem(xsys, u0, ps) |
276 |
| - end |
277 |
| - end |
278 |
| - end |
279 |
| -end |
280 |
| - |
281 |
| -### Vector Parameter/Variable Inputs ### |
282 |
| - |
283 |
| -begin |
284 |
| - # Declares the model (with vector species/parameters, with/without default values, and observables). |
285 |
| - @variables X(t)[1:2] Y(t)[1:2]=[10.0, 20.0] XY(t)[1:2] |
286 |
| - @parameters p[1:2] d[1:2]=[0.2, 0.5] |
287 |
| - alg_eqs = [ |
288 |
| - 0 ~ p[1] - d[1] * X[1], |
289 |
| - 0 ~ p[2] - d[2] * X[2], |
290 |
| - 0 ~ p[1] - d[1] * Y[1], |
291 |
| - 0 ~ p[2] - d[2] * Y[2] |
292 |
| - ] |
293 |
| - diff_eqs = [ |
294 |
| - D(X[1]) ~ p[1] - d[1] * X[1], |
295 |
| - D(X[2]) ~ p[2] - d[2] * X[2], |
296 |
| - D(Y[1]) ~ p[1] - d[1] * Y[1], |
297 |
| - D(Y[2]) ~ p[2] - d[2] * Y[2] |
298 |
| - ] |
299 |
| - noise_eqs = fill(0.01, 4, 8) |
300 |
| - jumps = [ |
301 |
| - MassActionJump(p[1], Pair{Symbolics.BasicSymbolic{Real}, Int64}[], [X[1] => 1]), |
302 |
| - MassActionJump(p[2], Pair{Symbolics.BasicSymbolic{Real}, Int64}[], [X[2] => 1]), |
303 |
| - MassActionJump(d[1], [X[1] => 1], [X[1] => -1]), |
304 |
| - MassActionJump(d[2], [X[2] => 1], [X[2] => -1]), |
305 |
| - MassActionJump(p[1], Pair{Symbolics.BasicSymbolic{Real}, Int64}[], [Y[1] => 1]), |
306 |
| - MassActionJump(p[2], Pair{Symbolics.BasicSymbolic{Real}, Int64}[], [Y[2] => 1]), |
307 |
| - MassActionJump(d[1], [Y[1] => 1], [Y[1] => -1]), |
308 |
| - MassActionJump(d[2], [Y[2] => 1], [Y[2] => -1]) |
309 |
| - ] |
310 |
| - observed = [XY[1] ~ X[1] + Y[1], XY[2] ~ X[2] + Y[2]] |
311 |
| - |
312 |
| - # Create systems (without structural_simplify, since that might modify systems to affect intended tests). |
313 |
| - osys = complete(ODESystem(diff_eqs, t; observed, name = :osys)) |
314 |
| - ssys = complete(SDESystem( |
315 |
| - diff_eqs, noise_eqs, t, [X[1], X[2], Y[1], Y[2]], [p, d]; observed, name = :ssys)) |
316 |
| - jsys = complete(JumpSystem( |
317 |
| - jumps, t, [X[1], X[2], Y[1], Y[2]], [p, d]; observed, name = :jsys)) |
318 |
| - nsys = complete(NonlinearSystem(alg_eqs; observed, name = :nsys)) |
319 |
| - |
320 |
| - # Declares various u0 versions (scalarised and vector forms). |
321 |
| - u0_alts_vec = [ |
322 |
| - # Vectors not providing default values. |
323 |
| - [X => [1.0, 2.0]], |
324 |
| - [X[1] => 1.0, X[2] => 2.0], |
325 |
| - [osys.X => [1.0, 2.0]], |
326 |
| - [osys.X[1] => 1.0, osys.X[2] => 2.0], |
327 |
| - # Vectors providing default values. |
328 |
| - [X => [1.0, 2.0], Y => [10.0, 20.0]], |
329 |
| - [X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0], |
330 |
| - [osys.X => [1.0, 2.0], osys.Y => [10.0, 20.0]], |
331 |
| - [osys.X[1] => 1.0, osys.X[2] => 2.0, osys.Y[1] => 10.0, osys.Y[2] => 20.0], |
332 |
| - # Static vectors not providing default values. |
333 |
| - SA[X => [1.0, 2.0]], |
334 |
| - SA[X[1] => 1.0, X[2] => 2.0], |
335 |
| - SA[osys.X => [1.0, 2.0]], |
336 |
| - SA[osys.X[1] => 1.0, osys.X[2] => 2.0], |
337 |
| - # Static vectors providing default values. |
338 |
| - SA[X => [1.0, 2.0], Y => [10.0, 20.0]], |
339 |
| - SA[X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0], |
340 |
| - SA[osys.X => [1.0, 2.0], osys.Y => [10.0, 20.0]], |
341 |
| - SA[osys.X[1] => 1.0, osys.X[2] => 2.0, osys.Y[1] => 10.0, osys.Y[2] => 20.0], |
342 |
| - # Dicts not providing default values. |
343 |
| - Dict([X => [1.0, 2.0]]), |
344 |
| - Dict([X[1] => 1.0, X[2] => 2.0]), |
345 |
| - Dict([osys.X => [1.0, 2.0]]), |
346 |
| - Dict([osys.X[1] => 1.0, osys.X[2] => 2.0]), |
347 |
| - # Dicts providing default values. |
348 |
| - Dict([X => [1.0, 2.0], Y => [10.0, 20.0]]), |
349 |
| - Dict([X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0]), |
350 |
| - Dict([osys.X => [1.0, 2.0], osys.Y => [10.0, 20.0]]), |
351 |
| - Dict([osys.X[1] => 1.0, osys.X[2] => 2.0, osys.Y[1] => 10.0, osys.Y[2] => 20.0]), |
352 |
| - # Tuples not providing default values. |
353 |
| - (X => [1.0, 2.0]), |
354 |
| - (X[1] => 1.0, X[2] => 2.0), |
355 |
| - (osys.X => [1.0, 2.0]), |
356 |
| - (osys.X[1] => 1.0, osys.X[2] => 2.0), |
357 |
| - # Tuples providing default values. |
358 |
| - (X => [1.0, 2.0], Y => [10.0, 20.0]), |
359 |
| - (X[1] => 1.0, X[2] => 2.0, Y[1] => 10.0, Y[2] => 20.0), |
360 |
| - (osys.X => [1.0, 2.0], osys.Y => [10.0, 20.0]), |
361 |
| - (osys.X[1] => 1.0, osys.X[2] => 2.0, osys.Y[1] => 10.0, osys.Y[2] => 20.0) |
362 |
| - ] |
363 |
| - |
364 |
| - # Declares various ps versions (vector forms only). |
365 |
| - p_alts_vec = [ |
366 |
| - # Vectors not providing default values. |
367 |
| - [p => [1.0, 2.0]], |
368 |
| - [osys.p => [1.0, 2.0]], |
369 |
| - # Vectors providing default values. |
370 |
| - [p => [4.0, 5.0], d => [0.2, 0.5]], |
371 |
| - [osys.p => [4.0, 5.0], osys.d => [0.2, 0.5]], |
372 |
| - # Static vectors not providing default values. |
373 |
| - SA[p => [1.0, 2.0]], |
374 |
| - SA[osys.p => [1.0, 2.0]], |
375 |
| - # Static vectors providing default values. |
376 |
| - SA[p => [4.0, 5.0], d => [0.2, 0.5]], |
377 |
| - SA[osys.p => [4.0, 5.0], osys.d => [0.2, 0.5]], |
378 |
| - # Dicts not providing default values. |
379 |
| - Dict([p => [1.0, 2.0]]), |
380 |
| - Dict([osys.p => [1.0, 2.0]]), |
381 |
| - # Dicts providing default values. |
382 |
| - Dict([p => [4.0, 5.0], d => [0.2, 0.5]]), |
383 |
| - Dict([osys.p => [4.0, 5.0], osys.d => [0.2, 0.5]]), |
384 |
| - # Tuples not providing default values. |
385 |
| - (p => [1.0, 2.0]), |
386 |
| - (osys.p => [1.0, 2.0]), |
387 |
| - # Tuples providing default values. |
388 |
| - (p => [4.0, 5.0], d => [0.2, 0.5]), |
389 |
| - (osys.p => [4.0, 5.0], osys.d => [0.2, 0.5]) |
390 |
| - ] |
391 |
| - |
392 |
| - # Declares a timespan. |
393 |
| - tspan = (0.0, 10.0) |
394 |
| -end |
395 |
| - |
396 |
| -# Perform ODE simulations (singular and ensemble). |
397 |
| -let |
398 |
| - # Creates normal and ensemble problems. |
399 |
| - base_oprob = ODEProblem(osys, u0_alts_vec[1], tspan, p_alts_vec[1]) |
400 |
| - base_sol = solve(base_oprob, Tsit5(); saveat = 1.0) |
401 |
| - base_eprob = EnsembleProblem(base_oprob) |
402 |
| - base_esol = solve(base_eprob, Tsit5(); trajectories = 2, saveat = 1.0) |
403 |
| - |
404 |
| - # Simulates problems for all input types, checking that identical solutions are found. |
405 |
| - @test_broken false # Does not work for certain inputs, likely related to https://github.com/SciML/ModelingToolkit.jl/issues/2804. |
406 |
| - for u0 in u0_alts_vec, p in p_alts_vec |
407 |
| - oprob = remake(base_oprob; u0, p) |
408 |
| - # @test base_sol == solve(oprob, Tsit5(); saveat = 1.0) |
409 |
| - eprob = remake(base_eprob; u0, p) |
410 |
| - # @test base_esol == solve(eprob, Tsit5(); trajectories = 2, saveat = 1.0) |
411 |
| - end |
412 |
| -end |
413 |
| - |
414 |
| -# Perform SDE simulations (singular and ensemble). |
415 |
| -let |
416 |
| - # Creates normal and ensemble problems. |
417 |
| - base_sprob = SDEProblem(ssys, u0_alts_vec[1], tspan, p_alts_vec[1]) |
418 |
| - base_sol = solve(base_sprob, ImplicitEM(); seed, saveat = 1.0) |
419 |
| - base_eprob = EnsembleProblem(base_sprob) |
420 |
| - base_esol = solve(base_eprob, ImplicitEM(); seed, trajectories = 2, saveat = 1.0) |
421 |
| - |
422 |
| - # Simulates problems for all input types, checking that identical solutions are found. |
423 |
| - @test_broken false # Does not work for certain inputs, likely related to https://github.com/SciML/ModelingToolkit.jl/issues/2804. |
424 |
| - for u0 in u0_alts_vec, p in p_alts_vec |
425 |
| - sprob = remake(base_sprob; u0, p) |
426 |
| - # @test base_sol == solve(sprob, ImplicitEM(); seed, saveat = 1.0) |
427 |
| - eprob = remake(base_eprob; u0, p) |
428 |
| - # @test base_esol == solve(eprob, ImplicitEM(); seed, trajectories = 2, saveat = 1.0) |
429 |
| - end |
430 |
| -end |
431 |
| - |
432 |
| -# Perform jump simulations (singular and ensemble). |
433 |
| -# Fails. At least partially related to https://github.com/SciML/ModelingToolkit.jl/issues/2804. |
434 |
| -@test_broken let |
435 |
| - # Creates normal and ensemble problems. |
436 |
| - base_dprob = DiscreteProblem(jsys, u0_alts_vec[1], tspan, p_alts_vec[1]) |
437 |
| - base_jprob = JumpProblem(jsys, base_dprob, Direct(); rng) |
438 |
| - base_sol = solve(base_jprob, SSAStepper(); seed, saveat = 1.0) |
439 |
| - base_eprob = EnsembleProblem(base_jprob) |
440 |
| - base_esol = solve(base_eprob, SSAStepper(); seed, trajectories = 2, saveat = 1.0) |
441 |
| - |
442 |
| - # Simulates problems for all input types, checking that identical solutions are found. |
443 |
| - @test_broken false # Does not work for certain inputs, likely related to https://github.com/SciML/ModelingToolkit.jl/issues/2804. |
444 |
| - for u0 in u0_alts_vec, p in p_alts_vec |
445 |
| - jprob = remake(base_jprob; u0, p) |
446 |
| - # @test base_sol == solve(base_jprob, SSAStepper(); seed, saveat = 1.0) |
447 |
| - eprob = remake(base_eprob; u0, p) |
448 |
| - # @test base_esol == solve(eprob, SSAStepper(); seed, trajectories = 2, saveat = 1.0) |
449 |
| - end |
450 |
| -end |
451 |
| - |
452 |
| -# Solves a nonlinear problem (EnsembleProblems are not possible for these). |
453 |
| -let |
454 |
| - base_nlprob = NonlinearProblem(nsys, u0_alts_vec[1], p_alts_vec[1]) |
455 |
| - base_sol = solve(base_nlprob, NewtonRaphson()) |
456 |
| - @test_broken false # Does not work for certain inputs, likely related to https://github.com/SciML/ModelingToolkit.jl/issues/2804. |
457 |
| - for u0 in u0_alts_vec, p in p_alts_vec |
458 |
| - nlprob = remake(base_nlprob; u0, p) |
459 |
| - # @test base_sol == solve(nlprob, NewtonRaphson()) |
460 |
| - end |
461 |
| -end |
462 |
| - |
463 |
| -# Perform steady state simulations (singular and ensemble). |
464 |
| -# Fails. At least partially related to https://github.com/SciML/ModelingToolkit.jl/issues/2804. |
465 |
| -let |
466 |
| - # Creates normal and ensemble problems. |
467 |
| - base_ssprob = SteadyStateProblem(osys, u0_alts_vec[1], p_alts_vec[1]) |
468 |
| - base_sol = solve(base_ssprob, DynamicSS(Tsit5())) |
469 |
| - base_eprob = EnsembleProblem(base_ssprob) |
470 |
| - base_esol = solve(base_eprob, DynamicSS(Tsit5()); trajectories = 2) |
471 |
| - |
472 |
| - # Simulates problems for all input types, checking that identical solutions are found. |
473 |
| - @test_broken false # Does not work for certain inputs, likely related to https://github.com/SciML/ModelingToolkit.jl/issues/2804. |
474 |
| - for u0 in u0_alts_vec, p in p_alts_vec |
475 |
| - ssprob = remake(base_ssprob; u0, p) |
476 |
| - # @test base_sol == solve(ssprob, DynamicSS(Tsit5())) |
477 |
| - eprob = remake(base_eprob; u0, p) |
478 |
| - # @test base_esol == solve(eprob, DynamicSS(Tsit5()); trajectories = 2) |
479 |
| - end |
480 |
| -end |
0 commit comments