From 8d35b4536217d83997ff7f9198854490053cfc38 Mon Sep 17 00:00:00 2001 From: Arpan Chakraborty Date: Sat, 2 May 2026 10:11:05 +0530 Subject: [PATCH 1/2] refactor: unify logjoint/logprior/loglikelihood/returned via _evaluate_and_extract helper --- src/model.jl | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/model.jl b/src/model.jl index 6d6a23c28..049b4456e 100644 --- a/src/model.jl +++ b/src/model.jl @@ -1030,12 +1030,16 @@ julia> # Truth. -9902.33787706641 ``` """ +function _evaluate_and_extract(model, params, vi, extract_fn) + init_strategy = InitFromParams(params..., nothing) + return extract_fn(init!!(model, vi, init_strategy, UnlinkAll())) +end + function logjoint(model::Model, params) vi = OnlyAccsVarInfo( AccumulatorTuple(LogPriorAccumulator(), LogLikelihoodAccumulator()) ) - init_strategy = InitFromParams(params, nothing) - return getlogjoint(last(init!!(model, vi, init_strategy, UnlinkAll()))) + return _evaluate_and_extract(model, (params,), vi, x -> getlogjoint(last(x))) end function logjoint(model::Model, varinfo::AbstractVarInfo) return logjoint(model, get_values(varinfo)) @@ -1078,8 +1082,7 @@ julia> # Truth. """ function logprior(model::Model, params) vi = OnlyAccsVarInfo(AccumulatorTuple(LogPriorAccumulator())) - init_strategy = InitFromParams(params, nothing) - return getlogprior(last(init!!(model, vi, init_strategy, UnlinkAll()))) + return _evaluate_and_extract(model, (params,), vi, x -> getlogprior(last(x))) end function logprior(model::Model, varinfo::AbstractVarInfo) return logprior(model, get_values(varinfo)) @@ -1118,8 +1121,7 @@ julia> # Truth. """ function Distributions.loglikelihood(model::Model, params) vi = OnlyAccsVarInfo(AccumulatorTuple(LogLikelihoodAccumulator())) - init_strategy = InitFromParams(params, nothing) - return getloglikelihood(last(init!!(model, vi, init_strategy, UnlinkAll()))) + return _evaluate_and_extract(model, (params,), vi, x -> getloglikelihood(last(x))) end function Distributions.loglikelihood(model::Model, varinfo::AbstractVarInfo) return loglikelihood(model, get_values(varinfo)) @@ -1162,14 +1164,6 @@ julia> returned(model, Dict{VarName,Float64}(@varname(m) => 2.0)) function returned(model::Model, parameters...) # Note: we can't use `fix(model, parameters)` because # https://github.com/TuringLang/DynamicPPL.jl/issues/1097 - return first( - init!!( - model, - DynamicPPL.OnlyAccsVarInfo(DynamicPPL.AccumulatorTuple()), - # Use `nothing` as the fallback to ensure that any missing parameters cause an - # error - InitFromParams(parameters..., nothing), - UnlinkAll(), - ), - ) + vi = DynamicPPL.OnlyAccsVarInfo(DynamicPPL.AccumulatorTuple()) + return _evaluate_and_extract(model, parameters, vi, first) end From 9cda7458e9d8f65adfc78dbc75b118986c255c3e Mon Sep 17 00:00:00 2001 From: Arpan Chakraborty Date: Sat, 2 May 2026 19:11:16 +0530 Subject: [PATCH 2/2] revert: restore original logjoint/logprior/loglikelihood/returned per reviewer feedback --- src/model.jl | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/model.jl b/src/model.jl index 049b4456e..a9947c721 100644 --- a/src/model.jl +++ b/src/model.jl @@ -1030,16 +1030,12 @@ julia> # Truth. -9902.33787706641 ``` """ -function _evaluate_and_extract(model, params, vi, extract_fn) - init_strategy = InitFromParams(params..., nothing) - return extract_fn(init!!(model, vi, init_strategy, UnlinkAll())) -end - function logjoint(model::Model, params) vi = OnlyAccsVarInfo( AccumulatorTuple(LogPriorAccumulator(), LogLikelihoodAccumulator()) ) - return _evaluate_and_extract(model, (params,), vi, x -> getlogjoint(last(x))) + init_strategy = InitFromParams(params, nothing) + return getlogjoint(last(init!!(model, vi, init_strategy, UnlinkAll()))) end function logjoint(model::Model, varinfo::AbstractVarInfo) return logjoint(model, get_values(varinfo)) @@ -1082,7 +1078,8 @@ julia> # Truth. """ function logprior(model::Model, params) vi = OnlyAccsVarInfo(AccumulatorTuple(LogPriorAccumulator())) - return _evaluate_and_extract(model, (params,), vi, x -> getlogprior(last(x))) + init_strategy = InitFromParams(params, nothing) + return getlogprior(last(init!!(model, vi, init_strategy, UnlinkAll()))) end function logprior(model::Model, varinfo::AbstractVarInfo) return logprior(model, get_values(varinfo)) @@ -1121,7 +1118,8 @@ julia> # Truth. """ function Distributions.loglikelihood(model::Model, params) vi = OnlyAccsVarInfo(AccumulatorTuple(LogLikelihoodAccumulator())) - return _evaluate_and_extract(model, (params,), vi, x -> getloglikelihood(last(x))) + init_strategy = InitFromParams(params, nothing) + return getloglikelihood(last(init!!(model, vi, init_strategy, UnlinkAll()))) end function Distributions.loglikelihood(model::Model, varinfo::AbstractVarInfo) return loglikelihood(model, get_values(varinfo)) @@ -1165,5 +1163,6 @@ function returned(model::Model, parameters...) # Note: we can't use `fix(model, parameters)` because # https://github.com/TuringLang/DynamicPPL.jl/issues/1097 vi = DynamicPPL.OnlyAccsVarInfo(DynamicPPL.AccumulatorTuple()) - return _evaluate_and_extract(model, parameters, vi, first) + init_strategy = InitFromParams(parameters..., nothing) + return first(init!!(model, vi, init_strategy, UnlinkAll())) end