You can create new random variables from manipulations of existing random variables using pm.CustomDist. For example:
import pymc as pm
import arviz as az
def my_dist(nu, shape=None):
t = pm.HalfStudentT.dist(nu=nu, shape=shape)
return pm.math.clip(1 / (2 * t) ** 2, 1e-9, np.inf)
with pm.Model() as m:
sigma = pm.CustomDist('sigma', 2, dist=my_dist)
prior = pm.sample_prior_predictive()
az.plot_posterior(prior.prior)
Generates this absolute beauty:
