|
3 | 3 | @testset "Initialize with default proposal" begin |
4 | 4 | state = pf_initialize(line_model, (0,), choicemap(), 100) |
5 | 5 | @test all(-2 <= tr[:slope] <= 2 for tr in get_traces(state)) |
| 6 | + @test all(w ≈ 0 for w in get_log_weights(state)) |
6 | 7 | state = pf_initialize(line_model, (1,), line_choicemap(1), 100) |
7 | 8 | @test all(tr[:line => 1 => :y] == 0 for tr in get_traces(state)) |
8 | 9 | state = pf_initialize(line_model, (10,), line_choicemap(10), 100) |
|
17 | 18 | @testset "Initialize with custom proposal" begin |
18 | 19 | state = pf_initialize(line_model, (0,), choicemap(), line_propose, (0,), 100) |
19 | 20 | @test all(tr[:slope] == 0 for tr in get_traces(state)) |
| 21 | + @test all(w ≈ log(1/5) for w in get_log_weights(state)) |
20 | 22 | state = pf_initialize(line_model, (1,), line_choicemap(1), |
21 | 23 | outlier_propose, ([1],), 100) |
22 | 24 | @test all(tr[:line => 1 => :outlier] == false for tr in get_traces(state)) |
|
38 | 40 | slope_strata = (slope_choicemap(s) for s in -2:1:2) |
39 | 41 | observations = line_choicemap(1) |
40 | 42 | # Test contiguous stratification |
| 43 | + state = pf_initialize(line_model, (0,), choicemap(), |
| 44 | + slope_strata, 100; layout=:contiguous) |
| 45 | + @test all(w ≈ 0 for w in get_log_weights(state)) |
41 | 46 | state = pf_initialize(line_model, (1,), observations, |
42 | 47 | slope_strata, 100; layout=:contiguous) |
43 | 48 | for (k, slope) in zip([20, 40, 60, 80, 100], -2:1:2) |
|
46 | 51 | @test all(tr[:line => 1 => :y] == 0 for tr in traces) |
47 | 52 | end |
48 | 53 | # Test interleaved stratification |
| 54 | + state = pf_initialize(line_model, (0,), choicemap(), |
| 55 | + slope_strata, 100; layout=:interleaved) |
| 56 | + @test all(w ≈ 0 for w in get_log_weights(state)) |
49 | 57 | state = pf_initialize(line_model, (1,), observations, |
50 | 58 | slope_strata, 100; layout=:interleaved) |
51 | 59 | for (k, slope) in zip([1, 2, 3, 4, 5], -2:1:2) |
|
66 | 74 | @test all(tr[:slope] == slope for tr in traces) |
67 | 75 | @test all(tr[:line => 1 => :outlier] == false for tr in traces) |
68 | 76 | @test all(tr[:line => 1 => :y] == 0 for tr in traces) |
| 77 | + expected_w = (logpdf(bernoulli, false, 0.1) + |
| 78 | + logpdf(normal, 0.0, slope, 1.0)) |
| 79 | + @test all(w ≈ expected_w for w in get_log_weights(state[(k-20+1):k])) |
69 | 80 | end |
70 | 81 | # Test interleaved stratification |
71 | 82 | state = pf_initialize(line_model, (1,), observations, slope_strata, |
|
75 | 86 | @test all(tr[:slope] == slope for tr in traces) |
76 | 87 | @test all(tr[:line => 1 => :outlier] == false for tr in traces) |
77 | 88 | @test all(tr[:line => 1 => :y] == 0 for tr in traces) |
| 89 | + expected_w = (logpdf(bernoulli, false, 0.1) + |
| 90 | + logpdf(normal, 0.0, slope, 1.0)) |
| 91 | + @test all(w ≈ expected_w for w in get_log_weights(state[k:5:100])) |
78 | 92 | end |
79 | 93 | end |
80 | 94 |
|
|
0 commit comments