@@ -26,5 +26,36 @@ function AbstractMCMC.step(
2626        ),
2727    )
2828    _, vi =  DynamicPPL. evaluate!! (sampling_model, vi)
29-     return  Transition (model, vi, nothing ; reevaluate= false ), nothing 
29+     vi =  DynamicPPL. typed_varinfo (vi)
30+     return  Transition (model, vi, nothing ; reevaluate= false ), vi
31+ end 
32+ 
33+ function  AbstractMCMC. step (
34+     rng:: Random.AbstractRNG ,
35+     model:: DynamicPPL.Model ,
36+     sampler:: DynamicPPL.Sampler{<:Prior} ,
37+     vi:: AbstractVarInfo ;
38+     kwargs... ,
39+ )
40+     #  TODO (DPPL0.38/penelopeysm): replace this entire thing with init!!
41+     # 
42+     #  `vi` is a VarInfo from the previous step so already has all the
43+     #  right accumulators and stuff. The only thing we need to change is to make
44+     #  sure that the old values are overwritten when we resample.
45+     # 
46+     #  Note also that the values in the Transition (and hence the chain) are not
47+     #  obtained from the VarInfo's metadata itself, but are instead obtained
48+     #  from the ValuesAsInModelAccumulator, which is cleared in the evaluate!!
49+     #  call. Thus, the actual values in the VarInfo's metadata don't matter:
50+     #  we only set the del flag here to make sure that new values are sampled
51+     #  (and thus new values enter VAIMAcc), rather than the old ones being
52+     #  reused during the evaluation. Yes, SampleFromPrior really sucks.
53+     for  vn in  keys (vi)
54+         DynamicPPL. set_flag! (vi, vn, " del" 
55+     end 
56+     sampling_model =  DynamicPPL. contextualize (
57+         model, DynamicPPL. SamplingContext (rng, DynamicPPL. SampleFromPrior (), model. context)
58+     )
59+     _, vi =  DynamicPPL. evaluate!! (sampling_model, vi)
60+     return  Transition (model, vi, nothing ; reevaluate= false ), vi
3061end 
0 commit comments