y.mean().eval will compute the value and put it in the graph as a constant so wont be effected by future set_data. This little example helped clarify things for me…
import pymc as pm
import numpy as np
import pytensor
x = np.random.randn(5)
with pm.Model() as model:
xdata = pm.Data("x_data",x)
x_centered = xdata - xdata.mean()
print("xdata - xdata.mean()")
pytensor.dprint(x_centered)
with pm.Model() as model:
# Priors
xdata = pm.Data("x_data",x)
x_centered = xdata - xdata.mean().eval()
print('-'*20)
print("xdata - xdata.mean().eval()")
pytensor.dprint(x_centered)
with model:
pm.set_data({"x_data": np.zeros_like(x)})
print('-'*20)
print("After pm.set_data")
pytensor.dprint(x_centered)