def METHOD_NAME(epsilon, ndim=2):
    def f(x):
        x = np.asarray(x)
        y = x.copy()
        y *= np.power(epsilon, np.arange(ndim))
        return -gaussian(0.5 * y) + 1
    def f_prime(x):
        x = np.asarray(x)
        y = x.copy()
        scaling = np.power(epsilon, np.arange(ndim))
        y *= scaling
        return -0.5 * scaling * gaussian_prime(0.5 * y)
    def hessian(x):
        epsilon = 0.07
        x = np.asarray(x)
        y = x.copy()
        scaling = np.power(epsilon, np.arange(ndim))
        y *= 0.5 * scaling
        H = -0.25 * np.ones((ndim, ndim)) * gaussian(y)
        d = 4 * y * y[:, np.newaxis]
        d.flat[:: ndim + 1] += -2
        H *= d
        return H
    return f, f_prime, hessian