Skip to content

Commit e7ba127

Browse files
noise types
1 parent 6574201 commit e7ba127

File tree

7 files changed

+104
-33
lines changed

7 files changed

+104
-33
lines changed

src/alg_utils.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,10 @@ isdtchangeable(alg::Union{StochasticDiffEqAlgorithm,StochasticDiffEqRODEAlgorith
1919
alg_interpretation(alg::StochasticDiffEqAlgorithm) = :Ito
2020
alg_interpretation(alg::EulerHeun) = :Stratonovich
2121
alg_interpretation{RSWM,interpretation}(alg::RKMil{RSWM,interpretation}) = interpretation
22+
23+
alg_compatible(prob,alg::Union{StochasticDiffEqAlgorithm,StochasticDiffEqRODEAlgorithm}) = true
24+
25+
alg_compatible(prob,alg::SRI) = is_diagonal_noise(prob)
26+
alg_compatible(prob,alg::SRIW1) = is_diagonal_noise(prob)
27+
alg_compatible(prob,alg::SRA) = is_diagonal_noise(prob)
28+
alg_compatible(prob,alg::SRA1) = is_diagonal_noise(prob)

src/caches.jl

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,35 @@ type StochasticCompositeCache{T,F} <: StochasticDiffEqCache
88
current::Int
99
end
1010

11-
function alg_cache{T,algType<:StochasticCompositeAlgorithm}(alg::algType,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{T}})
12-
caches = map((x)->alg_cache(x,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,Val{T}),alg.algs)
11+
function alg_cache{T,algType<:StochasticCompositeAlgorithm}(alg::algType,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{T}})
12+
caches = map((x)->alg_cache(x,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,Val{T}),alg.algs)
1313
StochasticCompositeCache(caches,alg.choice_function,1)
1414
end
1515

1616
immutable EMConstantCache <: StochasticDiffEqConstantCache end
17-
immutable EMCache{uType,rateType} <: StochasticDiffEqMutableCache
17+
immutable EMCache{uType,rateType,rateNoiseType,rateNoiseCollectionType} <: StochasticDiffEqMutableCache
1818
u::uType
1919
uprev::uType
2020
tmp::uType
2121
rtmp1::rateType
22-
rtmp2::rateType
22+
rtmp2::rateNoiseType
23+
rtmp3::rateNoiseCollectionType
2324
end
2425

2526
u_cache(c::EMCache) = ()
2627
du_cache(c::EMCache) = (c.rtmp1,c.rtmp2)
2728

28-
alg_cache(alg::EM,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = EMConstantCache()
29+
alg_cache(alg::EM,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = EMConstantCache()
2930

30-
function alg_cache(alg::EM,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
31-
tmp = similar(u); rtmp1 = zeros(rate_prototype); rtmp2 = zeros(rate_prototype)
32-
EMCache(u,uprev,tmp,rtmp1,rtmp2)
31+
function alg_cache(alg::EM,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
32+
tmp = similar(u); rtmp1 = zeros(rate_prototype);
33+
rtmp2 = zeros(noise_rate_prototype)
34+
if is_diagonal_noise(prob)
35+
rtmp3 = rtmp2
36+
else
37+
rtmp3 = zeros(rate_prototype)
38+
end
39+
EMCache(u,uprev,tmp,rtmp1,rtmp2,rtmp3)
3340
end
3441

3542
immutable EulerHeunConstantCache <: StochasticDiffEqConstantCache end
@@ -46,9 +53,9 @@ end
4653
u_cache(c::EulerHeunCache) = ()
4754
du_cache(c::EulerHeunCache) = (c.rtmp1,c.rtmp2,c.rtmp3,c.rtmp4)
4855

49-
alg_cache(alg::EulerHeun,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = EulerHeunConstantCache()
56+
alg_cache(alg::EulerHeun,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = EulerHeunConstantCache()
5057

51-
function alg_cache(alg::EulerHeun,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
58+
function alg_cache(alg::EulerHeun,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
5259
tmp = similar(u); rtmp1 = zeros(rate_prototype); rtmp2 = zeros(rate_prototype)
5360
rtmp3 = zeros(rate_prototype); rtmp4 = zeros(rate_prototype)
5461
EulerHeunCache(u,uprev,tmp,rtmp1,rtmp2,rtmp3,rtmp4)
@@ -65,9 +72,9 @@ end
6572
u_cache(c::RandomEMCache) = ()
6673
du_cache(c::RandomEMCache) = (c.rtmp1,c.rtmp2)
6774

68-
alg_cache(alg::RandomEM,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = RandomEMConstantCache()
75+
alg_cache(alg::RandomEM,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = RandomEMConstantCache()
6976

70-
function alg_cache(alg::RandomEM,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
77+
function alg_cache(alg::RandomEM,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
7178
tmp = similar(u); rtmp = zeros(rate_prototype)
7279
RandomEMCache(u,uprev,tmp,rtmp)
7380
end
@@ -86,16 +93,16 @@ end
8693
u_cache(c::RKMilCache) = ()
8794
du_cache(c::RKMilCache) = (c.du1,c.du2,c.K,c.L)
8895

89-
alg_cache(alg::RKMil,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = RKMilConstantCache()
96+
alg_cache(alg::RKMil,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = RKMilConstantCache()
9097

91-
function alg_cache(alg::RKMil,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
98+
function alg_cache(alg::RKMil,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
9299
du1 = zeros(rate_prototype); du2 = zeros(rate_prototype)
93100
K = zeros(rate_prototype); tmp = similar(u); L = zeros(rate_prototype)
94101
RKMilCache(u,uprev,du1,du2,K,tmp,L)
95102
end
96103

97104
immutable SRA1ConstantCache <: StochasticDiffEqConstantCache end
98-
alg_cache(alg::SRA1,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = SRA1ConstantCache()
105+
alg_cache(alg::SRA1,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = SRA1ConstantCache()
99106

100107
immutable SRA1Cache{randType,rateType,uType} <: StochasticDiffEqMutableCache
101108
u::uType
@@ -115,7 +122,7 @@ u_cache(c::SRA1Cache) = ()
115122
du_cache(c::SRA1Cache) = (c.chi2,c.E₁,c.E₂,c.gt,c.k₁,c.k₂,c.gpdt)
116123
user_cache(c::SRA1Cache) = (c.u,c.uprev,c.tmp,c.tmp1)
117124

118-
function alg_cache(alg::SRA1,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
125+
function alg_cache(alg::SRA1,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
119126
chi2 = similar(ΔW)
120127
tmp1 = zeros(u)
121128
E₁ = zeros(rate_prototype); gt = zeros(rate_prototype); gpdt = zeros(rate_prototype)
@@ -143,7 +150,7 @@ function SRAConstantCache(tableau,rate_prototype)
143150
SRAConstantCache(c₀,c₁,A₀',B₀',α,β₁,β₂,stages,H0)
144151
end
145152

146-
function alg_cache(alg::SRA,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}})
153+
function alg_cache(alg::SRA,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}})
147154
SRAConstantCache(alg.tableau,rate_prototype)
148155
end
149156

@@ -170,7 +177,7 @@ du_cache(c::SRACache) = (c.A0temp,c.B0temp,c.ftmp,c.gtmp,c.chi2,c.chi2,c.atemp,
170177
c.btemp,c.E₁,c.E₁temp,c.E₂)
171178
user_cache(c::SRACache) = (c.u,c.uprev,c.tmp,c.H0...)
172179

173-
function alg_cache(alg::SRA,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
180+
function alg_cache(alg::SRA,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
174181
H0 = Vector{typeof(u)}(0)
175182
tab = SRAConstantCache(alg.tableau,rate_prototype)
176183
for i = 1:tab.stages
@@ -210,7 +217,7 @@ function SRIConstantCache(tableau,rate_prototype,error_terms)
210217
SRIConstantCache(c₀,c₁,A₀',A₁',B₀',B₁',α,β₁,β₂,β₃,β₄,stages,H0,H1,error_terms)
211218
end
212219

213-
function alg_cache(alg::SRI,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}})
220+
function alg_cache(alg::SRI,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}})
214221
SRIConstantCache(alg.tableau,rate_prototype,alg.error_terms)
215222
end
216223

@@ -247,7 +254,7 @@ du_cache(c::SRICache) = (c.A0temp,c.A1temp,c.B0temp,c.B1temp,c.A0temp2,c.A1temp2
247254
c.ftemp,c.gtemp,c.chi1,c.chi2,c.chi3)
248255
user_cache(c::SRICache) = (c.u,c.uprev,c.tmp,c.H0...,c.H1...)
249256

250-
function alg_cache(alg::SRI,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
257+
function alg_cache(alg::SRI,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
251258
H0 = Vector{typeof(u)}(0)
252259
H1 = Vector{typeof(u)}(0)
253260
tab = SRIConstantCache(alg.tableau,rate_prototype,alg.error_terms)
@@ -270,7 +277,7 @@ function alg_cache(alg::SRI,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits
270277
end
271278

272279
immutable SRIW1ConstantCache <: StochasticDiffEqConstantCache end
273-
alg_cache(alg::SRIW1,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = SRIW1ConstantCache()
280+
alg_cache(alg::SRIW1,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = SRIW1ConstantCache()
274281

275282
immutable SRIW1Cache{randType,uType,rateType} <: StochasticDiffEqMutableCache
276283
u::uType
@@ -305,7 +312,7 @@ du_cache(c::SRIW1Cache) = (c.chi1,c.chi2,c.chi3,c.fH01o4,c.g₁o2,c.g₂o3,c.Fg
305312
c.E₁,c.E₂,c.fH01,c.fH02,c.g₁,c.g₂,c.g₃,c.g₄)
306313
user_cache(c::SRIW1Cache) = (c.u,c.uprev,c.tmp,c.H0,c.H11,c.H12,c.H13)
307314

308-
function alg_cache(alg::SRIW1,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
315+
function alg_cache(alg::SRIW1,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
309316
chi1 = similar(ΔW)
310317
chi2 = similar(ΔW)
311318
chi3 = similar(ΔW)

src/integrators/integrator_utils.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ end
274274
if qtmp>1
275275
dttmp+=L₁
276276
if typeof(integrator.u) <: AbstractArray
277-
for i in eachindex(integrator.u)
277+
for i in eachindex(integrator.ΔW)
278278
integrator.ΔW[i]+=L₂[i]
279279
integrator.ΔZ[i]+=L₃[i]
280280
end
@@ -288,7 +288,7 @@ end
288288
else #Popped too far
289289
generate_tildes(integrator,qtmp*L₂,qtmp*L₃,sqrt(abs((1-qtmp)*qtmp*L₁)))
290290
if typeof(integrator.ΔW) <: AbstractArray
291-
for i in eachindex(integrator.u)
291+
for i in eachindex(integrator.ΔW)
292292
integrator.ΔW[i] += integrator.ΔWtilde[i]
293293
integrator.ΔZ[i] += integrator.ΔZtilde[i]
294294
end
@@ -309,7 +309,7 @@ end
309309
if dtleft != 0 #Stack emptied
310310
generate_tildes(integrator,0,0,sqrt(abs(dtleft)))
311311
if typeof(integrator.ΔW) <: AbstractArray
312-
for i in eachindex(integrator.u)
312+
for i in eachindex(integrator.ΔW)
313313
integrator.ΔW[i] += integrator.ΔWtilde[i]
314314
integrator.ΔZ[i] += integrator.ΔZtilde[i]
315315
end
@@ -327,15 +327,15 @@ end
327327
@inline function update_running_noise!(integrator)
328328
if integrator.opts.save_noise
329329
if typeof(integrator.u) <: AbstractArray
330-
for i in eachindex(integrator.u)
330+
for i in eachindex(integrator.ΔW)
331331
integrator.W[i] = integrator.W[i] + integrator.ΔW[i]
332332
end
333333
else
334334
integrator.W = integrator.W + integrator.ΔW
335335
end
336336
if !(typeof(integrator.alg) <: EM) || !(typeof(integrator.alg) <: RKMil)
337337
if typeof(integrator.u) <: AbstractArray
338-
for i in eachindex(integrator.u)
338+
for i in eachindex(integrator.ΔW)
339339
integrator.Z[i] = integrator.Z[i] + integrator.ΔZ[i]
340340
end
341341
else
@@ -379,7 +379,7 @@ end
379379
if dttmp + L₁ < (1-integrator.q)*integrator.dt #while the backwards movement is less than chop off
380380
dttmp += L₁
381381
if typeof(integrator.u) <: AbstractArray
382-
for i in eachindex(integrator.u)
382+
for i in eachindex(integrator.ΔW)
383383
integrator.ΔWtmp[i] += L₂[i]
384384
integrator.ΔZtmp[i] += L₃[i]
385385
end
@@ -396,7 +396,7 @@ end
396396
dtK = integrator.dt - dttmp
397397
qK = integrator.q*integrator.dt/dtK
398398
if typeof(integrator.ΔW) <: AbstractArray
399-
for i in eachindex(integrator.u)
399+
for i in eachindex(integrator.ΔW)
400400
integrator.ΔWtmp[i] = integrator.ΔW[i] - integrator.ΔWtmp[i]
401401
integrator.ΔZtmp[i] = integrator.ΔZ[i] - integrator.ΔZtmp[i]
402402
end

src/integrators/low_order.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,21 @@
55
end
66

77
@inline function perform_step!(integrator,cache::EMCache,f=integrator.f)
8-
@unpack rtmp1,rtmp2 = cache
8+
@unpack rtmp1,rtmp2,rtmp3 = cache
99
@unpack t,dt,uprev,u,ΔW = integrator
1010
integrator.f(t,uprev,rtmp1)
1111
integrator.g(t,uprev,rtmp2)
12+
13+
if is_diagonal_noise(integrator.sol.prob)
14+
for i in eachindex(u)
15+
rtmp2[i]*=ΔW[i] # rtmp2 === rtmp3
16+
end
17+
else
18+
A_mul_B!(rtmp3,rtmp2,ΔW)
19+
end
20+
1221
for i in eachindex(u)
13-
u[i] = @muladd uprev[i] + dt*rtmp1[i] + rtmp2[i]*ΔW[i]
22+
u[i] = @muladd uprev[i] + dt*rtmp1[i] + rtmp3[i]
1423
end
1524
@pack integrator = t,dt,u
1625
end

src/solve.jl

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ function init{uType,tType,isinplace,NoiseClass,algType<:Union{AbstractRODEAlgori
5353
save_everystep = save_timeseries
5454
end
5555

56+
if !alg_compatible(prob,alg)
57+
error("The algorithm is not compatible with the chosen noise type. Please see the documentation on the solver methods")
58+
end
59+
5660
noise = prob.noise
5761
tspan = prob.tspan
5862
tdir = sign(tspan[end]-tspan[1])
@@ -122,6 +126,12 @@ function init{uType,tType,isinplace,NoiseClass,algType<:Union{AbstractRODEAlgori
122126
end
123127
rateType = typeof(rate_prototype) ## Can be different if united
124128

129+
if ND <: Void
130+
noise_rate_prototype = rate_prototype
131+
else
132+
noise_rate_prototype = prob.noise_rate_prototype
133+
end
134+
125135
if typeof(saveat) <: Number
126136
saveat_vec = convert(Vector{tType},saveat:saveat:(tspan[end]-saveat))
127137
# Exclude the endpoint because of floating point issues
@@ -234,8 +244,10 @@ function init{uType,tType,isinplace,NoiseClass,algType<:Union{AbstractRODEAlgori
234244
randElType = typeof(u[1]/u[1]) # Strip units and type info
235245
if ND <: Void # noise_dim isn't set, so it's diagonal
236246
rand_prototype = similar(Array{randElType},indices(u))
247+
elseif typeof(prob) <: AbstractSDEProblem
248+
rand_prototype = similar(Vector{randElType},size(noise_rate_prototype,2))
237249
else
238-
rand_prototype = similar(Vector{randElType},noise.noise_dim)
250+
rand_prototype = prob.rand_prototype
239251
end
240252
randType = typeof(rand_prototype) # Strip units and type info
241253
end
@@ -282,7 +294,7 @@ function init{uType,tType,isinplace,NoiseClass,algType<:Union{AbstractRODEAlgori
282294

283295
rateType = typeof(u/t) ## Can be different if united
284296

285-
cache = alg_cache(alg,u,ΔW,ΔZ,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,Val{isinplace})
297+
cache = alg_cache(alg,prob,u,ΔW,ΔZ,rate_prototype,noise_rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,f,t,Val{isinplace})
286298

287299
id = LinearInterpolationData(timeseries,ts)
288300

test/noise_type_test.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using StochasticDiffEq, DiffEqBase, Base.Test
2+
3+
f = (t,u,du) -> du.=1.01u
4+
g = function (t,u,du)
5+
du[1,1] = 0.3u[1]
6+
du[1,2] = 0.6u[1]
7+
du[1,3] = 0.9u[1]
8+
du[1,4] = 0.12u[2]
9+
du[2,1] = 1.2u[1]
10+
du[2,2] = 0.2u[2]
11+
du[2,3] = 0.3u[2]
12+
du[2,4] = 1.8u[2]
13+
end
14+
prob = SDEProblem(f,g,ones(2),(0.0,1.0),noise_rate_prototype=zeros(2,4))
15+
16+
sol = solve(prob,EM(),dt=1/1000)
17+
18+
@test length(sol.W[1]) == 4
19+
20+
g = function (t,u,du)
21+
@test typeof(du) <: SparseMatrixCSC
22+
du[1,1] = 0.3u[1]
23+
du[1,2] = 0.6u[1]
24+
du[1,3] = 0.9u[1]
25+
du[1,4] = 0.12u[2]
26+
du[2,1] = 1.2u[1]
27+
du[2,2] = 0.2u[2]
28+
du[2,3] = 0.3u[2]
29+
du[2,4] = 1.8u[2]
30+
end
31+
prob = SDEProblem(f,g,ones(2),(0.0,1.0),noise_rate_prototype=sprand(2,4,1.0))
32+
33+
sol = solve(prob,EM(),dt=1/1000)
34+
35+
@test length(sol.W[1]) == 4

test/runtests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const LONGER_TESTS = false
1414
@time @testset "Stratonovich Convergence Tests" begin include("stratonovich_convergence_tests.jl") end
1515
LONGER_TESTS && @time @testset "Weak Convergence Tests" begin include("weak_convergence.jl") end
1616
@time @testset "Number Type Tests" begin include("sde/sde_numbertype_tests.jl") end
17+
@time @testset "Noise Type Tests" begin include("noise_type_test.jl") end
1718
@time @testset "tdir Tests" begin include("tdir_tests.jl") end
1819
@time @testset "tstops Tests" begin include("tstops_tests.jl") end
1920
@time @testset "saveat Tests" begin include("saveat_tests.jl") end

0 commit comments

Comments
 (0)