return n samples drawn from 2D gaussian N(m,sigma)

    Parameters
    ----------

    n : int
        number of samples to make
    m : np.array (2,)
        mean value of the gaussian distribution
    sigma : np.array (2,2)
        covariance matrix of the gaussian distribution
    random_state : int, RandomState instance or None, optional (default=None)
        If int, random_state is the seed used by the random number generator;
        If RandomState instance, random_state is the random number generator;
        If None, the random number generator is the RandomState instance used
        by `np.random`.

    Returns
    -------
    X : np.array (n,2)
          n samples drawn from  N(m,sigma)

def make_2D_samples_gauss(n, m, sigma, random_state=None):
    """return n samples drawn from 2D gaussian N(m,sigma)

    Parameters
    ----------

    n : int
        number of samples to make
    m : np.array (2,)
        mean value of the gaussian distribution
    sigma : np.array (2,2)
        covariance matrix of the gaussian distribution
    random_state : int, RandomState instance or None, optional (default=None)
        If int, random_state is the seed used by the random number generator;
        If RandomState instance, random_state is the random number generator;
        If None, the random number generator is the RandomState instance used
        by `np.random`.

    Returns
    -------
    X : np.array (n,2)
          n samples drawn from  N(m,sigma)

    """

    generator = check_random_state(random_state)
    if np.isscalar(sigma):
        sigma = np.array([sigma, ])
    if len(sigma) > 1:
        P = sp.linalg.sqrtm(sigma)
        res = generator.randn(n, 2).dot(P) + m
    else:
        res = generator.randn(n, 2) * np.sqrt(sigma) + m
    return res