Performance Tips

Check that the type of random variables are inferred.

By default, a random variable will print the inferred return type. If this type is broader than you expect, you may be losing type information.

julia> x = normal(0, 1)
3:Normal(0, 1)::Float64

julia> ~ ω -> bernoulli(ω, 0.5, Bool) ?  poisson(ω, 0.3) : uniform(ω, 0.0, 1.0)
15:getfield(Main, Symbol("##19#20"))()()::Union{Float64, Int64}

Use const

It's common in Omega models to have globally defined random variables be parents of other variables. If const is not used, this can lead to type instability. For example:

x = normal(0, 1)
16:Normal(0, 1)::Float64

y_(ω) = 3.0 + x(ω)

y = ~y_
17:y_()::Any

Observe that y_ has Any as the return type

x = normal(0, 1)

y_(ω) = 3.0 + x(ω)

y = ~y_
4:y_()::Float64