Hi all.

I’m playing around with the effect handlers module, specifically the `lift, substitute, do, condition`

handlers, experimenting with using them to extend a “stereotypical” model into a more flexible family. Knowing that `substitute`

lets us change a `sample`

to a `param`

, and that `lift`

lets us do the opposite, why is it not possible to change a `sample`

of some distribution into a `sample`

of another? i.e. use effect handlers to change a parameter’s prior distribution?

As an example, if I make a bare-bones simple model:

```
def model(X):
x_mu = numpyro.sample( 'x_mu', dist.Uniform(-5.0,5.0))
x_sig = numpyro.sample( 'x_sig', dist.Uniform( 0.0,5.0))
with numpyro.plate('data',len(X)) :
numpyro.sample('x', dist.Normal(x_mu,x_sig), obs=X)
```

And I want to change the prior of `x_mu`

to something else, for example \mathcal{N}(-100,10), how can I do this? I’ve tried using `lift`

, which would let me do this for a `param`

:

```
lifted_model = lift(lifted_model,
{'x_mu': dist.Normal(-100,10)}
)
```

I’ve also tried using `substitute`

to convert it into a `param`

first:

```
lifted_model = condition(model,
{'x_mu': 10.0}
)
lifted_model = lift(lifted_model,
{'x_mu': dist.Normal(-100,10)}
)
```

But in both cases the `lift`

seems to be having no effect on the priors of `lifted_model`

. Have I missed something here? There’s the obvious workaround of having the prior distribution as a model argument, but I’m hoping to avoid this unwieldy approach.

I might be a few months behind on my updates, so apologies if this has been changed in the last while.

Thanks,

Hugh