# Alterna AI chapter 04: verified standalone examples
p, values = [.5,.25,.25], [0,1,2]
mean = sum(a*b for a,b in zip(p,values))
variance = sum(a*(b-mean)**2 for a,b in zip(p,values))
assert mean == .75 and variance == .6875


prior, sensitivity, fpr = .01,.9,.05
positive = prior*sensitivity+(1-prior)*fpr
posterior = prior*sensitivity/positive
assert abs(posterior-2/13)<1e-12


theta = .75
likelihood = theta**3 * (1-theta)
assert likelihood == .10546875


from math import log
p = [.5,.25,.25]
entropy = -sum(v*log(v) for v in p if v>0)
assert abs(entropy-1.5*log(2))<1e-12


from math import log
p,q = [.5,.25,.25],[.25,.5,.25]
ce = -sum(a*log(b) for a,b in zip(p,q) if a>0)
kl = sum(a*log(a/b) for a,b in zip(p,q) if a>0)
assert abs(ce-kl-1.5*log(2))<1e-12


from math import log, exp, sqrt
observed = [.5,.25]
ce = -sum(log(p) for p in observed)/len(observed)
assert abs(exp(ce)-sqrt(8))<1e-12

print('Chapter 04: 6 examples PASS')
