|
130 | 130 | # with small-valued VC matrix to check if we only see very small steps |
131 | 131 | vc_μ = convert(Array, 1e-4*I(2)) |
132 | 132 | vc_σ = convert(Array, 1e-4*I(2)) |
133 | | - |
134 | | - chn = sample(mod, |
135 | | - Gibbs( |
136 | | - MH((:μ, vc_μ)), |
137 | | - MH((:σ, vc_σ)), |
138 | | - ), 3_000 # draws |
139 | | - ) |
| 133 | + |
| 134 | + alg = Gibbs( |
| 135 | + MH((:μ, vc_μ)), |
| 136 | + MH((:σ, vc_σ)), |
| 137 | + ) |
| 138 | + |
| 139 | + chn = sample( |
| 140 | + mod, |
| 141 | + alg, |
| 142 | + 3_000 # draws |
| 143 | + ) |
140 | 144 |
|
141 | 145 |
|
142 | 146 | chn2 = sample(mod, MH(), 3_000) |
|
168 | 172 | @test mean(chain, "T[$j][$i]") ≈ 0.2 atol=0.01 |
169 | 173 | end |
170 | 174 | end |
| 175 | + |
| 176 | + @turing_testset "MH link/invlink" begin |
| 177 | + vi_base = DynamicPPL.VarInfo(gdemo_default) |
| 178 | + |
| 179 | + # Don't link when no proposals are given since we're using priors |
| 180 | + # as proposals. |
| 181 | + vi = deepcopy(vi_base) |
| 182 | + alg = MH() |
| 183 | + spl = DynamicPPL.Sampler(alg) |
| 184 | + Turing.Inference.maybe_link!(vi, spl, alg.proposals) |
| 185 | + @test !DynamicPPL.islinked(vi, spl) |
| 186 | + |
| 187 | + # Link if proposal is `AdvancedHM.RandomWalkProposal` |
| 188 | + vi = deepcopy(vi_base) |
| 189 | + d = length(vi_base[DynamicPPL.SampleFromPrior()]) |
| 190 | + alg = MH(AdvancedMH.RandomWalkProposal(MvNormal(d, 1.0))) |
| 191 | + spl = DynamicPPL.Sampler(alg) |
| 192 | + Turing.Inference.maybe_link!(vi, spl, alg.proposals) |
| 193 | + @test DynamicPPL.islinked(vi, spl) |
| 194 | + |
| 195 | + # Link if ALL proposals are `AdvancedHM.RandomWalkProposal`. |
| 196 | + vi = deepcopy(vi_base) |
| 197 | + alg = MH(:s => AdvancedMH.RandomWalkProposal(Normal())) |
| 198 | + spl = DynamicPPL.Sampler(alg) |
| 199 | + Turing.Inference.maybe_link!(vi, spl, alg.proposals) |
| 200 | + @test DynamicPPL.islinked(vi, spl) |
| 201 | + |
| 202 | + # Don't link if at least one proposal is NOT `RandomWalkProposal`. |
| 203 | + # TODO: make it so that only those that are using `RandomWalkProposal` |
| 204 | + # are linked! I.e. resolve https://github.com/TuringLang/Turing.jl/issues/1583. |
| 205 | + # https://github.com/TuringLang/Turing.jl/pull/1582#issuecomment-817148192 |
| 206 | + vi = deepcopy(vi_base) |
| 207 | + alg = MH( |
| 208 | + :m => AdvancedMH.StaticProposal(Normal()), |
| 209 | + :s => AdvancedMH.RandomWalkProposal(Normal()) |
| 210 | + ) |
| 211 | + spl = DynamicPPL.Sampler(alg) |
| 212 | + Turing.Inference.maybe_link!(vi, spl, alg.proposals) |
| 213 | + @test !DynamicPPL.islinked(vi, spl) |
| 214 | + end |
171 | 215 | end |
0 commit comments