From 353d086a86e96e8073de24e09470e98db4e6594b Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 29 Oct 2025 05:55:50 +0100 Subject: [PATCH 1/2] #538 Allow for different numeric types for GammaShapeLikelihood --- src/nodes/predefined/gamma_mixture.jl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/nodes/predefined/gamma_mixture.jl b/src/nodes/predefined/gamma_mixture.jl index 687af7359..2d1e1e8d5 100644 --- a/src/nodes/predefined/gamma_mixture.jl +++ b/src/nodes/predefined/gamma_mixture.jl @@ -183,16 +183,19 @@ struct GammaShapeLikelihood{T <: Real} <: ContinuousUnivariateDistribution p::T γ::T # p * β end +GammaShapeLikelihood(p::Real, γ::Real) = GammaShapeLikelihood(promote(p, γ)...) Distributions.params(distribution::GammaShapeLikelihood) = (distribution.p, distribution.γ) Distributions.@distr_support GammaShapeLikelihood 0.0 Inf -BayesBase.support(dist::GammaShapeLikelihood) = Distributions.RealInterval(0.0, Inf) -BayesBase.logpdf(distribution::GammaShapeLikelihood, x::Real) = distribution.γ * x - distribution.p * loggamma(x) +BayesBase.support(distribution::GammaShapeLikelihood{T}) where {T} = Distributions.RealInterval(zero(T), T(Inf)) + +BayesBase.logpdf(distribution::GammaShapeLikelihood{T}, x::Real) where {T} = distribution.γ * x - distribution.p * loggamma(x) BayesBase.default_prod_rule(::Type{<:GammaShapeLikelihood}, ::Type{<:GammaShapeLikelihood}) = PreserveTypeProd(Distribution) -function prod(::PreserveTypeProd{Distribution}, left::GammaShapeLikelihood, right::GammaShapeLikelihood) - return GammaShapeLikelihood(left.p + right.p, left.γ + right.γ) +function prod(::PreserveTypeProd{Distribution}, left::GammaShapeLikelihood{T1}, right::GammaShapeLikelihood{T2}) where {T1, T2} + T = promote_type(T1, T2) + return GammaShapeLikelihood(T(left.p) + T(right.p), T(left.γ) + T(right.γ)) end From 768780de26a207db18d5fdc943b7874adeec2e43 Mon Sep 17 00:00:00 2001 From: Bagaev Dmitry Date: Thu, 30 Oct 2025 11:31:02 +0100 Subject: [PATCH 2/2] Update src/nodes/predefined/gamma_mixture.jl --- src/nodes/predefined/gamma_mixture.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nodes/predefined/gamma_mixture.jl b/src/nodes/predefined/gamma_mixture.jl index 2d1e1e8d5..8abb26c93 100644 --- a/src/nodes/predefined/gamma_mixture.jl +++ b/src/nodes/predefined/gamma_mixture.jl @@ -189,7 +189,7 @@ Distributions.params(distribution::GammaShapeLikelihood) = (distribution.p, dist Distributions.@distr_support GammaShapeLikelihood 0.0 Inf -BayesBase.support(distribution::GammaShapeLikelihood{T}) where {T} = Distributions.RealInterval(zero(T), T(Inf)) +BayesBase.support(distribution::GammaShapeLikelihood{T}) where {T} = Distributions.RealInterval(zero(T), typemax(T)) BayesBase.logpdf(distribution::GammaShapeLikelihood{T}, x::Real) where {T} = distribution.γ * x - distribution.p * loggamma(x)