def test_correct_data_single_fit(self): """ Tests that correct data gives the expected result """ fitting_problem = FittingProblem(self.options) x_data = np.array([-0.5, 0.0, 1.0, 0.5, 1.5, 2.0, 2.5, 3.0, 4.0]) y_data = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]) e_data = np.array([1.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 9.0]) start_x = 0.5 end_x = 2.5 expected_x_data = np.array([0.5, 1.0, 1.5, 2.0, 2.5]) expected_y_data = np.array([3.0, 2.0, 4.0, 5.0, 6.0]) expected_e_data = np.array([40.0, 30.0, 50.0, 60.0, 70.0]) fitting_problem.data_x = x_data fitting_problem.data_y = y_data fitting_problem.data_e = e_data fitting_problem.start_x = start_x fitting_problem.end_x = end_x fitting_problem.correct_data() self.assertTrue( np.isclose(fitting_problem.data_x[fitting_problem.sorted_index], expected_x_data).all()) self.assertTrue( np.isclose(fitting_problem.data_y[fitting_problem.sorted_index], expected_y_data).all()) self.assertTrue( np.isclose(fitting_problem.data_e[fitting_problem.sorted_index], expected_e_data).all()) self.options.cost_func_type = "nlls" fitting_problem.correct_data() self.assertTrue( np.isclose(fitting_problem.data_x[fitting_problem.sorted_index], expected_x_data).all()) self.assertTrue( np.isclose(fitting_problem.data_y[fitting_problem.sorted_index], expected_y_data).all()) self.assertIs(fitting_problem.data_e, None)
def test_correct_data_multi_fit(self): """ Tests correct data on a multifit problem. """ fitting_problem = FittingProblem(self.options) fitting_problem.multifit = True x_data = [ np.array([-0.5, 0.0, 1.0, 0.5, 1.5, 2.0, 2.5, 3.0, 4.0]), np.array([-0.5, 0.0, 1.0, 0.5, 1.4, 2.0, 2.5, 3.0, 4.0]), np.array([-0.5, 0.0, 1.0, 0.5, 1.7, 2.0, 2.5, 3.0, 4.0]) ] y_data = [ np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]), np.array([0.0, 1.0, 2.0, 3.0, 24.0, 5.0, 6.0, 7.0, 8.0]), np.array([0.0, 1.0, 2.8, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]) ] e_data = [ np.array([1.0, 20.0, 30.0, 40.0, 50.0, 60.0, 1.0, 6.0, 9.0]), np.array([1.0, 20.0, 30.0, 40.0, 50.0, 60.0, 1.0, 6.0, 9.0]), np.array([1.0, 20.0, 30.0, 40.0, 50.0, 60.0, 1.0, 6.0, 9.0]) ] start_x = [0.5, 1.1, 0.0] end_x = [2.5, 2.6, 1.0] expected_x_data = [ np.array([0.5, 1.0, 1.5, 2.0, 2.5]), np.array([1.4, 2.0, 2.5]), np.array([0.0, 0.5, 1.0]) ] expected_y_data = [ np.array([3.0, 2.0, 4.0, 5.0, 6.0]), np.array([24.0, 5.0, 6.0]), np.array([1.0, 3.0, 2.8]) ] expected_e_data = [ np.array([40.0, 30.0, 50.0, 60.0, 1.0]), np.array([50.0, 60.0, 1.0]), np.array([20.0, 40.0, 30.0]) ] fitting_problem.data_x = x_data fitting_problem.data_y = y_data fitting_problem.data_e = e_data fitting_problem.start_x = start_x fitting_problem.end_x = end_x fitting_problem.correct_data() for i in range(3): self.assertTrue( np.isclose( fitting_problem.data_x[i][fitting_problem.sorted_index[i]], expected_x_data[i]).all()) self.assertTrue( np.isclose( fitting_problem.data_y[i][fitting_problem.sorted_index[i]], expected_y_data[i]).all()) self.assertTrue( np.isclose( fitting_problem.data_e[i][fitting_problem.sorted_index[i]], expected_e_data[i]).all()) self.options.cost_func_type = "nlls" fitting_problem.correct_data() for i in range(3): self.assertTrue( np.isclose( fitting_problem.data_x[i][fitting_problem.sorted_index[i]], expected_x_data[i]).all()) self.assertTrue( np.isclose( fitting_problem.data_y[i][fitting_problem.sorted_index[i]], expected_y_data[i]).all()) self.assertIs(fitting_problem.data_e[i], None)