def test_specfit(rawdata, noise, error, params):
    for i in range(100):
        passed = True
        parameter_noise = [
            params[0] + abs(np.random.randn()) * parameter_error_amplitude[0],
            params[1] + abs(np.random.randn()) * parameter_error_amplitude[1],
            params[2] + abs(np.random.randn()) * parameter_error_amplitude[2]
        ]
        guesses = np.array(params) + parameter_noise
        sp = Spectrum(xarr=xarr, data=rawdata + noise, error=error)
        # sp.plotter(axis=plt.gca(), errstyle='fill')
        sp.specfit(guesses=guesses)
        assertion = ((np.array(sp.specfit.fitter.mpp) - np.array(params)) /
                     parameter_noise)**2
        print('(mpp - params / param_noise )^2 = ', assertion)
        for j, result in enumerate(assertion):
            if strict_assertion:
                assert result < 2
            if result >= 2:
                passed = False
                continue
        if passed:
            for j in range(3):
                passes['passes'][j] += 1
                passes['avg_difference'][j] += abs(sp.specfit.fitter.mpp[j] -
                                                   params[j])
        else:
            for j in range(3):
                fails['fails'][j] += 1
                fails['avg_difference'][j] += abs(sp.specfit.fitter.mpp[j] -
                                                  params[j])
        # plt.show()

    for i, j in enumerate(passes['avg_difference']):
        if passes['passes'][i]:
            passes['avg_difference'][i] = j / passes['passes'][i]
    for i, j in enumerate(fails['avg_difference']):
        if fails['fails'][i]:
            fails['avg_difference'][i] = j / fails['fails'][i]

    print('passes:', passes)
    print('fails:', fails)
def test_specfit(rawdata, noise, error, params):
    for i in range(100):
        passed = True
        parameter_noise = [
            params[0] + abs(np.random.randn()) * parameter_error_amplitude[0],
            params[1] + abs(np.random.randn()) * parameter_error_amplitude[1],
            params[2] + abs(np.random.randn()) * parameter_error_amplitude[2],
        ]
        guesses = np.array(params) + parameter_noise
        sp = Spectrum(xarr=xarr, data=rawdata + noise, error=error)
        # sp.plotter(axis=plt.gca(), errstyle='fill')
        sp.specfit(guesses=guesses)
        assertion = ((np.array(sp.specfit.fitter.mpp) - np.array(params)) / parameter_noise) ** 2
        print("(mpp - params / param_noise )^2 = ", assertion)
        for j, result in enumerate(assertion):
            if strict_assertion:
                assert result < 2
            if result >= 2:
                passed = False
                continue
        if passed:
            for j in range(3):
                passes["passes"][j] += 1
                passes["avg_difference"][j] += abs(sp.specfit.fitter.mpp[j] - params[j])
        else:
            for j in range(3):
                fails["fails"][j] += 1
                fails["avg_difference"][j] += abs(sp.specfit.fitter.mpp[j] - params[j])
                # plt.show()

    for i, j in enumerate(passes["avg_difference"]):
        if passes["passes"][i]:
            passes["avg_difference"][i] = j / passes["passes"][i]
    for i, j in enumerate(fails["avg_difference"]):
        if fails["fails"][i]:
            fails["avg_difference"][i] = j / fails["fails"][i]

    print("passes:", passes)
    print("fails:", fails)