DynamicPPL.jl icon indicating copy to clipboard operation
DynamicPPL.jl copied to clipboard

`BangBang.setindex!!(vi::SimpleVarInfo{<:AbstractDict}, val, vn::VarName)` returns eltype Any arrays when `vn` is multidimensional

Open sunxd3 opened this issue 2 years ago • 1 comments

MWE

julia> using DynamicPPL
[ Info: Precompiling DynamicPPL [366bfd00-2699-11ea-058f-f148b4cae6d8]

julia> svi = SimpleVarInfo(Dict(@varname(a)=>zeros(2, 2)))
SimpleVarInfo(Dict(a => [0.0 0.0; 0.0 0.0]), 0.0)

julia> DynamicPPL.setindex!!(svi, ones(2, 2), @varname(a[1:2, 1:2]))
SimpleVarInfo(Dict{VarName{:a, Setfield.IdentityLens}, Matrix{Any}}(a => [1.0 1.0; 1.0 1.0]), 0.0)

Possible solutions:

  • Define BangBang.possible function like https://github.com/TuringLang/DynamicPPL.jl/blob/ba16e3bc91e293c58b03ad287637472d6e11f52f/src/utils.jl#L504-L535
  • (Worse performance) add implementation for BangBang.NoBang._setindex with second argument being an array

sunxd3 avatar Sep 02 '23 08:09 sunxd3

More similar issues: https://github.com/TuringLang/Turing.jl/discussions/2094#discussioncomment-7212953

torfjelde avatar Oct 12 '23 17:10 torfjelde