I don’t know what you tried exactly. This works for me:
import pymc as pm
import numpy as np
print(pm.__version__) # 5.9.0
obs_dataset = np.random.normal(size=(100,))
mask = obs_dataset > 0
with pm.Model() as m:
mu = pm.Normal("mu")
sigma = pm.HalfNormal("sigma")
# We need the value variables of mu and sigma
mu_value, sigma_value = m.replace_rvs_by_values([mu, sigma])
pm.Potential(
'likelihood',
pm.logp(
pm.Normal.dist(mu_value, sigma_value, shape=(100,))[mask],
obs_dataset[mask]
),
)
m.point_logps() # {'mu': -0.92, 'sigma': -0.73, 'likelihood': -61.98}
Sounds more complicated than just filtering out the nans.
import pytensor.tensor as pt
with pm.Model() as m:
mu = pm.Normal("mu")
sigma = pm.HalfNormal("sigma")
bcast_mu = pt.broadcast_to(mu, obs_dataset.shape)
bcast_sigma = pt.broadcast_to(sigma, obs_dataset.shape)
pm.Normal("likelihood", bcast_mu[mask], bcast_sigma[mask], observed=obs_dataset[mask])
m.point_logps() # {'mu': -0.92, 'sigma': -0.73, 'likelihood': -61.98}