Involution DSL appears unable to read ":continuous" and ":discrete" annotation through variables
fsaad opened this issue · comments
julia> @transform f (model_in, aux_in) to (model_out, aux_out) begin
z = :continuous
@write(model_out[:x], 1, z)
end
ERROR: LoadError: MethodError: no method matching var"@write"(::LineNumberNode, ::Module, ::Expr, ::Int64, ::Symbol)
Closest candidates are:
var"@write"(::LineNumberNode, ::Module, ::Any, ::Any, ::QuoteNode) at ~/.julia/dev/Gen/src/inference/trace_translators.jl:202
Seems like the issue is that we're hardcoding how the :continuous
annotation gets parsed by the macro:
Gen.jl/src/inference/trace_translators.jl
Lines 182 to 194 in b959223
Gen.jl/src/inference/trace_translators.jl
Lines 169 to 180 in b959223
The fixed definition would be something like:
macro read(src, ann)
_typed = GlobalRef(Gen, :typed)
return quote read($(esc(bij_state)), $(esc(src)), $(_typed)($(esc(ann.value)))) end
end
The downside is that it would lead to a somewhat slower dynamic call to the typed
function at run-time, instead of handling that logic at compile time. I'm not sure how much slower, but perhaps it's worth not making the switch and just clearly documenting that the user has to directly specify whether they want something to be :continuous
or :discrete
.