From 4dc4400acc9d998827931820ce9bb4b311547eb4 Mon Sep 17 00:00:00 2001 From: Bas Nijholt <basnijholt@gmail.com> Date: Wed, 19 Sep 2018 15:58:26 +0200 Subject: [PATCH] add an 'AverageLearner' test that checks the std, mean, and npoints --- adaptive/tests/test_average_learner.py | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/adaptive/tests/test_average_learner.py b/adaptive/tests/test_average_learner.py index b652cc85..abacd324 100644 --- a/adaptive/tests/test_average_learner.py +++ b/adaptive/tests/test_average_learner.py @@ -1,5 +1,9 @@ # -*- coding: utf-8 -*- +import random + +import numpy as np + from ..learner import AverageLearner @@ -17,3 +21,28 @@ def test_only_returns_new_points(): assert learner.ask(1)[0][0] == 3 assert learner.ask(1)[0][0] == 4 assert learner.ask(1)[0][0] == 10 + + +def test_avg_std_and_npoints(): + learner = AverageLearner(lambda x: x, atol=None, rtol=0.01) + + for i in range(300): + # This will add 5000 points at random values of n. + # It could try to readd already evaluated points. + + n = random.randint(0, 2*300) + value = random.random() + + # With 10% chance None is added to simulate asking that point. + if value < 0.9: + learner.tell(n, value) + else: + learner.tell_pending(n) + + if i > 2 and i % 10 == 0: + # We need more than two points for 'learner.std' to be defined. + values = np.array(list(learner.data.values())) + std = np.sqrt(sum((values - values.mean())**2) / (len(values) - 1)) + assert learner.npoints == len(learner.data) + assert abs(learner.sum_f - values.sum()) < 1e-13 + assert abs(learner.std - std) < 1e-13 -- GitLab