Skip to content

Commit 69a39c4

Browse files
committed
use StableRNGs in unit tests
1 parent 4288aa0 commit 69a39c4

File tree

22 files changed

+253
-242
lines changed

22 files changed

+253
-242
lines changed

src/multi_choice_models/LCA.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ function inhibit(x, i)
168168
return v
169169
end
170170

171-
function simulate(model::AbstractLCA; Δt = 0.001, _...)
171+
function simulate(rng::AbstractRNG, model::AbstractLCA; Δt = 0.001, _...)
172172
(; α) = model
173173
n = length(model.ν)
174174
x = fill(0.0, n)
@@ -178,7 +178,7 @@ function simulate(model::AbstractLCA; Δt = 0.001, _...)
178178
time_steps = [t]
179179
while all(x .< α)
180180
t += Δt
181-
increment!(model, x, μΔ; Δt)
181+
increment!(rng, model, x, μΔ; Δt)
182182
push!(evidence, copy(x))
183183
push!(time_steps, t)
184184
end

src/multi_choice_models/MDFT.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ end
185185
function _rand(rng::AbstractRNG, dist::MDFT, x, Δμ; Δt = 0.001)
186186
(; α, τ) = dist
187187
t = 0.0
188-
dist._att_idx = rand(1:2)
188+
dist._att_idx = rand(rng, 1:2)
189189
while all(x .< α)
190190
increment!(rng, dist, x, Δμ; Δt)
191191
t += Δt
@@ -214,7 +214,7 @@ Increments the preference states `x` on each time step.
214214
function increment!(rng::AbstractRNG, dist::MDFT, x, Δμ; Δt)
215215
(; σ, _CM) = dist
216216
n_options = size(_CM, 1)
217-
att_idx = update_attention(dist; Δt)
217+
att_idx = update_attention(rng, dist; Δt)
218218
dist._att_idx = att_idx
219219
v = @view _CM[:, att_idx]
220220
compute_mean_evidence!(dist, x, Δμ, v)
@@ -270,9 +270,9 @@ Switch attention to different attribute based on exponential waiting time.
270270
271271
- `Δt`: duration of time step
272272
"""
273-
function update_attention(dist::MDFT; Δt)
273+
function update_attention(rng, dist::MDFT; Δt)
274274
(; κ, _att_idx) = dist
275-
if rand() prob_switch(κ[_att_idx], Δt)
275+
if rand(rng) prob_switch(κ[_att_idx], Δt)
276276
return _att_idx == 1 ? 2 : 1
277277
end
278278
return _att_idx
@@ -345,7 +345,7 @@ function simulate(rng::AbstractRNG, model::MDFT, M::AbstractArray; Δt = 0.001,
345345
μΔ = fill(0.0, n)
346346
t = 0.0
347347
_CM .= C * M * γ
348-
model._att_idx = rand(1:2)
348+
model._att_idx = rand(rng, 1:2)
349349
distances = compute_distances(model, M)
350350
model.S = compute_feedback_matrix(model, distances)
351351
evidence = [fill(0.0, n)]

src/single_choice_models/Wald.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ end
7474
mean(d::AbstractWald) = mean(InverseGaussian(d.α / d.ν, d.α^2)) + d.τ
7575
std(d::AbstractWald) = std(InverseGaussian(d.α / d.ν, d.α^2))
7676

77-
function simulate(model::Wald; Δt = 0.001)
77+
function simulate(rng::AbstractRNG, model::Wald; Δt = 0.001)
7878
(; ν, α) = model
7979
n = length(model.ν)
8080
x = 0.0
@@ -83,7 +83,7 @@ function simulate(model::Wald; Δt = 0.001)
8383
time_steps = [t]
8484
while x .< α
8585
t += Δt
86-
x = increment!(model, x, ν; Δt)
86+
x = increment!(rng, model, x, ν; Δt)
8787
push!(evidence, x)
8888
push!(time_steps, t)
8989
end

src/single_choice_models/ex_gaussian.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ ExGaussian(; μ = 0.5, σ = 0.20, τ = 0.20) = ExGaussian(μ, σ, τ)
5353

5454
function rand(rng::AbstractRNG, dist::ExGaussian)
5555
(; μ, σ, τ) = dist
56-
return rand(Normal(μ, σ)) + rand(Exponential(τ))
56+
return rand(rng, Normal(μ, σ)) + rand(rng, Exponential(τ))
5757
end
5858

5959
function logpdf(d::ExGaussian, rt::Float64)

src/single_choice_models/wald_mixture.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ function rand(rng::AbstractRNG, d::WaldMixture, n::Int)
7676
return map(x -> rand(rng, d), 1:n)
7777
end
7878

79-
function simulate(model::WaldMixture; Δt = 0.001)
79+
function simulate(rng::AbstractRNG, model::WaldMixture; Δt = 0.001)
8080
(; ν, α, η) = model
8181
n = length(model.ν)
8282
x = 0.0
@@ -86,7 +86,7 @@ function simulate(model::WaldMixture; Δt = 0.001)
8686
ν′ = rand(truncated(Normal(ν, η), 0, Inf))
8787
while x .< α
8888
t += Δt
89-
x = increment!(model, x, ν′; Δt)
89+
x = increment!(rng, model, x, ν′; Δt)
9090
push!(evidence, x)
9191
push!(time_steps, t)
9292
end

test/Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
77
QuadGK = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
88
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
99
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
10+
StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3"
1011
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1112
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
1213
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

test/alternative_geometries/circular_ddm.jl

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,16 @@
6060
@safetestset "rand 1" begin
6161
using Test
6262
using Distributions
63-
using Random
63+
using StableRNGs
6464
using SequentialSamplingModels
6565
using Statistics
6666
include("../KDE.jl")
6767

68-
Random.seed!(550)
68+
rng = StableRNG(584)
6969

7070
model = CDDM(; ν = [1.5, 1], η = [0.0, 0.0], σ = 1.0, α = 1.5, τ = 0.300)
7171

72-
data = rand(model, 100_000)
72+
data = rand(rng, model, 100_000)
7373
approx_pdf = kernel(data[:, 1])
7474

7575
x = range(-π, π, length = 100)
@@ -85,16 +85,16 @@
8585
@safetestset "rand 2" begin
8686
using Test
8787
using Distributions
88-
using Random
88+
using StableRNGs
8989
using SequentialSamplingModels
9090
using Statistics
9191
include("../KDE.jl")
9292

93-
Random.seed!(56)
93+
rng = StableRNG(102)
9494

9595
model = CDDM(; ν = [1.5, -1], η = [0.0, 0.0], σ = 0.5, α = 2.5, τ = 0.400)
9696

97-
data = rand(model, 100_000)
97+
data = rand(rng, model, 100_000)
9898
approx_pdf = kernel(data[:, 1])
9999

100100
x = range(-π, π, length = 200)
@@ -112,19 +112,19 @@
112112
@safetestset "pdf_rt 1" begin
113113
using Test
114114
using Distributions
115-
using Random
115+
using StableRNGs
116116
using SequentialSamplingModels
117117
using SequentialSamplingModels: pdf_rt
118118
using Statistics
119119
include("../KDE.jl")
120120

121-
Random.seed!(1345)
121+
rng = StableRNG(588)
122122

123123
model = CDDM(; ν = [1.75, 1.0], η = [0.50, 0.50], σ = 0.50, α = 2.5, τ = 0.20)
124124

125125
rts = range(model.τ, 3.5, length = 200)
126126
dens = map(rt -> pdf_rt(model, rt), rts)
127-
data = rand(model, 100_000)
127+
data = rand(rng, model, 100_000)
128128

129129
approx_pdf = kernel(data[:, 2])
130130
true_dens = pdf(approx_pdf, rts)
@@ -136,19 +136,19 @@
136136
@safetestset "pdf_rt 2" begin
137137
using Test
138138
using Distributions
139-
using Random
139+
using StableRNGs
140140
using SequentialSamplingModels
141141
using SequentialSamplingModels: pdf_rt
142142
using Statistics
143143
include("../KDE.jl")
144144

145-
Random.seed!(6541)
145+
rng = StableRNG(112)
146146

147147
model = CDDM(; ν = [1.75, 2.0], η = [0.50, 0.50], σ = 0.50, α = 1.0, τ = 0.30)
148148

149149
rts = range(model.τ, 1.5, length = 200)
150150
dens = map(rt -> pdf_rt(model, rt), rts)
151-
data = rand(model, 100_000)
151+
data = rand(rng, model, 100_000)
152152

153153
approx_pdf = kernel(data[:, 2])
154154
true_dens = pdf(approx_pdf, rts)
@@ -162,19 +162,19 @@
162162
@safetestset "pdf_angle 1" begin
163163
using Test
164164
using Distributions
165-
using Random
165+
using StableRNGs
166166
using SequentialSamplingModels
167167
using SequentialSamplingModels: pdf_angle
168168
using Statistics
169169
include("../KDE.jl")
170170

171-
Random.seed!(4556)
171+
rng = StableRNG(478)
172172

173173
model = CDDM(; ν = [1.75, 1.0], η = [0.50, 0.50], σ = 0.50, α = 2.5, τ = 0.20)
174174

175175
θs = range(-π, π, length = 200)
176176
dens = map(θ -> pdf_angle(model, θ), θs)
177-
data = rand(model, 100_000)
177+
data = rand(rng, model, 100_000)
178178

179179
approx_pdf = kernel(data[:, 1])
180180
true_dens = pdf(approx_pdf, θs)
@@ -186,19 +186,19 @@
186186
@safetestset "pdf_angle 2" begin
187187
using Test
188188
using Distributions
189-
using Random
189+
using StableRNGs
190190
using SequentialSamplingModels
191191
using SequentialSamplingModels: pdf_angle
192192
using Statistics
193193
include("../KDE.jl")
194194

195-
Random.seed!(6541)
195+
rng = StableRNG(90)
196196

197197
model = CDDM(; ν = [1.75, 2.0], η = [0.50, 0.50], σ = 0.50, α = 1.0, τ = 0.30)
198198

199199
θs = range(-π, π, length = 200)
200200
dens = map(θ -> pdf_angle(model, θ), θs)
201-
data = rand(model, 100_000)
201+
data = rand(rng, model, 100_000)
202202

203203
approx_pdf = kernel(data[:, 1])
204204
true_dens = pdf(approx_pdf, θs)
@@ -240,16 +240,16 @@
240240
using Test
241241
using Distributions
242242
using SequentialSamplingModels
243-
using Random
243+
using StableRNGs
244244

245-
Random.seed!(584)
245+
rng = StableRNG(665)
246246

247247
sum_logpdf(model, data) = sum(logpdf(model, data))
248248

249249
parms == [1.75, 1.0], η = [0.50, 0.50], σ = 1.0, α = 3.5, τ = 0.30)
250250

251251
model = CDDM(; parms...)
252-
data = rand(model, 1_500)
252+
data = rand(rng, model, 2_000)
253253

254254
τs = range(parms.τ * 0.5, parms.τ, length = 50)
255255
LLs = map(τ -> sum_logpdf(CDDM(; parms..., τ), data), τs)

test/multi_choice_models/ddm_tests.jl

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
@safetestset "DDM pdf 1" begin
33
using SequentialSamplingModels
44
using Test
5-
using Random
6-
Random.seed!(654)
5+
using StableRNGs
6+
rng = StableRNG(225)
77
include("../KDE.jl")
88

99
dist = DDM(; ν = 1.0, α = 0.8, z = 0.5, τ = 0.3)
10-
choice, rt = rand(dist, 10^6)
10+
choice, rt = rand(rng, dist, 10^6)
1111
rt1 = rt[choice .== 1]
1212
p1 = mean(choice .== 1)
1313
p2 = 1 - p1
@@ -27,12 +27,12 @@
2727
@safetestset "DDM pdf 2" begin
2828
using SequentialSamplingModels
2929
using Test
30-
using Random
30+
using StableRNGs
3131
include("../KDE.jl")
32-
Random.seed!(750)
32+
rng = StableRNG(323)
3333

3434
dist = DDM(; ν = 2.0, α = 1.5, z = 0.5, τ = 0.30)
35-
choice, rt = rand(dist, 10^6)
35+
choice, rt = rand(rng, dist, 10^6)
3636
rt1 = rt[choice .== 1]
3737
p1 = mean(choice .== 1)
3838
p2 = 1 - p1
@@ -53,11 +53,11 @@
5353
using SequentialSamplingModels
5454
using Test
5555
using StatsBase
56-
using Random
57-
Random.seed!(7540)
56+
using StableRNGs
57+
rng = StableRNG(111)
5858

5959
dist = DDM(; ν = 1.0, α = 0.8, z = 0.5, τ = 0.3)
60-
choice, rt = rand(dist, 10^5)
60+
choice, rt = rand(rng, dist, 10^5)
6161
rt1 = rt[choice .== 1]
6262
p1 = mean(choice .== 1)
6363
p2 = 1 - p1
@@ -78,11 +78,11 @@
7878
using SequentialSamplingModels
7979
using Test
8080
using StatsBase
81-
using Random
82-
Random.seed!(2200)
81+
using StableRNGs
82+
rng = StableRNG(1444)
8383

8484
dist = DDM(; ν = 2.0, α = 1.5, z = 0.5, τ = 0.30)
85-
choice, rt = rand(dist, 10^5)
85+
choice, rt = rand(rng, dist, 10^5)
8686
rt1 = rt[choice .== 1]
8787
p1 = mean(choice .== 1)
8888
p2 = 1 - p1
@@ -295,20 +295,20 @@
295295
@safetestset "simulate" begin
296296
using SequentialSamplingModels
297297
using Test
298-
using Random
298+
using StableRNGs
299299

300-
Random.seed!(7411)
300+
rng = StableRNG(4548)
301301
α = 0.80
302302
dist = DDM(; α, ν = 3)
303303

304-
time_steps, evidence = simulate(dist; Δt = 0.0001)
304+
time_steps, evidence = simulate(rng, dist; Δt = 0.0001)
305305

306306
@test time_steps[1] 0
307307
@test length(time_steps) == length(evidence)
308308
@test evidence[end] α atol = 0.010
309309

310310
dist = DDM(; α, ν = -3)
311-
time_steps, evidence = simulate(dist; Δt = 0.0001)
311+
time_steps, evidence = simulate(rng, dist; Δt = 0.0001)
312312
@test evidence[end] 0.0 atol = 0.010
313313
end
314314
end

0 commit comments

Comments
 (0)