diff --git a/adaptive/learner/learner2D.py b/adaptive/learner/learner2D.py index 125fc055..f7e1fc21 100644 --- a/adaptive/learner/learner2D.py +++ b/adaptive/learner/learner2D.py @@ -897,8 +897,8 @@ def __getstate__(self): cloudpickle.dumps(self.function), self.bounds, self.loss_per_triangle, - self._stack, - self._get_data(), + self._stack.copy(), + self._get_data().copy(), ) def __setstate__(self, state): diff --git a/adaptive/tests/test_balancing_learner.py b/adaptive/tests/test_balancing_learner.py index c50b2105..5f91506e 100644 --- a/adaptive/tests/test_balancing_learner.py +++ b/adaptive/tests/test_balancing_learner.py @@ -2,7 +2,7 @@ import pytest -from adaptive.learner import BalancingLearner, Learner1D +from adaptive.learner import BalancingLearner, Learner1D, Learner2D from adaptive.runner import simple strategies = ["loss", "loss_improvements", "npoints", "cycle"] @@ -51,6 +51,18 @@ def test_ask_0(strategy): assert len(points) == 0 +def test_ask_without_pending_restores_learner2d_state(): + learner = Learner2D(lambda xy: xy[0] + xy[1], bounds=((-1, 1), (-1, 1))) + initial_stack = list(learner._stack.items()) + initial_data = learner.data.copy() + + balancing_learner = BalancingLearner([learner]) + balancing_learner.ask(1, tell_pending=False) + + assert list(learner._stack.items()) == initial_stack + assert learner.data == initial_data + + @pytest.mark.parametrize( "strategy, goal_type, goal", [