Thank you, that was very helpful! I managed to get it to work with slight modifications (still got some errors). I found that Theano requires .nonzero() for Boolean indexing to work.
import numpy as np
import pymc3 as pm
import theano
import theano.tensor as tt
cov = np.vstack([np.asarray([-np.inf, -np.inf, np.inf]),
np.random.randn(2, 3)])
print(cov)
inf_mask = cov == np.inf
neg_inf_mask = cov == -np.inf
finite_mask = np.isfinite(cov)
print(cov)
cov = theano.shared(cov)
with pm.Model() as m:
tau = pm.Normal('tau', testval=1.) # <== set a test value here to check result
cov = tt.set_subtensor(cov[neg_inf_mask.nonzero()], tau)
cov = tt.set_subtensor(cov[finite_mask.nonzero()], tau - cov[finite_mask.nonzero()])
cov = tt.set_subtensor(covm[inf_mask.nonzero()], 0)
print(cov.tag.test_value)