import math
import numpy as np
import tblHlp as t
A = 1/12
B = A + 1/6
C = A + 2/6
D = A + 3/6
E = A + 4/6
F = A + 5/6
scores = [A,B,C,D,E,F]
characters = ["A","B","C","D","E","F"]
alpha0 = 0.50 # Jeffreys prior
beta0 = 0.50  # Jeffreys prior
s = C  # Select score, A to F 
Vs = 0.04
def posterior(s,Vs):
   alpha = alpha0+s**2*(1-s)/Vs 
   beta = beta0+s*(1-s)**2/Vs 
   PosteriorMean = alpha/(alpha+beta) 
   PosteriorVar = alpha*beta/((alpha+beta)**2*(alpha+beta+1))
   return [PosteriorMean,PosteriorVar]

def posteriorMean(s,Vs):
   r = posterior(s,Vs)
   return r[0]

def posteriorVar(s,Vs):
   r = posterior(s,Vs)
   return r[1]
out ="Midpoint: "
for i, s in enumerate(scores):
   out += " " + characters[i] + " = " + str(round(s,3))
print(out)

print("\nPosterior mean value for different scores: A,B,...,F:\n")
t.tInit(["A","B","C","D","E","F"],7,["          ","Vs=0.04   ","Vs=0.0100 ","Vs=0.0025 "])
for Vs in [0.04,0.01,0.0025]:
   for s in [A,B,C,D,E,F]:
      t.tRowColElement(str(round(posteriorMean(s,Vs),4)))
   t.tPrint()

print("\nPosterior variance for different scores: A,B,...,F:\n")
t.tInit(["A","B","C","D","E","F"],7,["          ","Vs=0.04   ","Vs=0.0100 ","Vs=0.0025 "])
for Vs in [0.04,0.01,0.0025]:
   for s in [A,B,C,D,E,F]:
      t.tRowColElement(str(round(posteriorVar(s,Vs),4)))
   t.tPrint()

print("\nPosterior SD for different scores: A,B,...,F:\n")
t.tInit(["A","B","C","D","E","F"],7,["          ","Vs=0.04   ","Vs=0.0100 ","Vs=0.0025 "])
for Vs in [0.04,0.01,0.0025]:
   for s in [A,B,C,D,E,F]:
      t.tRowColElement(str(round(math.sqrt(posteriorVar(s,Vs)),4)))
   t.tPrint()   
