From 75093631ccf9a6f0411924040e7e5d6d4a421540 Mon Sep 17 00:00:00 2001 From: Bas Nijholt <bas@nijho.lt> Date: Wed, 30 Nov 2022 14:01:00 -0800 Subject: [PATCH] Add learner1D.all_intervals_between --- adaptive/learner/learner1D.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/adaptive/learner/learner1D.py b/adaptive/learner/learner1D.py index 9987da468..811cfbe70 100644 --- a/adaptive/learner/learner1D.py +++ b/adaptive/learner/learner1D.py @@ -862,6 +862,29 @@ def __setstate__(self, state): self.losses_combined.update(losses_combined) +def all_intervals_between( + learner: Learner1D, + x_min: float | None = None, + x_max: float | None = None, + real: bool = True, +) -> list[list[float]]: + """Returns all intervals between the given bounds.""" + neighbors = learner.neighbors if real else learner.neighbors_combined + if x_min is None: + x_left = learner.bounds[0] + elif x_min in neighbors: + x_left = x_min + else: + _, x_left = learner._find_neighbors(x_min, neighbors) + if x_max is None: + x_right = learner.bounds[1] + elif x_max in neighbors: + x_right = x_max + else: + x_right, _ = learner._find_neighbors(x_max, neighbors) + return [ival for x, ival in neighbors.items() if x > x_left and x < x_right] + + def loss_manager(x_scale: float) -> dict[Interval, float]: def sort_key(ival, loss): loss, ival = finite_loss(ival, loss, x_scale)