From 290f7446a939baefbdff6f069c7b13cdecc313c4 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 11 Oct 2022 13:26:58 -0700 Subject: [PATCH 1/6] Skip tests if pandas is not installed --- adaptive/tests/test_learners.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/adaptive/tests/test_learners.py b/adaptive/tests/test_learners.py index 8c616e6bb..c18e133b4 100644 --- a/adaptive/tests/test_learners.py +++ b/adaptive/tests/test_learners.py @@ -28,6 +28,7 @@ LearnerND, SequenceLearner, ) +from adaptive.learner.learner1D import with_pandas from adaptive.runner import simple try: @@ -708,6 +709,7 @@ def wrapper(*args, **kwargs): return wrapper +@pytest.mark.skipif(not with_pandas, reason="pandas is not installed") @run_with( Learner1D, Learner2D, From 8daadad36d1f0d0e8f0322905a18687489b55923 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 11 Oct 2022 13:29:06 -0700 Subject: [PATCH 2/6] do not use pandas for dict equality --- adaptive/tests/test_average_learner1d.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/adaptive/tests/test_average_learner1d.py b/adaptive/tests/test_average_learner1d.py index 4286f55b9..5e611b722 100644 --- a/adaptive/tests/test_average_learner1d.py +++ b/adaptive/tests/test_average_learner1d.py @@ -1,6 +1,4 @@ import numpy as np -import pandas as pd -from pandas.testing import assert_series_equal from adaptive import AverageLearner1D from adaptive.tests.test_learners import ( @@ -11,7 +9,10 @@ def almost_equal_dicts(a, b): - assert_series_equal(pd.Series(sorted(a.items())), pd.Series(sorted(b.items()))) + assert a.keys() == b.keys() + for k, v1 in a.items(): + v2 = b[k] + np.testing.assert_almost_equal(v1, v2) def test_tell_many_at_point(): From 69e8395bfda19fdc2258ecd311848bb817e41a8e Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 11 Oct 2022 13:29:59 -0700 Subject: [PATCH 3/6] Move pandas requirement from test to notebook --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 21c3191d8..08a7948f5 100644 --- a/setup.py +++ b/setup.py @@ -42,6 +42,7 @@ def get_version_and_cmdclass(package_name): "holoviews>=1.9.1", "ipywidgets", "bokeh", + "pandas", "matplotlib", "plotly", ], @@ -52,7 +53,6 @@ def get_version_and_cmdclass(package_name): "pytest-randomly", "pytest-timeout", "pre_commit", - "pandas", "typeguard", ], "other": [ From 14e6ad8691bb64f915aea0911c8f9ea46539b657 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 11 Oct 2022 13:32:37 -0700 Subject: [PATCH 4/6] Import only in test --- adaptive/tests/test_learners.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adaptive/tests/test_learners.py b/adaptive/tests/test_learners.py index c18e133b4..d393511fb 100644 --- a/adaptive/tests/test_learners.py +++ b/adaptive/tests/test_learners.py @@ -12,7 +12,6 @@ import flaky import numpy as np -import pandas import pytest import scipy.spatial @@ -721,6 +720,8 @@ def wrapper(*args, **kwargs): with_all_loss_functions=False, ) def test_to_dataframe(learner_type, f, learner_kwargs): + import pandas + if learner_type is LearnerND: kw = {"point_names": tuple("xyz")[: len(learner_kwargs["bounds"])]} else: From 195495dcdacf52fcb552b52a26dbee981e18c8d1 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 11 Oct 2022 13:44:51 -0700 Subject: [PATCH 5/6] fix None --- adaptive/tests/test_average_learner1d.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/adaptive/tests/test_average_learner1d.py b/adaptive/tests/test_average_learner1d.py index 5e611b722..520568701 100644 --- a/adaptive/tests/test_average_learner1d.py +++ b/adaptive/tests/test_average_learner1d.py @@ -12,7 +12,11 @@ def almost_equal_dicts(a, b): assert a.keys() == b.keys() for k, v1 in a.items(): v2 = b[k] - np.testing.assert_almost_equal(v1, v2) + if v1 is None or v2 is None: + assert v1 is None + assert v2 is None + else: + np.testing.assert_almost_equal(v1, v2) def test_tell_many_at_point(): From 9b23f62e734b7051d27f065720ec71959ac34a81 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 11 Oct 2022 13:57:00 -0700 Subject: [PATCH 6/6] deal with tuples and lists --- adaptive/tests/test_average_learner1d.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/adaptive/tests/test_average_learner1d.py b/adaptive/tests/test_average_learner1d.py index 520568701..8b2670d77 100644 --- a/adaptive/tests/test_average_learner1d.py +++ b/adaptive/tests/test_average_learner1d.py @@ -1,3 +1,5 @@ +from itertools import chain + import numpy as np from adaptive import AverageLearner1D @@ -12,17 +14,24 @@ def almost_equal_dicts(a, b): assert a.keys() == b.keys() for k, v1 in a.items(): v2 = b[k] - if v1 is None or v2 is None: - assert v1 is None - assert v2 is None + if ( + v1 is None + or v2 is None + or isinstance(v1, (tuple, list)) + and any(x is None for x in chain(v1, v2)) + ): + assert v1 == v2 else: - np.testing.assert_almost_equal(v1, v2) + try: + np.testing.assert_almost_equal(v1, v2) + except TypeError: + raise AssertionError(f"{v1} != {v2}") def test_tell_many_at_point(): f = generate_random_parametrization(noisy_peak) learner = AverageLearner1D(f, bounds=(-2, 2)) - control = AverageLearner1D(f, bounds=(-2, 2)) + control = learner.new() learner._recompute_losses_factor = 1 control._recompute_losses_factor = 1 simple_run(learner, 100)