In [67]:
using GraphViz
function make_dot(params, hyperparams, consts, name)
u = merge(consts, params, hyperparams)
s = string("digraph ", name, " {")
# Take each variable by turn
for (varname, set) in u
#println("Variable with name: ", varname)
for var in set
#println("index: ", var[2], " distribution and deps: ", var[7], typeof(var[7]))
if !(typeof(var[7]) in [Symbol, Int64, Int])
#println("trying var", var[7], " with type ", typeof(var[7]))
for othervar in var[7][2]
ov = string(othervar)
if contains(ov, "[")
ov = replace(replace(ov, "[", "_"), "]", "")
end
s = string(s, ov, " -> ", varname, "_", var[2], ";\n")
end
end
end
end
s = string(s, "}")
#println("---------")
#println(s)
return s
end
function plot_graph(params, hyperparams, consts, name)
return Graph(make_dot(params, hyperparams, consts, name))
end
Out[67]:
In [60]:
consts= {:n=>Set{Any}({(:n,-1,:inf,:inf,Int64,(1,1),2)}),:d=>Set{Any}({(:d,-1,:inf,:inf,Int64,(1,1),2)})}
hyperparams = {:K=>Set{Any}({(:K,-1,:inf,:inf,Int64,(1,1),5)})}
params = {:pi=>Set{Any}({(:pi,-1,0.0,1.0,Float64,(:K,1),:unk)}),:sig=>Set{Any}({(:sig,1,:inf,:inf,Float64,(:d,:d),:unk),(:sig,2,:inf,:inf,Float64,(:d,:d),:unk),(:sig,5,:inf,:inf,Float64,(:d,:d),:unk),(:sig,3,:inf,:inf,Float64,(:d,:d),:unk),(:sig,4,:inf,:inf,Float64,(:d,:d),:unk)}),:z=>Set{Any}({(:z,1,:inf,:inf,nothing,(1,1),(:Categorical,{:pi})),(:z,2,:inf,:inf,nothing,(1,1),(:Categorical,{:pi})),(:z,3,:inf,:inf,nothing,(1,1),(:Categorical,{:pi})),(:z,4,:inf,:inf,nothing,(1,1),(:Categorical,{:pi})),(:z,5,:inf,:inf,nothing,(1,1),(:Categorical,{:pi}))}),:mu=>Set{Any}({(:mu,4,:inf,:inf,Float64,(:d,1),:unk),(:mu,2,:inf,:inf,Float64,(:d,1),:unk),(:mu,3,:inf,:inf,Float64,(:d,1),:unk),(:mu,1,:inf,:inf,Float64,(:d,1),:unk),(:mu,5,:inf,:inf,Float64,(:d,1),:unk)}),:x=>Set{Any}({(:x,1,:inf,:inf,nothing,(1,1),(:MultivariateNormal,{:(mu[1]),:(sig[1])})),(:x,2,:inf,:inf,nothing,(1,1),(:MultivariateNormal,{:(mu[1]),:(sig[1])})),(:x,3,:inf,:inf,nothing,(1,1),(:MultivariateNormal,{:(mu[1]),:(sig[1])})),(:x,4,:inf,:inf,nothing,(1,1),(:MultivariateNormal,{:(mu[1]),:(sig[1])})),(:x,5,:inf,:inf,nothing,(1,1),(:MultivariateNormal,{:(mu[1]),:(sig[1])}))})}
Out[60]:
In [65]:
plot_graph(params, hyperparams, consts, "GMM")
Out[65]: