Avoid splitting up varnames until absolutely necessary #2632
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
MCMCChains.jl doesn't like vector-valued or matrix-valued variables. Consequently, in Turing we use
DynamicPPL.varname_and_value_leaves
to split things likex
up intox[1]
,x[2]
, ...This is in general a lossy operation since
x
cannot be reconstructed from its individual elements.This conversion used to be done when constructing a
Transition
. However, there was no need to do it so early. This PR changes it such that it is only done within the_params_to_array
method, which is called insidebundle_samples
.On its own, this refactor is quite meaningless from the Turing point of view. However, what it does mean is that if we create a new chains type that doesn't need to break variables up, we can define an
AbstractMCMC.bundle_samples(::Vector{<:Transition}, ..., ::NewChainType)
which retains the original data structure in theNewChainType
, because now theTransition
will have that richer information. This has implications for the rewrite of MCMCChains that I'm currently working on.