Skip to content

Commit eb50d74

Browse files
feat: implement and test SII interface for non-markovian systems
1 parent d5912be commit eb50d74

File tree

3 files changed

+9
-0
lines changed

3 files changed

+9
-0
lines changed

src/systems/abstractsystem.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,8 @@ end
840840
SymbolicIndexingInterface.is_time_dependent(::AbstractTimeDependentSystem) = true
841841
SymbolicIndexingInterface.is_time_dependent(::AbstractTimeIndependentSystem) = false
842842

843+
SymbolicIndexingInterface.is_markovian(sys::AbstractSystem) = !is_dde(sys)
844+
843845
SymbolicIndexingInterface.constant_structure(::AbstractSystem) = true
844846

845847
function SymbolicIndexingInterface.all_variable_symbols(sys::AbstractSystem)

test/dde.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using ModelingToolkit, DelayDiffEq, Test
2+
using SymbolicIndexingInterface: is_markovian
23
using ModelingToolkit: t_nounits as t, D_nounits as D
34

45
p0 = 0.2;
@@ -39,6 +40,7 @@ eqs = [D(x₀) ~ (v0 / (1 + beta0 * (x₂(t - tau)^2))) * (p0 - q0) * x₀ - d0
3940
D(x₂(t)) ~ (v1 / (1 + beta1 * (x₂(t - tau)^2))) * (1 - p1 + q1) * x₁ - d2 * x₂(t)]
4041
@mtkbuild sys = System(eqs, t)
4142
@test ModelingToolkit.is_dde(sys)
43+
@test !is_markovian(sys)
4244
prob = DDEProblem(sys,
4345
[x₀ => 1.0, x₁ => 1.0, x₂(t) => 1.0],
4446
tspan,
@@ -81,6 +83,7 @@ sol = solve(prob, RKMil())
8183
eqs = [D(x(t)) ~ a * x(t) + b * x(t - τ) + c +* x(t) + γ) * η]
8284
@mtkbuild sys = System(eqs, t)
8385
@test ModelingToolkit.is_dde(sys)
86+
@test !is_markovian(sys)
8487
@test equations(sys) == [D(x(t)) ~ a * x(t) + b * x(t - τ) + c]
8588
@test isequal(ModelingToolkit.get_noiseeqs(sys), [α * x(t) + γ])
8689
prob_mtk = SDDEProblem(sys, [x(t) => 1.0 + t], tspan; constant_lags = (τ,));
@@ -106,8 +109,10 @@ eqs = [osc1.jcn ~ osc2.delx,
106109
@named coupledOsc = System(eqs, t)
107110
@named coupledOsc = compose(coupledOsc, systems)
108111
@test ModelingToolkit.is_dde(coupledOsc)
112+
@test !is_markovian(coupledOsc)
109113
@named coupledOsc2 = System(eqs, t; systems)
110114
@test ModelingToolkit.is_dde(coupledOsc2)
115+
@test !is_markovian(coupledOsc2)
111116
for coupledOsc in [coupledOsc, coupledOsc2]
112117
local sys = structural_simplify(coupledOsc)
113118
@test length(equations(sys)) == 4

test/odesystem.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,8 @@ end
13991399
@variables x(t)
14001400
@named sys = ODESystem(D(x) ~ x, t)
14011401
@test !ModelingToolkit.is_dde(sys)
1402+
@test is_markovian(sys)
14021403
@named sys2 = ODESystem(Equation[], t; systems = [sys])
14031404
@test !ModelingToolkit.is_dde(sys)
1405+
@test is_markovian(sys)
14041406
end

0 commit comments

Comments
 (0)