def test_adding_points_and_skip_one_point(): learner = IntegratorLearner(f24, bounds=(0, 3), tol=1e-10) xs, _ = learner.ask(17) skip_x = xs[1] for x in xs: if x != skip_x: learner.tell(x, learner.function(x)) for i in range(1000): xs, _ = learner.ask(1) for x in xs: if x != skip_x: learner.tell(x, learner.function(x)) # Now add the point that was skipped learner.tell(skip_x, learner.function(skip_x)) # Create a learner with the same number of points, which should # give an identical igral value. learner2 = IntegratorLearner(f24, bounds=(0, 3), tol=1e-10) for i in range(1017): xs, _ = learner2.ask(1) for x in xs: learner2.tell(x, learner2.function(x)) np.testing.assert_almost_equal(learner.igral, learner2.igral)
def test_removed_ask_one_by_one(): with pytest.raises(RuntimeError): # This test should raise because integrating np.exp should be done # after the 33th point learner = IntegratorLearner(np.exp, bounds=(0, 1), tol=1e-15) n = ns[-1] + 2 * (ns[0] - 2) # first + two children (33+6=39) for _ in range(n): xs, _ = learner.ask(1) for x in xs: learner.tell(x, learner.function(x))
def test_removed_choose_mutiple_points_at_once(): """Given that a high-precision interval that was split into 2 low-precision ones, we should use the high-precision interval. """ learner = IntegratorLearner(np.exp, bounds=(0, 1), tol=1e-15) n = ns[-1] + 2 * (ns[0] - 2) # first + two children (33+6=39) xs, _ = learner.ask(n) for x in xs: learner.tell(x, learner.function(x)) assert list(learner.approximating_intervals)[0] == learner.first_ival
def test_choosing_and_adding_multiple_points_at_once(): learner = IntegratorLearner(f24, bounds=(0, 3), tol=1e-10) xs, _ = learner.ask(100) for x in xs: learner.tell(x, learner.function(x))
def test_choosing_and_adding_points_one_by_one(): learner = IntegratorLearner(f24, bounds=(0, 3), tol=1e-10) for _ in range(1000): xs, _ = learner.ask(1) for x in xs: learner.tell(x, learner.function(x))