diff --git a/src/core/model.jl b/src/core/model.jl index 2d9ed005..8106af40 100644 --- a/src/core/model.jl +++ b/src/core/model.jl @@ -32,7 +32,7 @@ end function type2model(::Type{Model{A,B,M}}) where {A,B,M} args = [fieldnames(A)...] - body = interpret(B) + body = from_type(B) Model(from_type(M), convert(Vector{Symbol},args), body) end diff --git a/src/importance.jl b/src/importance.jl index 7f8842ec..55ebbe36 100644 --- a/src/importance.jl +++ b/src/importance.jl @@ -3,10 +3,10 @@ using MonteCarloMeasurements export importanceSample @inline function importanceSample(p::JointDistribution, q::JointDistribution, _data) - return _importanceSample(p.model, p.args, q.model, q.args, _data) + return _importanceSample(getmodule(p.model), p.model, p.args, q.model, q.args, _data) end -@gg function _importanceSample(p::Model, _pargs, q::Model, _qargs, _data) +@gg M function _importanceSample(M::Module, p::Model, _pargs, q::Model, _qargs, _data) p = type2model(p) q = type2model(q) diff --git a/src/particles.jl b/src/particles.jl index c737de94..b8cd306a 100644 --- a/src/particles.jl +++ b/src/particles.jl @@ -59,14 +59,14 @@ parts(d::iid; N=1000) = map(1:d.size) do j parts(d.dist) end @inline function particles(m::JointDistribution) - return _particles(m.model, m.args) + return _particles(getmodule(m.model), m.model, m.args) end -@gg function _particles(_m::Model, _args) +@gg M function _particles(M::Module, _m::Model, _args) type2model(_m) |> sourceParticles() |> loadvals(_args, NamedTuple()) end -@gg function _particles(_m::Model, _args::NamedTuple{()}) +@gg M function _particles(M::Module, _m::Model, _args::NamedTuple{()}) type2model(_m) |> sourceParticles() end diff --git a/src/primitives/likelihood-weighting.jl b/src/primitives/likelihood-weighting.jl index 9c3e1d9d..42ab2302 100644 --- a/src/primitives/likelihood-weighting.jl +++ b/src/primitives/likelihood-weighting.jl @@ -2,10 +2,10 @@ export weightedSample function weightedSample(m::JointDistribution, _data) - return _weightedSample(m.model, m.args, _data) + return _weightedSample(getmodule(m.model), m.model, m.args, _data) end -@gg function _weightedSample(_m::Model, _args, _data) +@gg M function _weightedSample(M::Module, _m::Model, _args, _data) type2model(_m) |> sourceWeightedSample(_data) |> loadvals(_args, _data) end diff --git a/src/primitives/logpdf.jl b/src/primitives/logpdf.jl index ee256531..c3c50f79 100644 --- a/src/primitives/logpdf.jl +++ b/src/primitives/logpdf.jl @@ -2,10 +2,10 @@ export logpdf function logpdf(m::JointDistribution,x, method=logpdf) - return method(m.model, m.args, x) + return method(getmodule(m.model), m.model, m.args, x) end -@gg function logpdf(_m::Model, _args, _data) +@gg M function logpdf(M::Module, _m::Model, _args, _data) type2model(_m) |> sourceLogpdf() |> loadvals(_args, _data) end diff --git a/src/primitives/rand.jl b/src/primitives/rand.jl index dab21d19..423916c3 100644 --- a/src/primitives/rand.jl +++ b/src/primitives/rand.jl @@ -5,18 +5,19 @@ export rand EmptyNTtype = NamedTuple{(),Tuple{}} where T<:Tuple @inline function rand(m::JointDistribution) - return _rand(m.model, m.args) + @show getmodule(m.model) + return _rand(getmodule(m.model), m.model, m.args) end @inline function rand(m::Model) - return _rand(m, NamedTuple()) + return _rand(getmodule(m), m, NamedTuple()) end -@gg function _rand(_m::Model, _args) +@gg M function _rand(M::Module, _m::Model, _args) type2model(_m) |> sourceRand() |> loadvals(_args, NamedTuple()) end -@gg function _rand(_m::Model, _args::NamedTuple{()}) +@gg M function _rand(M::Module, _m::Model, _args::NamedTuple{()}) type2model(_m) |> sourceRand() end diff --git a/src/primitives/xform.jl b/src/primitives/xform.jl index 85383263..47264e2e 100644 --- a/src/primitives/xform.jl +++ b/src/primitives/xform.jl @@ -12,10 +12,10 @@ export xform function xform(m::JointDistribution{A, B}, _data) where {A,B} - return _xform(m.model, m.args, _data) + return _xform(getmodule(m.model), m.model, m.args, _data) end -@gg function _xform(_m::Model{Asub,B}, _args::A, _data) where {Asub, A,B} +@gg M function _xform(M::Module, _m::Model{Asub,B}, _args::A, _data) where {Asub, A,B} type2model(_m) |> sourceXform(_data) |> loadvals(_args, _data) end diff --git a/src/symbolic/reduce.jl b/src/symbolic/reduce.jl index 4714e8fa..bafca326 100644 --- a/src/symbolic/reduce.jl +++ b/src/symbolic/reduce.jl @@ -12,10 +12,10 @@ end export reduce function reduce(m::JointDistribution,x) - return _reduce(m.model, m.args, x) + return _reduce(getmodule(m.model), m.model, m.args, x) end -@gg function _reduce(_m::Model, _args, _data) +@gg M function _reduce(M::Module, _m::Model, _args, _data) type2model(_m) |> sourceReduce() |> loadvals(_args, _data) end diff --git a/src/symbolic/symbolic.jl b/src/symbolic/symbolic.jl index 4ac10684..d37d6bcf 100644 --- a/src/symbolic/symbolic.jl +++ b/src/symbolic/symbolic.jl @@ -40,7 +40,7 @@ function __init__() )) @eval begin - @gg function codegen(_m::Model, _args, _data) + @gg M function codegen(M::Module, _m::Model, _args, _data) f = _codegen(type2model(_m)) :($f(_args, _data)) end @@ -430,14 +430,14 @@ end symlogpdf(d,x::Sym) = logpdf(d,x) function symlogpdf(m::JointDistribution) - return _symlogpdf(m.model) + return _symlogpdf(getmodule(m.model), m.model) end function symlogpdf(m::Model) - return _symlogpdf(m) + return _symlogpdf(getmodule(m), m) end -@gg function _symlogpdf(_m::Model) +@gg M function _symlogpdf(M::Module, _m::Model) type2model(_m) |> canonical |> sourceSymlogpdf() end