Type instability when evaluating prior distributions

Since priors is a vector of heterogeneous elements (Normal and Beta), it does not have a concrete element type. The quickest fix is probably using tuples, and then I would do the same for pars. Eg

using Distributions
const priors = (Normal(0, 1), Beta(2, 5))
const pars = (2.0, 0.9)

function prioreval_test(priors, pars)
    if all(insupport.(priors, pars))
        log_priorval = sum(logpdf.(priors, pars))
        alarm = false
    else
        log_priorval = -Inf
        alarm = true
    end

    return log_priorval, alarm
end

@code_warntype prioreval_test(priors, pars)

That said, I would recommend you use NamedTuples for parameters, which can avoid order mixups.

3 Likes