def test_scipy_integer_dist_interval_bug(self): """Scipy does not return the correct answer for integer distributions.""" dim = Integer('yolo', 'randint', -3, 6) assert dim.interval() == (-3, 6) assert dim.interval(1.0) == (-3, 6) assert dim.interval(0.9999) == (-3, 6) dim = Integer('yolo2', 'randint', -2, 4, loc=8) assert dim.interval() == (6, 12)
def _sample_int_point( self, dimension: Integer, below_points: numpy.ndarray | Sequence[numpy.ndarray], above_points: numpy.ndarray | Sequence[numpy.ndarray], ): """Sample one value for integer dimension based on the observed good and bad points""" low, high = dimension.interval() assert isinstance(low, int) assert isinstance(high, int) choices = range(low, high + 1) below_points = numpy.array(below_points).astype(int) - low above_points = numpy.array(above_points).astype(int) - low sampler_below = CategoricalSampler(self, below_points, choices) candidate_points = sampler_below.sample(self.n_ei_candidates) sampler_above = CategoricalSampler(self, above_points, choices) lik_below = sampler_below.get_loglikelis(candidate_points) lik_above = sampler_above.get_loglikelis(candidate_points) new_point: numpy.ndarray = compute_max_ei_point( candidate_points, lik_below, lik_above ) new_point = new_point + low return new_point
def test_simple_instance(self, seed): """Test Integer.__init__.""" dim = Integer('yolo', 'uniform', -3, 6) samples = dim.sample(seed=seed) assert len(samples) == 1 assert samples[0] == -2 assert dim.interval() == (-3, 3) assert dim.interval(0.5) == (-2, 2) assert 1.0 in dim assert str(dim) == "Integer(name=yolo, prior={uniform: (-3, 6), {}}, "\ "shape=(), default value=None)" assert dim.name == 'yolo' assert dim.type == 'integer' assert dim.shape == ()
def discrete_grid(dim: Integer, num: int): """Build discretized real grid""" grid = real_grid(dim, num) _, b = dim.interval() discrete_grid = [int(numpy.round(grid[0]))] for v in grid[1:]: int_v = int(numpy.round(v)) if int_v <= discrete_grid[-1]: int_v = discrete_grid[-1] + 1 if int_v > b: log.warning(f"Cannot list {num} discrete values for {dim.name}. " "Will use {len(discrete_grid)} points instead.") break discrete_grid.append(int_v) return discrete_grid
def test_interval_with_infs(self): """Regression test: Interval handles correctly extreme bounds.""" dim = Integer('yolo', 'poisson', 5) # XXX: Complete this on both end of interval when scipy bug is fixed assert dim.interval()[1] == np.inf
def test_inclusive_intervals(self): """Test that discretized bounds are valid""" dim = Integer("yolo", "uniform", -3, 5.5) assert dim.interval() == (-3, 3)