-
Notifications
You must be signed in to change notification settings - Fork 37
Closed
Description
julia> @model function demo()
μ ~ Normal()
x = Vector{Float64}(undef, 2)
for i in eachindex(x)
x[i] ~ Normal()
end
return x
end
demo (generic function with 2 methods)
julia> m = demo()
Model{typeof(demo), (), (), (), Tuple{}, Tuple{}, DefaultContext}(:demo, demo, NamedTuple(), NamedTuple(), DefaultContext())
julia> vi = SimpleVarInfo(VarInfo(m))
julia> logjoint(m, vi)
ERROR: type NamedTuple has no field x
Stacktrace:
[1] getproperty
@ ./Base.jl:42 [inlined]
[2] get(obj::NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, l::Setfield.PropertyLens{:x})
@ Setfield ~/.julia/packages/Setfield/9IaGB/src/lens.jl:117
[3] get(obj::NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, l::Setfield.ComposedLens{Setfield.PropertyLens{:x}, Setfield.IndexLens{Tuple{Int64}}})
@ Setfield ~/.julia/packages/Setfield/9IaGB/src/lens.jl:182
[4] get(obj::NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, vn::VarName{:x, Setfield.IndexLens{Tuple{Int64}}})
@ AbstractPPL ~/.julia/packages/AbstractPPL/EkJZe/src/varname.jl:131
[5] getindex(vi::SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64}, vn::VarName{:x, Setfield.IndexLens{Tuple{Int64}}})
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/simple_varinfo.jl:186
[6] getindex(vi::DynamicPPL.ThreadSafeVarInfo{SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64}, Vector{Base.RefValue{Float64}}}, vn::VarName{:x, Setfield.IndexLens{Tuple{Int64}}})
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/threadsafe.jl:65
[7] assume(dist::Normal{Float64}, vn::VarName{:x, Setfield.IndexLens{Tuple{Int64}}}, vi::DynamicPPL.ThreadSafeVarInfo{SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64}, Vector{Base.RefValue{Float64}}})
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/simple_varinfo.jl:341
[8] tilde_assume(#unused#::DynamicPPL.IsLeaf, context::DefaultContext, right::Normal{Float64}, vn::VarName{:x, Setfield.IndexLens{Tuple{Int64}}}, vi::DynamicPPL.ThreadSafeVarInfo{SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64}, Vector{Base.RefValue{Float64}}})
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/context_implementations.jl:39
[9] tilde_assume(::DefaultContext, ::Normal{Float64}, ::VarName{:x, Setfield.IndexLens{Tuple{Int64}}}, ::DynamicPPL.ThreadSafeVarInfo{SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64}, Vector{Base.RefValue{Float64}}})
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/context_implementations.jl:36
[10] tilde_assume!!(context::DefaultContext, right::Normal{Float64}, vn::VarName{:x, Setfield.IndexLens{Tuple{Int64}}}, vi::DynamicPPL.ThreadSafeVarInfo{SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64}, Vector{Base.RefValue{Float64}}})
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/context_implementations.jl:117
[11] demo
@ ./REPL[3]:4 [inlined]
[12] macro expansion
@ ~/.julia/dev/DynamicPPL.jl/src/model.jl:489 [inlined]
[13] _evaluate!!
@ ~/.julia/dev/DynamicPPL.jl/src/model.jl:472 [inlined]
[14] evaluate_threadsafe!!(model::Model{typeof(demo), (), (), (), Tuple{}, Tuple{}, DefaultContext}, varinfo::SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64}, context::DefaultContext)
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/model.jl:463
[15] evaluate!!
@ ~/.julia/dev/DynamicPPL.jl/src/model.jl:402 [inlined]
[16] logjoint(model::Model{typeof(demo), (), (), (), Tuple{}, Tuple{}, DefaultContext}, varinfo::SimpleVarInfo{NamedTuple{(:μ, Symbol("x[1]"), Symbol("x[2]")), Tuple{Float64, Float64, Float64}}, Float64})
@ DynamicPPL ~/.julia/dev/DynamicPPL.jl/src/model.jl:522
[17] top-level scope
@ REPL[18]:1
julia> vi
SimpleVarInfo((μ = 0.35792840316913777, x[1] = -0.05997503801481726, x[2] = -2.2264843907029834), -5.30128684412608)
Looks like indexing with :x into SimpleVarInfo doesn't work, so logjoint fails.
Given SimpleVarInfo is a named tuple that can store arbitrary types, is there anything keeping us from storing arrays in it?
Metadata
Metadata
Assignees
Labels
No labels