code: def posterior(self, x, s=1.):
          
          pr0 = 1. / self.sigma**2  # prior precision
          prd = x.size / s**2  # data precision
          varp = 1. / (pr0 + prd)  # posterior variance
          mu = varp * (pr0 * self.mu + prd * x.mean())
          return TruncNormal(mu=mu, sigma=np.sqrt(varp), a=self.a, b=self.b)
docs: Model is X_1,...,X_n ~ N(theta, s^2), theta~self, s fixed