Bounded Distributions

Hi all,
I was wondering if there is an easy way of imposing bounds/constraints on existing distributions, e.g. for sampling from a normal distribution in an interval [a, b].

Thanks a lot!

If you are doing MCMC, then it is fine to restrict the support of a distribution to create an unnormalized distribution. I think you can follow the approach in model2 of this tutorial or you can define

bounded_normal = dist.Normal(0, 1)
bounded_normal.support = constraints.interval(a, b)
x = sample('x', bounded_normal)

However, the latter approach does not modify sample method of dist.Normal, so bounded_normal might generate some invalid (out-of-support) samples. To fix that issue, you can specify an initial value for x, for example

kernel = NUTS(model, init_strategy=init_to_value(values={'x': (a + b) / 2})

Thanks a lot, that will work.