def testMonteCarlo1(self):
        print("====== MonteCarlo 1 ===================")

        N = 100
        ran = numpy.random
        ran.seed(12345)
        noise = ran.standard_normal(N)
        x = numpy.arange(N, dtype=float) - 3
        nn = 0.1
        for k in range(5):
            y = noise * nn

            m = PolynomialModel(0)
            ftr = Fitter(x, m)
            par = ftr.fit(y)
            std = ftr.getStandardDeviations()
            chisq = ftr.chisq

            mc = MonteCarlo(x, m, ftr.covariance)
            mc.mcycles = 1000
            lmce = ftr.monteCarloError(monteCarlo=mc)

            print("noise  : ", fmt(nn),
                  "===========================================")
            print("params : ", fmt(par, format="%8.5f"))
            print("stdevs : ", fmt(std, format="%8.5f"))
            print("scale  : ", fmt(ftr.scale, format="%8.5f"), fmt(nn))
            print("chisq  : ", fmt(chisq, format="%8.5f"),
                  fmt(mc._eigenvalues, format="%8.5f"),
                  fmt(mc._eigenvectors, format="%8.5f"))
            print("covar  : ", fmt(ftr.covariance, format="%8.5f"))
            print("mcerr  : ", fmt(lmce[0], format="%8.5f"))
            self.assertTrue(abs(std[0] - lmce[0]) < 0.1 * std[0])
            self.assertTrue(par[0] < 0.05 * nn)
            nn *= 10
    def testMonteCarlo2(self, doplot=False):
        print("====== MonteCarlo 2 ===================")

        x = numpy.arange(7, dtype=float) - 3
        y = numpy.asarray([-1, -1, -1, 0, 1, 1, 1], dtype=float)
        m = PolynomialModel(1)
        ftr = Fitter(x, m)
        par = ftr.fit(y)
        std = ftr.getStandardDeviations()
        yfit = m.result(x)
        chisq = ftr.chisq
        hes = ftr.hessian
        #        mc = MonteCarlo( x, m, chisq, hessian=hes )
        mc = MonteCarlo(x, m, ftr.covariance)
        mc.mcycles = 1000
        lmce = ftr.monteCarloError(monteCarlo=mc)

        print("params : ", par)
        print("stdevs : ", std)
        print("scale  : ", ftr.getScale())
        print("chisq  : ", chisq)
        print("evals  : ", mc._eigenvalues)
        print(mc._eigenvectors)
        print("hessi  :\n", ftr.hessian)
        print("covar  :\n", ftr.covariance)
        print("mcerr  : ", lmce)

        numpy.testing.assert_array_almost_equal(
            par, numpy.asarray([0.0, 0.42857142857142855]))
        #        numpy.testing.assert_array_almost_equal( std, numpy.asarray([0.1564921592871903,0.07824607964359515]) )
        self.assertAlmostEqual(chisq, 0.857142857143)

        if doplot:
            pyplot.plot(x, y, 'k*')
            pyplot.plot(x, yfit, 'g-')
            pyplot.plot(x, yfit + lmce, 'r-')
            pyplot.plot(x, yfit - lmce, 'r-')
            pyplot.show()