Ejemplo n.º 1
0
    def test_perturb_int_no_duplicate_below(self):
        explore = PerturbExplore(factor=0.75)

        rng = RNGStub()
        rng.random = lambda: 1.0

        assert explore.perturb_int(rng, 1, (0, 10)) == 0
Ejemplo n.º 2
0
    def test_perturb_int_duplicate_equal(self):
        explore = PerturbExplore(factor=1.0)

        rng = RNGStub()
        rng.random = lambda: 1.0

        assert explore.perturb_int(rng, 1, (0, 10)) == 1
Ejemplo n.º 3
0
    def test_perturb_real_volatility_above(self, volatility):
        explore = PerturbExplore(factor=1.0, volatility=volatility)

        rng = RNGStub()
        rng.random = lambda: 1.0
        rng.normal = lambda mean, variance: variance

        assert explore.perturb_real(rng, 3.0, (1.0, 2.0)) == 2.0 - volatility
Ejemplo n.º 4
0
    def test_perturb_cat(self):
        explore = PerturbExplore()
        rng = RNGStub()
        rng.randint = lambda low, high, size: [1]
        rng.choice = lambda choices: choices[0]

        dim = Categorical("name", ["one", "two", 3, 4.0])
        assert explore.perturb_cat(rng, "whatever", dim) in dim
Ejemplo n.º 5
0
    def test_perturb_real_factor(self, factor):
        explore = PerturbExplore(factor=factor)

        rng = RNGStub()
        rng.random = lambda: 1.0

        assert explore.perturb_real(rng, 1.0, (0.1, 2.0)) == factor

        rng.random = lambda: 0.0

        assert explore.perturb_real(rng, 1.0, (0.1, 2.0)) == 1.0 / factor
Ejemplo n.º 6
0
    def test_perturb_real_above_interval_cap(self):
        explore = PerturbExplore(factor=1.0, volatility=0)

        rng = RNGStub()
        rng.random = lambda: 1.0
        rng.normal = lambda mean, variance: variance

        assert explore.perturb_real(rng, 3.0, (1.0, 2.0)) == 2.0

        explore.volatility = 1000

        assert explore.perturb_real(rng, 3.0, (1.0, 2.0)) == 1.0
Ejemplo n.º 7
0
    def test_perturb_int_factor(self, factor):
        explore = PerturbExplore(factor=factor)

        rng = RNGStub()
        rng.random = lambda: 1.0

        assert explore.perturb_int(rng, 5,
                                   (0, 10)) == int(numpy.round(5 * factor))

        rng.random = lambda: 0.0

        assert explore.perturb_int(rng, 5,
                                   (0, 10)) == int(numpy.round(5 / factor))
Ejemplo n.º 8
0
    def test_perturb_int_no_out_of_bounds(self):
        explore = PerturbExplore(factor=0.75, volatility=0)

        rng = RNGStub()

        rng.random = lambda: 1.0
        rng.normal = lambda mean, variance: variance

        assert explore.perturb_int(rng, 0, (0, 10)) == 0

        rng.random = lambda: 0.0
        rng.normal = lambda mean, variance: variance

        assert explore.perturb_int(rng, 10, (0, 10)) == 10
Ejemplo n.º 9
0
    def test_configuration(self):

        explore = PerturbExplore(factor=2.0, volatility=10.0)

        assert explore.configuration == dict(of_type="perturbexplore",
                                             factor=2.0,
                                             volatility=10.0)
Ejemplo n.º 10
0
    def test_perturb_with_invalid_dim(self, space, monkeypatch):
        explore = PerturbExplore()

        monkeypatch.setattr(Dimension, "type", "type_that_dont_exist")

        with pytest.raises(
                ValueError,
                match="Unsupported dimension type type_that_dont_exist"):
            explore(RNGStub(), space, {"x": 1.0, "y": 2, "z": 0, "f": 10})
Ejemplo n.º 11
0
    def test_perturb(self, space):
        explore = PerturbExplore()
        rng = RNGStub()
        rng.randint = lambda low, high, size: [1]
        rng.random = lambda: 1.0
        rng.normal = lambda mean, variance: 0.0
        rng.choice = lambda choices: choices[0]

        params = {"x": 1.0, "y": 2, "z": 0, "f": 10}
        new_params = explore(rng, space, params)
        for key in space.keys():
            assert new_params[key] in space[key]
Ejemplo n.º 12
0
    def test_perturb_hierarchical_params(self, hspace):
        explore = PerturbExplore()
        rng = RNGStub()
        rng.randint = lambda low, high, size: [1]
        rng.random = lambda: 1.0
        rng.normal = lambda mean, variance: 0.0
        rng.choice = lambda choices: choices[0]

        params = {"numerical": {"x": 1.0, "y": 2, "f": 10}, "z": 0}
        new_params = explore(rng, hspace, params)
        assert "numerical" in new_params
        assert "x" in new_params["numerical"]
        for key in hspace.keys():
            assert flatten(new_params)[key] in hspace[key]