using BenchmarkTools
using pygmalion
using MarkovProcesses

println("Pygmalion:")

str_m = "sir_ctmc"
str_d = "abc_sir_ctmc"
pygmalion.load_model(str_m)
str_oml = "X_I,R,time"
ll_om = split(str_oml, ",")
x0 = State(95.0, 5.0, 0.0, 0.0, 0.0)
p_true = Parameters(0.0012, 0.05)
u = Control(100.0)
tml = 1:400
g_all = create_observation_function([ObserverModel(str_oml, tml)]) 
b1_pyg = @benchmark pygmalion.simulate($f, $g_all, $x0, $u, $p_true; on = nothing, full_timeline = true)
b2_pyg = @benchmark pygmalion.simulate(f, g_all, x0, u, p_true; on = nothing, full_timeline = true)

@timev pygmalion.simulate(f, g_all, x0, u, p_true; on = nothing, full_timeline = true)
@show minimum(b1_pyg), mean(b1_pyg), maximum(b1_pyg)
@show minimum(b2_pyg), mean(b2_pyg), maximum(b2_pyg)

println("MarkovProcesses:")

MarkovProcesses.load_model("SIR")
SIR.time_bound = 100.0
b1 = @benchmark MarkovProcesses.simulate($SIR)
b2 = @benchmark MarkovProcesses.simulate(SIR)

@timev MarkovProcesses.simulate(SIR)
@show minimum(b1), mean(b1), maximum(b1)
@show minimum(b2), mean(b2), maximum(b2)