Ejemplo n.º 1
0
    def test_attributes(self):
        tc = ToddCoxeter("left")
        tc.set_nr_generators(1)
        tc.add_pair([0, 0, 0, 0, 0, 0], [0, 0, 0])
        self.assertEqual(tc.nr_classes(), 5)
        self.assertTrue(tc.contains([0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0]))
        self.assertFalse(tc.contains([0, 0, 0], [0, 0]))
        self.assertEqual(tc.const_contains([0, 0, 0], [0, 0]), 0)
        self.assertEqual(tc.kind(), "left")
        self.assertFalse(tc.empty())
        self.assertEqual(tc.class_index_to_word(1), [0, 0])
        self.assertEqual(tc.word_to_class_index([0, 0]), 1)
        self.assertFalse(tc.has_parent_froidure_pin())
        self.assertEqual(tc.nr_generators(), 1)
        self.assertEqual(tc.nr_generating_pairs(), 1)
        self.assertTrue(tc.less([0], [0, 0]))

        S = FroidurePin(Transformation([1, 2, 2]), Transformation([2, 0, 1]))
        tc = ToddCoxeter("twosided", S)
        self.assertEqual(tc.nr_classes(), 24)
        self.assertTrue(tc.has_parent_froidure_pin())
        try:
            tc.parent_froidure_pin()
        except:
            self.fail("unexpected exception thrown")
        try:
            tc.quotient_froidure_pin()
        except:
            self.fail("unexpected exception thrown")

        K = KnuthBendix()
        K.set_alphabet("a")
        K.add_rule("aaaa", "aa")
        tc = ToddCoxeter("left", K)
        self.assertEqual(tc.nr_classes(), 3)

        tc = ToddCoxeter("twosided")
        tc.set_nr_generators(1)
        self.assertTrue(tc.is_quotient_obviously_infinite())
        self.assertFalse(tc.is_quotient_obviously_finite())
        tc.add_pair([0, 0, 0], [0])
        self.assertFalse(tc.is_quotient_obviously_infinite())
        tc.run()
        self.assertTrue(tc.is_quotient_obviously_finite())
Ejemplo n.º 2
0
    def test_one(self):
        kb = KnuthBendix()

        kb.set_alphabet("abcd")
        kb.add_rule("cacac", "aacaa")
        kb.add_rule("acaca", "ccacc")
        kb.add_rule("ada", "bbcbb")
        kb.add_rule("bcb", "aadaa")
        kb.add_rule("aaaa", "")
        kb.add_rule("ab", "")
        kb.add_rule("ba", "")
        kb.add_rule("cd", "")
        kb.add_rule("dc", "")
        kb.run()

        self.assertTrue(kb.confluent())
        self.assertEqual(kb.nr_active_rules(), 10)
        self.assertEqual(
            kb.active_rules(),
            [
                ["ab", ""],
                ["ba", ""],
                ["bb", "aa"],
                ["ca", "bd"],
                ["cb", "ad"],
                ["cd", ""],
                ["da", "bc"],
                ["db", "ac"],
                ["dc", ""],
                ["aaa", "b"],
            ],
        )
        self.assertEqual(
            kb.rewrite("abbbbbbbbbbbadddddddddddddddacccccccccccc"),
            "aaccccccccccccccccccccccccccc",
        )

        self.assertFalse(kb.equal_to("abbbbbbbbbbbadddddddddddddddacccccccccccc", "a"))
Ejemplo n.º 3
0
    def test_constructors(self):
        try:
            ToddCoxeter("left")
        except:
            self.fail("unexpected exception thrown")
        try:
            ToddCoxeter("right")
        except:
            self.fail("unexpected exception thrown")
        try:
            ToddCoxeter("twosided")
        except:
            self.fail("unexpected exception thrown")

        with self.assertRaises(TypeError):
            ToddCoxeter(45)
        with self.assertRaises(ValueError):
            ToddCoxeter("lft")
        with self.assertRaises(TypeError):
            ToddCoxeter("twosided", "left", "right")

        S = FroidurePin(Transformation([0, 0, 1, 2, 3]))
        with self.assertRaises(TypeError):
            ToddCoxeter(S)
        try:
            ToddCoxeter("twosided", S)
        except:
            self.fail("unexpected exception thrown")

        K = KnuthBendix()
        with self.assertRaises(TypeError):
            ToddCoxeter("left", K)
        K.set_alphabet("a")
        try:
            ToddCoxeter("left", K)
        except:
            self.fail("unexpected exception thrown")

        T = ToddCoxeter("left")
        with self.assertRaises(TypeError):
            ToddCoxeter("left", T)
        T.set_nr_generators(1)
        with self.assertRaises(TypeError):
            ToddCoxeter("right", T)
        with self.assertRaises(TypeError):
            ToddCoxeter("twosided", T)
        try:
            ToddCoxeter("left", T)
        except:
            self.fail("unexpected exception thrown")

        T = ToddCoxeter("right")
        with self.assertRaises(TypeError):
            ToddCoxeter("right", T)
        T.set_nr_generators(1)
        with self.assertRaises(TypeError):
            ToddCoxeter("left", T)
        with self.assertRaises(TypeError):
            ToddCoxeter("twosided", T)
        try:
            ToddCoxeter("right", T)
        except:
            self.fail("unexpected exception thrown")

        T = ToddCoxeter("twosided")
        with self.assertRaises(TypeError):
            ToddCoxeter("twosided", T)
        T.set_nr_generators(1)
        try:
            ToddCoxeter("left", T)
        except:
            self.fail("unexpected exception thrown")
        try:
            ToddCoxeter("right", T)
        except:
            self.fail("unexpected exception thrown")
        try:
            ToddCoxeter("twosided", T)
        except:
            self.fail("unexpected exception thrown")

        tc = ToddCoxeter("left")
        tc.set_nr_generators(2)
        with self.assertRaises(LibsemigroupsException):
            tc.add_pair([0, 0, 1, 0], [1, 1, 2])
Ejemplo n.º 4
0
    def test_two(self):
        kb = KnuthBendix()
        kb.set_alphabet("ab")
        kb.add_rule("aaa", "a")
        kb.add_rule("bbbb", "b")
        kb.add_rule("ba", "aab")

        self.assertEqual(kb.froidure_pin().size(), 11)
        # work around change in libsemigroups
        try:
            self.assertEqual(kb.froidure_pin()[10].string(kb), "babb")
        except:
            self.assertEqual(
                ll.static_cast["std::string"](kb.froidure_pin()[10]), "babb"
            )
Ejemplo n.º 5
0
    def test_attributes(self):
        # Check FpSemigroupInterface general attributes
        check_attributes(self, KnuthBendix)
        # Check KnuthBendix specific attributes
        ReportGuard(False)
        kb = KnuthBendix()
        kb.set_alphabet("abB")
        kb.set_identity("")
        kb.set_inverses("aBb")

        kb.add_rule("bb", "B")
        kb.add_rule("BaBa", "abab")

        self.assertFalse(kb.confluent())
        kb.run()
        self.assertTrue(kb.confluent())

        self.assertEqual(
            kb.active_rules(),
            [
                ["BB", "b"],
                ["Bb", ""],
                ["aa", ""],
                ["bB", ""],
                ["bb", "B"],
                ["BaBa", "abab"],
                ["baba", "aBaB"],
                ["BabaB", "baBab"],
                ["Babab", "baBa"],
                ["baBaB", "Baba"],
                ["baBaba", "abaBab"],
            ],
        )
        self.assertEqual(kb.nr_active_rules(), 11)
Ejemplo n.º 6
0
    def test_initialisation(self):
        check_initialisation(self, KnuthBendix)

        kb = KnuthBendix()
        kb.set_alphabet("abB")
        kb.set_identity("")
        kb.set_inverses("aBb")

        kb.add_rule("bb", "B")
        kb.add_rule("BaBa", "abab")
        self.assertEqual(kb.size(), 24)
Ejemplo n.º 7
0
    def test_running_and_state(self):
        ReportGuard(False)
        kb = KnuthBendix()
        kb.set_alphabet("abc")
        kb.add_rule("aa", "")
        kb.add_rule("bc", "")
        kb.add_rule("bbb", "")
        kb.add_rule("ababababababab", "")
        kb.add_rule("abacabacabacabacabacabacabacabac", "")
        kb.run_for(milliseconds(500))

        self.assertTrue(kb.stopped())
        self.assertFalse(kb.finished())
        self.assertFalse(kb.running())
        self.assertTrue(kb.started())
        self.assertFalse(kb.stopped_by_predicate())
        self.assertTrue(kb.timed_out())

        kb = KnuthBendix()
        kb.set_alphabet("abc")
        kb.add_rule("aa", "")
        kb.add_rule("bc", "")
        kb.add_rule("bbb", "")
        kb.add_rule("ababababababab", "")
        kb.add_rule("abacabacabacabacabacabacabacabac", "")

        kb.run_until(lambda: kb.nr_active_rules() > 100)

        self.assertTrue(kb.stopped())
        self.assertFalse(kb.finished())
        self.assertFalse(kb.running())
        self.assertTrue(kb.started())
        self.assertTrue(kb.stopped_by_predicate())
        self.assertFalse(kb.timed_out())
Ejemplo n.º 8
0
    def test_settings(self):
        ReportGuard(False)
        kb = KnuthBendix()
        kb.set_alphabet("abB")
        kb.set_identity("")
        kb.set_inverses("aBb")

        kb.add_rule("bb", "B")
        kb.add_rule("BaBa", "abab")
        self.assertEqual(kb.check_confluence_interval(10), kb)
        self.assertEqual(kb.max_overlap(10), kb)

        with self.assertRaises(ValueError):
            kb.max_overlap(-10)

        kb = KnuthBendix()
        kb.set_alphabet("abc")

        kb.add_rule("aa", "")
        kb.add_rule("bc", "")
        kb.add_rule("bbb", "")
        kb.add_rule("ababababababab", "")
        kb.add_rule("abacabacabacabacabacabacabacabac", "")

        kb.max_rules(100)
        kb.run()
        self.assertGreaterEqual(kb.nr_active_rules(), 100)
        self.assertEqual(kb.overlap_policy("ABC"), kb)
        self.assertEqual(kb.overlap_policy("AB_BC"), kb)
        self.assertEqual(kb.overlap_policy("MAX_AB_BC"), kb)

        with self.assertRaises(TypeError):
            kb.overlap_policy(-10)

        with self.assertRaises(ValueError):
            kb.overlap_policy("AVC")