Skip to content

Commit b3c69a9

Browse files
committed
Merge branch 'master' of https://github.com/SciML/ModelingToolkit.jl into depgraphs
2 parents 08e76dd + da1ce37 commit b3c69a9

File tree

3 files changed

+60
-2
lines changed

3 files changed

+60
-2
lines changed

docs/make.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ makedocs(
77
clean=true,doctest=false,
88
format = Documenter.HTML(#analytics = "UA-90474609-3",
99
assets = ["assets/favicon.ico"],
10-
canonical="https://docs.sciml.ai/stable/"),
10+
canonical="https://mtk.sciml.ai/stable/"),
1111
pages=[
1212
"Home" => "index.md",
1313
"highlevel.md",

docs/src/assets/logo.png

26 KB
Loading

test/reactionsystem.jl

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using ModelingToolkit, LinearAlgebra, Test
1+
using ModelingToolkit, LinearAlgebra, DiffEqJump, Test
2+
MT = ModelingToolkit
23

34
@parameters t k[1:20]
45
@variables A(t) B(t) C(t) D(t)
@@ -79,3 +80,60 @@ du2 = sf.f(u,p,t)
7980
@test norm(du-du2) < 100*eps()
8081
G2 = sf.g(u,p,t)
8182
@test norm(G-G2) < 100*eps()
83+
84+
# test with JumpSystem
85+
js = convert(JumpSystem, rs)
86+
87+
@test all(map(type -> type <: DiffEqJump.MassActionJump, typeof.(js.eqs[1:14])))
88+
@test all(map(type -> type <: DiffEqJump.ConstantRateJump, typeof.(js.eqs[15:18])))
89+
@test all(map(type -> type <: DiffEqJump.VariableRateJump, typeof.(js.eqs[19:20])))
90+
91+
pars = rand(length(k)); u0 = rand(1:100,4); time = rand();
92+
jumps = Vector{Union{ConstantRateJump, MassActionJump, VariableRateJump}}(undef,length(js.eqs))
93+
94+
jumps[1] = MassActionJump(pars[1], Vector{Pair{Int,Int}}(), [1 => 1]);
95+
jumps[2] = MassActionJump(pars[2], [2 => 1], [2 => -1]);
96+
jumps[3] = MassActionJump(pars[3], [1 => 1], [1 => -1, 3 => 1]);
97+
jumps[4] = MassActionJump(pars[4], [3 => 1], [1 => 1, 2 => 1, 3 => -1]);
98+
jumps[5] = MassActionJump(pars[5], [3 => 1], [1 => 2, 3 => -1]);
99+
jumps[6] = MassActionJump(pars[6], [1 => 1, 2 => 1], [1 => -1, 2 => -1, 3 => 1]);
100+
jumps[7] = MassActionJump(pars[7], [2 => 2], [1 => 1, 2 => -2]);
101+
jumps[8] = MassActionJump(pars[8], [1 => 1, 2 => 1], [2 => -1, 3 => 1]);
102+
jumps[9] = MassActionJump(pars[9], [1 => 1, 2 => 1], [1 => -1, 2 => -1, 3 => 1, 4 => 1]);
103+
jumps[10] = MassActionJump(pars[10], [1 => 2], [1 => -2, 3 => 1, 4 => 1]);
104+
jumps[11] = MassActionJump(pars[11], [1 => 2], [1 => -1, 2 => 1]);
105+
jumps[12] = MassActionJump(pars[12], [1 => 1, 2 => 3, 3 => 4], [1 => -1, 2 => -3, 3 => -2, 4 => 3]);
106+
jumps[13] = MassActionJump(pars[13], [1 => 3, 2 => 1], [1 => -3, 2 => -1]);
107+
jumps[14] = MassActionJump(pars[14], Vector{Pair{Int,Int}}(), [1 => 2]);
108+
109+
jumps[15] = ConstantRateJump((u,p,t) -> p[15]*u[1]/(2+u[1]), integrator -> (integrator.u[1] -= 1))
110+
jumps[16] = ConstantRateJump((u,p,t) -> p[16], integrator -> (integrator.u[1] -= 1; integrator.u[2] += 1;))
111+
jumps[17] = ConstantRateJump((u,p,t) -> p[17]*u[1]*exp(u[2])*binomial(u[3],2), integrator -> (integrator.u[3] -= 2; integrator.u[4] += 1))
112+
jumps[18] = ConstantRateJump((u,p,t) -> p[18]*u[2], integrator -> (integrator.u[2] += 2))
113+
114+
jumps[19] = VariableRateJump((u,p,t) -> p[19]*u[1]*t, integrator -> (integrator.u[1] -= 1; integrator.u[2] += 1))
115+
jumps[20] = VariableRateJump((u,p,t) -> p[20]*t*u[1]*binomial(u[2],2)*u[3], integrator -> (integrator.u[2] -= 2; integrator.u[3] -= 1; integrator.u[4] += 2))
116+
117+
statetoid = Dict(convert(Variable,state) => i for (i,state) in enumerate(states(js)))
118+
parammap = map((x,y)->Pair(x(),y),parameters(js),pars)
119+
for i = 1:14
120+
maj = MT.assemble_maj(js, js.eqs[i], statetoid,parammap)
121+
@test abs(jumps[i].scaled_rates - maj.scaled_rates) < 10*eps()
122+
@test jumps[i].reactant_stoch == maj.reactant_stoch
123+
@test jumps[i].net_stoch == maj.net_stoch
124+
end
125+
for i = 15:18
126+
(i==16) && continue
127+
crj = MT.assemble_crj(js, js.eqs[i], statetoid)
128+
@test abs(crj.rate(u0,p,time) - jumps[i].rate(u0,p,time)) < 10*eps()
129+
fake_integrator1 = (u=zeros(4),p=p,t=0); fake_integrator2 = deepcopy(fake_integrator1);
130+
crj.affect!(fake_integrator1); jumps[i].affect!(fake_integrator2);
131+
@test fake_integrator1 == fake_integrator2
132+
end
133+
for i = 19:20
134+
crj = MT.assemble_vrj(js, js.eqs[i], statetoid)
135+
@test abs(crj.rate(u0,p,time) - jumps[i].rate(u0,p,time)) < 10*eps()
136+
fake_integrator1 = (u=zeros(4),p=p,t=0.); fake_integrator2 = deepcopy(fake_integrator1);
137+
crj.affect!(fake_integrator1); jumps[i].affect!(fake_integrator2);
138+
@test fake_integrator1 == fake_integrator2
139+
end

0 commit comments

Comments
 (0)