The difference between condition and substitute is a little unclear in the documentation. And Pyro does not have a substitute poutine, I think, so it may be worth clarifying further.
Would it be also possible to write
hmc_model_sub = block(
condition(hmc_simple_model, {"beta" : beta}), hide=["beta"])
and if so, should the performance be similar?