abstract type AbstractLogDensity <: AbstractModel end struct LogDensity{L} <: AbstractLogDensity density :: L end logdensity(model::LogDensity{<:Function}, x; kwargs...) = model.density(x) logdensity(model::LogDensity{<:Distribution}, x; kwargs...) = logpdf(model.density, x) logdensity(model::AbstractMCMC.LogDensityModel, x; kwargs...) = LogDensityProblems.logdensity(model.logdensity, x) include("samplebased.jl") include("multilevel.jl")