'Expands n*(n+1)//2 lower triangular to full matrix,
with off-diagonal entries scaled by 1/sqrt(2).'

@staticmethod
def tri_to_full(lower_tri, n):

    full = np.zeros((n, n))
    for col in range(n):
        for row in range(col, n):
            idx = (((row - col) + ((n * (n + 1)) // 2)) - (((n - col) * ((n - col) + 1)) // 2))
            if (row != col):
                full[(row, col)] = (lower_tri[idx] / np.sqrt(2))
                full[(col, row)] = (lower_tri[idx] / np.sqrt(2))
            else:
                full[(row, col)] = lower_tri[idx]
    return np.reshape(full, (n * n), order='F')
