diff --git a/tinyDA/link.py b/tinyDA/link.py index 152647f..ee5f75d 100644 --- a/tinyDA/link.py +++ b/tinyDA/link.py @@ -1,3 +1,5 @@ +import numpy as np + class Link: """The Link class holds all relevant information about an MCMC sample, i.e. @@ -27,11 +29,11 @@ def __init__(self, parameters, prior, model_output, likelihood, qoi=None): ---------- parameters : numpy.ndarray The parameters used to generate the sample - prior : float + prior : float or 1-element array-like The prior log-density model_output : numpy.ndarray The model output - likelihood : float + likelihood : float or 1-element array-like The log-likelihood of the data, given the parameters. qoi : optional A Quantity of Interest. Default is None @@ -39,10 +41,19 @@ def __init__(self, parameters, prior, model_output, likelihood, qoi=None): # internalise parameters. self.parameters = parameters - self.prior = prior + self.prior = _to_scalar(prior, "prior") self.model_output = model_output - self.likelihood = likelihood + self.likelihood = _to_scalar(likelihood, "likelihood") self.qoi = qoi # compute the (unnormalised) posterior. self.posterior = self.prior + self.likelihood + +def _to_scalar(x, name): + arr = np.asarray(x) + if arr.ndim > 0 and arr.size != 1: + raise ValueError( + f"{name} must be a scalar or length-1 array, got shape {arr.shape}" + ) + return arr.item() +