probcomp / Genify.jl

Automatically convert Julia methods to Gen functions.
Apache License 2.0
47 stars 1 forks source link

Problem with Truncated Normal #6

Open ianfiske opened 2 years ago

ianfiske commented 2 years ago

I'm unable to get Genify working with a truncated distribution. Please see this small example

using Genify
using Distributions

function truncated_normal(mean, sd, lb, ub)
    d = Truncated(Normal(mean, sd), lb, ub)
    x = rand(d)
end

gtruncated_normal = genify(truncated_normal, Float64, Float64, Float64, Float64; recurse=true)

simulate(gtruncated_normal, (0., 1., 0., 10.))

gives

MethodError: no method matching Distributions.Truncated(::Float64, ::Float64, ::Float64, ::Float64)

Closest candidates are:

Distributions.Truncated(!Matched::Distributions.UnivariateDistribution{S} where S<:Distributions.ValueSupport, ::T, ::T, ::T, !Matched::T, !Matched::T, !Matched::T) where T<:Real at /Users/ifiske/.julia/packages/Distributions/i8koA/src/truncate.jl:56

Distributions.Truncated(!Matched::Distributions.UnivariateDistribution{S} where S<:Distributions.ValueSupport, ::Real, ::Real) at deprecated.jl:70

logpdf@distributions.jl:34[inlined]
traceat(::Gen.GFSimulateState, ::Genify.WrappedDistribution{Float64, Distributions.Truncated{Distributions.Normal{Float64}, Distributions.Continuous, Float64}}, ::NTuple{4, Float64}, ::Symbol)@simulate.jl:22
trace@primitives.jl:74[inlined]
splice@Other: 3[inlined]
splice(::Genify.Options{true, true, :static, :none}, ::Gen.GFSimulateState, ::typeof(Main.workspace#156.truncated_normal), ::Float64, ::Float64, ::Float64, ::Float64)@dynamo.jl:0
(::Genify.TracedFunction{NTuple{4, Any}})(::Gen.GFSimulateState, ::Float64, ::Vararg{Float64, N} where N)@transform.jl:58
exec(::Gen.DynamicDSLFunction{Any}, ::Gen.GFSimulateState, ::NTuple{4, Float64})@dynamic.jl:58
simulate@simulate.jl:61[inlined]
top-level scope@Local: 1[inl

Am I doing something incorrect or is there a bug? Thanks!