def test1():
    data = [0.0,1.0]
    fg = construct_fg(data)
    fg.init()
    print fg()
    for i in range(len(data)):
        print "z[{}]: {{{}, {}}}".format(i, fg["z",i].moments(0), fg["z",i].moments(1))
    print "mu1: ", fg["mu1"].moments(0)
    print "mu2: ", fg["mu2"].moments(0)
def test2():
    # generate some data
    data1 = np.random.normal(-0.1, 0.1, 100)
    data2 = np.random.normal( 0.1, 0.1, 200)
    data  = np.append(data1, data2)
    # construct and execute the factor graph
    fg = construct_fg(data)
    fg.init()
    bound = fg()
    plot_fg(fg, data1, data2, bound[3:])
    fg += normal_vnode_t("x")
    fg += normal_vnode_t("vmu1")
    fg += normal_vnode_t("vmu2")
    fg += normal_fnode_t("fmu1", 0, 10)
    fg += normal_fnode_t("fmu2", 0, 10)
    fg += categorical_fnode_t("fz", 2)
    fg += categorical_vnode_t("vz", 2)
    fg += dirichlet_fnode_t("fdir", [1,1])
    fg += dirichlet_vnode_t("vdir", 2)
    fg.link("fz:output", "vz")
    fg.link("fmu1:output", "vmu1")
    fg.link("fmu2:output", "vmu2")
    fg.link("m1:indicator", "vz")
    fg.link("m1:f1:mean", "vmu1")
    fg.link("m1:f2:mean", "vmu2")
    fg.link("m1:output", "x")
    fg.link("fdir:output", "vdir")
    fg.link("fz:theta", "vdir")
    fg.variable_node("x").condition(data)
    return fg

# test
################################################################################

data = [0]

# construct and execute the factor graph
fg = construct_fg(data)
fg.init()
bound = fg()