827827function link!! (vi:: AbstractVarInfo , vns:: VarNameTuple , model:: Model )
828828 return link!! (default_transformation (model, vi), vi, vns, model)
829829end
830+ function link!! (t:: DynamicTransformation , vi:: AbstractVarInfo , model:: Model )
831+ # Note that in practice this method is only called for SimpleVarInfo, because VarInfo
832+ # has a dedicated implementation
833+ ctx = DynamicTransformationContext {false} ()
834+ model = contextualize (model, setleafcontext (model. context, ctx))
835+ vi = last (evaluate!! (model, vi))
836+ return settrans!! (vi, t)
837+ end
838+ function link!! (
839+ t:: StaticTransformation{<:Bijectors.Transform} , vi:: AbstractVarInfo , :: Model
840+ )
841+ b = inverse (t. bijector)
842+ x = vi[:]
843+ y, logjac = with_logabsdet_jacobian (b, x)
844+ # Set parameters and add the logjac term.
845+ vi = unflatten (vi, y)
846+ if hasacc (vi, Val (:LogJacobian ))
847+ vi = acclogjac!! (vi, logjac)
848+ end
849+ return settrans!! (vi, t)
850+ end
830851
831852"""
832853 link([t::AbstractTransformation, ]vi::AbstractVarInfo, model::Model)
846867function link (vi:: AbstractVarInfo , vns:: VarNameTuple , model:: Model )
847868 return link (default_transformation (model, vi), vi, vns, model)
848869end
870+ function link (t:: DynamicTransformation , vi:: AbstractVarInfo , model:: Model )
871+ return link!! (t, deepcopy (vi), model)
872+ end
849873
850874"""
851875 invlink!!([t::AbstractTransformation, ]vi::AbstractVarInfo, model::Model)
@@ -866,23 +890,14 @@ end
866890function invlink!! (vi:: AbstractVarInfo , vns:: VarNameTuple , model:: Model )
867891 return invlink!! (default_transformation (model, vi), vi, vns, model)
868892end
869-
870- # Vector-based ones.
871- function link!! (
872- t:: StaticTransformation{<:Bijectors.Transform} , vi:: AbstractVarInfo , :: Model
873- )
874- b = inverse (t. bijector)
875- x = vi[:]
876- y, logjac = with_logabsdet_jacobian (b, x)
877-
878- # Set parameters and add the logjac term.
879- vi = unflatten (vi, y)
880- if hasacc (vi, Val (:LogJacobian ))
881- vi = acclogjac!! (vi, logjac)
882- end
883- return settrans!! (vi, t)
893+ function invlink!! (:: DynamicTransformation , vi:: AbstractVarInfo , model:: Model )
894+ # Note that in practice this method is only called for SimpleVarInfo, because VarInfo
895+ # has a dedicated implementation
896+ ctx = DynamicTransformationContext {true} ()
897+ model = contextualize (model, setleafcontext (model. context, ctx))
898+ vi = last (evaluate!! (model, vi))
899+ return settrans!! (vi, NoTransformation ())
884900end
885-
886901function invlink!! (
887902 t:: StaticTransformation{<:Bijectors.Transform} , vi:: AbstractVarInfo , :: Model
888903)
919934function invlink (vi:: AbstractVarInfo , vns:: VarNameTuple , model:: Model )
920935 return invlink (default_transformation (model, vi), vi, vns, model)
921936end
937+ function invlink (t:: DynamicTransformation , vi:: AbstractVarInfo , model:: Model )
938+ return invlink!! (t, deepcopy (vi), model)
939+ end
922940
923941"""
924942 maybe_invlink_before_eval!!([t::Transformation,] vi, model)
0 commit comments