Пример #1
0
    def test_forbidden_equals_clause(self):
        hp1 = CategoricalHyperparameter("parent", [0, 1])
        hp2 = UniformIntegerHyperparameter("child", 0, 10)
        hp3 = CategoricalHyperparameter("grandchild", ["hot", "cold"])

        self.assertRaisesRegex(
            ValueError,
            r"Forbidden clause must be instantiated with a legal hyperparameter value for "
            r"'parent, Type: Categorical, Choices: \{0, 1\}, Default: 0', but got '2'",
            ForbiddenEqualsClause, hp1, 2,
        )

        forb1 = ForbiddenEqualsClause(hp1, 1)
        forb1_ = ForbiddenEqualsClause(hp1, 1)
        forb1__ = ForbiddenEqualsClause(hp1, 0)
        forb2 = ForbiddenEqualsClause(hp2, 10)
        forb3 = ForbiddenEqualsClause(hp3, "hot")
        forb3_ = ForbiddenEqualsClause(hp3, "hot")

        self.assertEqual(forb3, forb3_)
        # print("\eq0:", 1, 1)
        # self.assertEqual(1, 1)
        # print("\neq1:", forb1, forb1_)
        self.assertEqual(forb1, forb1_)
        # print("\nneq2:", forb1, "forb1")
        self.assertNotEqual(forb1, "forb1")
        # print("\nneq3:", forb1, forb2)
        self.assertNotEqual(forb1, forb2)
        # print("\nneq4:", forb1_, forb1)
        self.assertNotEqual(forb1__, forb1)
        # print("\neq5:", "Forbidden: parent == 1", str(forb1))
        self.assertEqual("Forbidden: parent == 1", str(forb1))

        # print("\nraisereg6:")
        self.assertRaisesRegex(ValueError,
                               "Is_forbidden must be called with the "
                               "instanstatiated hyperparameter in the "
                               "forbidden clause; you are missing "
                               "'parent'", forb1.is_forbidden,
                               {1: hp2}, True)
        # print("\nneq7:")
        self.assertFalse(forb1.is_forbidden({'child': 1}, strict=False))
        # print("\nneq8:")
        self.assertFalse(forb1.is_forbidden({'parent': 0}, True))
        # print("\nneq9:")
        self.assertTrue(forb1.is_forbidden({'parent': 1}, True))

        # Test forbidden on vector values
        hyperparameter_idx = {
            hp1.name: 0,
            hp2.name: 1
        }
        forb1.set_vector_idx(hyperparameter_idx)
        # print("\nneq10:")
        self.assertFalse(forb1.is_forbidden_vector(np.array([np.NaN, np.NaN]), strict=False))
        # print("\nneq11:")
        self.assertFalse(forb1.is_forbidden_vector(np.array([0., np.NaN]), strict=False))
        # print("\nneq12:")
        self.assertTrue(forb1.is_forbidden_vector(np.array([1., np.NaN]), strict=False))
Пример #2
0
    def test_forbidden_equals_clause(self):
        hp1 = CategoricalHyperparameter("parent", [0, 1])
        hp2 = UniformIntegerHyperparameter("child", 0, 10)

        self.assertRaisesRegexp(
            TypeError, "Argument 'hyperparameter' is not of"
            " type <class 'ConfigSpace.hyperparameters.Hyperparameter'>.",
            ForbiddenEqualsClause, "HP1", 1)

        self.assertRaisesRegexp(
            ValueError, "Forbidden clause must be instantiated with a "
            "legal hyperparameter value for "
            "'parent, Type: Categorical, Choices: \{0, "
            "1\}, Default: 0', but got '2'", ForbiddenEqualsClause, hp1, 2)

        forb1 = ForbiddenEqualsClause(hp1, 1)
        forb1_ = ForbiddenEqualsClause(hp1, 1)
        forb1__ = ForbiddenEqualsClause(hp1, 0)
        forb2 = ForbiddenEqualsClause(hp2, 10)

        self.assertEqual(forb1, forb1_)
        self.assertNotEqual(forb1, "forb1")
        self.assertNotEqual(forb1, forb2)
        self.assertNotEqual(forb1__, forb1)
        self.assertEqual("Forbidden: parent == 1", str(forb1))

        self.assertRaisesRegexp(
            ValueError, "Is_forbidden must be called with the "
            "instanstatiated hyperparameter in the "
            "forbidden clause; you are missing "
            "'parent'", forb1.is_forbidden, {1: hp2})
        self.assertFalse(forb1.is_forbidden({'child': 1}, strict=False))
        self.assertFalse(forb1.is_forbidden({'parent': 0}))
        self.assertTrue(forb1.is_forbidden({'parent': 1}))

        # Test forbidden on vector values
        hyperparameter_idx = {hp1.name: 0, hp2.name: 1}
        forb1.set_vector_idx(hyperparameter_idx)
        self.assertFalse(
            forb1.is_forbidden_vector([np.NaN, np.NaN], strict=False))
        self.assertFalse(forb1.is_forbidden_vector([0., np.NaN]))
        self.assertTrue(forb1.is_forbidden_vector([1., np.NaN]))
Пример #3
0
    def test_forbidden_equals_clause(self):
        hp1 = CategoricalHyperparameter("parent", [0, 1])
        hp2 = UniformIntegerHyperparameter("child", 0, 10)
        hp3 = CategoricalHyperparameter("grandchild", ["hot", "cold"])

        self.assertRaisesRegex(
            ValueError,
            r"Forbidden clause must be instantiated with a legal hyperparameter value for "
            r"'parent, Type: Categorical, Choices: \{0, 1\}, Default: 0', but got '2'",
            ForbiddenEqualsClause,
            hp1,
            2,
        )

        forb1 = ForbiddenEqualsClause(hp1, 1)
        forb1_ = ForbiddenEqualsClause(hp1, 1)
        forb1__ = ForbiddenEqualsClause(hp1, 0)
        forb2 = ForbiddenEqualsClause(hp2, 10)
        forb3 = ForbiddenEqualsClause(hp3, "hot")
        forb3_ = ForbiddenEqualsClause(hp3, "hot")

        self.assertEqual(forb3, forb3_)
        # print("\eq0:", 1, 1)
        # self.assertEqual(1, 1)
        # print("\neq1:", forb1, forb1_)
        self.assertEqual(forb1, forb1_)
        # print("\nneq2:", forb1, "forb1")
        self.assertNotEqual(forb1, "forb1")
        # print("\nneq3:", forb1, forb2)
        self.assertNotEqual(forb1, forb2)
        # print("\nneq4:", forb1_, forb1)
        self.assertNotEqual(forb1__, forb1)
        # print("\neq5:", "Forbidden: parent == 1", str(forb1))
        self.assertEqual("Forbidden: parent == 1", str(forb1))

        # print("\nraisereg6:")
        self.assertRaisesRegex(
            ValueError, "Is_forbidden must be called with the "
            "instanstatiated hyperparameter in the "
            "forbidden clause; you are missing "
            "'parent'", forb1.is_forbidden, {1: hp2}, True)
        # print("\nneq7:")
        self.assertFalse(forb1.is_forbidden({'child': 1}, strict=False))
        # print("\nneq8:")
        self.assertFalse(forb1.is_forbidden({'parent': 0}, True))
        # print("\nneq9:")
        self.assertTrue(forb1.is_forbidden({'parent': 1}, True))

        # Test forbidden on vector values
        hyperparameter_idx = {hp1.name: 0, hp2.name: 1}
        forb1.set_vector_idx(hyperparameter_idx)
        # print("\nneq10:")
        self.assertFalse(
            forb1.is_forbidden_vector(np.array([np.NaN, np.NaN]),
                                      strict=False))
        # print("\nneq11:")
        self.assertFalse(
            forb1.is_forbidden_vector(np.array([0., np.NaN]), strict=False))
        # print("\nneq12:")
        self.assertTrue(
            forb1.is_forbidden_vector(np.array([1., np.NaN]), strict=False))