-
Notifications
You must be signed in to change notification settings - Fork 37
Closed
Description
Hi guys,
I have some custom Model building code that builds submodels from a NamedTuple. This used to work but broke with a recent update:
@model function priormodel(priors)
# Case 1: Create RV following distribution `d`
_init(name::Symbol, d::Distribution) = Turing.DynamicPPL.tilde_assume(
__context__,
d,
Turing.DynamicPPL.VarName{name}(),
(),
__varinfo__,
)[1]
# Case 2: Create submodel for nested parameters (this is the expanded form of @submodel)
_init(name::Symbol, nt::NamedTuple) = @submodel prefix=$name parammodel(priors[name])
# Case 3: Constant parameter values
_init(name::Symbol, val) = val
return NamedTuple{keys(priors)}(_init(name, priors[name]) for name in keys(priors))
endNow produces a method ambiguity error:
ERROR: MethodError: tilde_assume(::DynamicPPL.IsParent, ::DynamicPPL.PrefixContext{:top, DynamicPPL.SamplingContext{DynamicPPL.SampleFromPrior, DynamicPPL.DefaultContext, Random._GLOBAL_RNG}}, ::Beta{Float64}, ::AbstractPPL.VarName{:winterfactor, Setfield.IdentityLens}, ::Tuple{}, ::DynamicPPL.ThreadSafeVarInfo{DynamicPPL.UntypedVarInfo{DynamicPPL.Metadata{Dict{AbstractPPL.VarName, Int64}, Vector{Distribution}, Vector{AbstractPPL.VarName}, Vector{Real}, Vector{Set{DynamicPPL.Selector}}}, Float64}, Vector{Base.RefValue{Float64}}}) is ambiguous. Candidates:
tilde_assume(rng, context::DynamicPPL.PrefixContext, sampler, right, vn, vi) in DynamicPPL at /home/bgroenke/.julia/packages/DynamicPPL/c8MjC/src/context_implementations.jl:103
tilde_assume(::DynamicPPL.IsParent, context::DynamicPPL.AbstractContext, args...) in DynamicPPL at /home/bgroenke/.julia/packages/DynamicPPL/c8MjC/src/context_implementations.jl:41
Possible fix, define
tilde_assume(::DynamicPPL.IsParent, ::DynamicPPL.PrefixContext, ::Any, ::Any, ::Any, ::Any)
Stacktrace:
[1] tilde_assume(::DynamicPPL.PrefixContext{:top, DynamicPPL.SamplingContext{DynamicPPL.SampleFromPrior, DynamicPPL.DefaultContext, Random._GLOBAL_RNG}}, ::Beta{Float64}, ::AbstractPPL.VarName{:winterfactor, Setfield.IdentityLens}, ::Tuple{}, ::DynamicPPL.ThreadSafeVarInfo{DynamicPPL.UntypedVarInfo{DynamicPPL.Metadata{Dict{AbstractPPL.VarName, Int64}, Vector{Distribution}, Vector{AbstractPPL.VarName}, Vector{Real}, Vector{Set{DynamicPPL.Selector}}}, Float64}, Vector{Base.RefValue{Float64}}})
@ DynamicPPL ~/.julia/packages/DynamicPPL/c8MjC/src/context_implementations.jl:36
I haven't tracked down the exact issue yet. Any ideas?
Julia Version 1.6.1
Commit 6aaedecc44 (2021-04-23 05:59 UTC)
Platform Info:
OS: Linux (x86_64-pc-linux-gnu)
CPU: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-11.0.1 (ORCJIT, skylake)
Environment:
JULIA_EDITOR = "/home/bgroenke/.vscode-server/bin/7f6ab5485bbc008386c4386d08766667e155244e/node"
JULIA_NUM_THREADS = 8
Metadata
Metadata
Assignees
Labels
No labels