Skip to content

Problem with using Genify with Gen #8

Description

@sdwfrost

I'm trying to run the following example taken from the Genify documentation. genify runs without error on the provided function, but when I try to sample from the model, I get an error:

ERROR: MethodError: no method matching dynamo_generator(::UInt64, ::LineNumberNode, ::TypeVar, ::Type{typeof(Genify.splice)}, ::NTuple{7, DataType})

Closest candidates are:
  dynamo_generator(::UInt64, ::Any, ::Any, ::Any)
   @ IRTools ~/.julia/packages/IRTools/ntYVg/src/reflection/dynamo.jl:140`

Here is the code; is this a Gen or a Genify issue?

using Random, Distributions
using Gen, Genify
using Plots

function sir_model(T::Int, init_pop::Vector{Int},
                   β::Float64=0.5, γ::Float64=0.02)
    # Initialize population history
    pop_history = zeros(Int, 3, T)
    pop_history[:, 1] = init_pop
    tot_pop = sum(init_pop)
    for t in 2:T
        susceptible, infected, recovered = pop_history[:, t-1]
        # Sample number of individuals who are newly infected and recovered
        newly_infected = rand(Binomial(susceptible, β * infected / tot_pop))
        newly_recovered = rand(Binomial(infected, γ))
        # Update the population counts
        susceptible -= newly_infected
        infected += newly_infected - newly_recovered
        recovered += newly_recovered
        pop_history[:, t] = [susceptible, infected, recovered]
    end
    return pop_history
end;

pop_history = sir_model(40, [990, 10, 0], 0.5, 0.25)
plot(pop_history', labels=["Susceptible" "Infected" "Recovered"],
     xlabel="Day", ylabel="Population", title="SIR Model")

# Transform the `sir_model` method by providing its type signature
gen_sir_model = genify(sir_model, Int, Vector{Int}, Float64, Float64);

# Sample a trace from the model where 50 people were infected on day 10
trace, weight = Gen.generate(gen_sir_model, (40, [990, 10, 0], 0.5, 0.25),
                         choicemap((:newly_infected => 10 - 1, 100)))

# Check that trace has the right value
@assert trace[:newly_infected => 10 - 1] == 100
# Plot sampled trace
plot_sir(get_retval(trace))

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions