incomes = System.Array[float]((63, 16, 28, 55, 22, 20 ))
ages = System.Array[float]((38, 23, 40, 27, 18, 40 ))
willBuy = System.Array[bool]((True, False, True, True, False, False))
dataLen = willBuy.Length
xdata = System.Array.CreateInstance(Vector, dataLen)
for i in range(0, dataLen):
    xdata[i] = Vector.FromArray(System.Array[float]((incomes[i], ages[i], 1.0)))

# Binding the data
x.ObservedValue = xdata
y.ObservedValue = willBuy
len.ObservedValue = dataLen

# Inferring the weights
ie = InferenceEngine()
ie.ShowFactorGraph = True
wPosterior = ie.Infer[VectorGaussian](w)
print "Dist over w=\n", wPosterior

# Prediction
incomesTest = System.Array[float]((58, 18, 22))
agesTest = System.Array[float]((36, 24, 37))
testDataLen = incomesTest.Length
xtestData = System.Array.CreateInstance(Vector, testDataLen)
for i in range(0, testDataLen):
    xtestData[i] = Vector.FromArray(System.Array[float]((incomesTest[i], agesTest[i], 1.0)))

jtest = Range(testDataLen).Named("j")
xtest = Variable.Observed[Vector](xtestData, jtest).Named("xtest")
wtest = Variable.Random[Vector](wPosterior).Named("wtest")
ytest = Variable.Array[bool](jtest).Named("ytest")