Multivariate normal sampler:
        Generates normal samples with mean m, precision matrix LL' 
    Inputs:
        x : 
            propose from 
    Outputs:
        normal with mean m and precision LL'

def multi_normal(X, t):
    """
    Multivariate normal sampler:
        Generates normal samples with mean m, precision matrix LL' 
    Inputs:
        x : 
            propose from 
    Outputs:
        normal with mean m and precision LL'
    """
    m, L = update_params(X, t)
    z = np.random.standard_normal(np.shape(m)) # generate i.i.d N(0,1)
    return  la.solve(L.T,z)+m