def multinomial(Tot, vec): #Computes the special multinomial function \binom{d}{\alpha} defined in the paper if np.sum(vec)!=Tot: raise(AssertionError("The multinomial is not well defined")) else: if len(vec)==1: return 1 else: return(binom(Tot,vec[0])*multinomial(Tot-vec[0],np.delete(vec,[0])))
def bernstein(n, k): """Bernstein polynomial.""" from scipy.special._ufuncs import binom coeff = binom(n, k) def _bpoly(x): return coeff * x**k * (1 - x)**(n - k) return _bpoly
def P(n, k): return binom(2 ** k, n) * 0.25 ** n * 0.75 ** (2 ** k - n)