Exemple #1
0
 def test_congruence_by_pairs1(self):
     ReportGuard(False)
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     C = CongruenceByPairs("left", S)
     C.add_pair([0], [1])
     self.assertEqual(C.nr_classes(), 1)
     self.assertEqual(S.size(), 4)
 def test_idempotents(self):
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     self.assertEqual(
         list(S.idempotents()),
         [
             Transformation([0, 0, 0]),
             Transformation([0, 1, 0]),
             Transformation([1, 1, 1]),
         ],
     )
 def test_deleted_methods(self):
     S = FroidurePin(Transformation([1, 0, 1]))
     with self.assertRaises(LibsemigroupsCppyyException):
         S.add_generators()
     with self.assertRaises(LibsemigroupsCppyyException):
         S.copy_add_generators()
     with self.assertRaises(LibsemigroupsCppyyException):
         S.closure()
     with self.assertRaises(LibsemigroupsCppyyException):
         S.copy_closure()
Exemple #4
0
 def test_036(self):
     S = FroidurePin(Transformation([1, 3, 4, 2, 3]),
                     Transformation([3, 2, 1, 3, 3]))
     tc = ToddCoxeter("twosided")
     tc.set_nr_generators(2)
     tc.add_pair([0], [1])
     tc.add_pair([0, 0], [0])
     self.assertEqual(tc.nr_classes(), 1)
     with self.assertRaises(LibsemigroupsException):
         tc.prefill(S.right_cayley_graph())
 def test_sorted_elements(self):
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     expected = [
         Transformation([0, 0, 0]),
         Transformation([0, 1, 0]),
         Transformation([1, 0, 1]),
         Transformation([1, 1, 1]),
     ]
     self.assertEqual(list(S.sorted_elements()), expected)
     self.assertEqual(S.sorted_elements()[:2], expected[:2])
     self.assertEqual(S.sorted_elements()[::-1], expected[::-1])
Exemple #6
0
    def test_init(self):
        FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))

        with self.assertRaises(KeyError):
            FroidurePin()

        with self.assertRaises(ValueError):
            FroidurePin(PartialPerm([1, 2], [0, 1], 3), Transformation([0, 1]))

        with self.assertRaises(TypeError):
            FroidurePin({2, 3})
 def test_prefixes_and_suffixes(self):
     S = FroidurePin(Transformation(list(range(1, 5)) + [0]))
     self.assertEqual(S.prefix(0), 18446744073709551615)
     for i in range(1, S.size()):
         self.assertEqual(S.prefix(i), i - 1)
         self.assertEqual(S.suffix(i), i - 1)
         self.assertEqual(S.first_letter(i), 0)
         self.assertEqual(S.final_letter(i), 0)
def check_initialisation(self, t):
    ReportGuard(False)
    x = t()
    x.set_alphabet("ba")
    x.add_rule([0, 1], [1, 0])

    with self.assertRaises(TypeError):
        x.add_rule([0, 1], [2])

    S = FroidurePin(Transformation([1, 2, 0]), Transformation([1, 0, 2]))
    x.add_rules(S)
    self.assertEqual(x.size(), 2)

    x = t()
    x.set_alphabet("abBe")
    x.set_identity("e")

    x.set_inverses("aBbe")

    x.add_rule("bb", "B")
    x.add_rule("BaBa", "abab")
    self.assertEqual(x.size(), 24)

    x = t()
    x.set_alphabet(1)
    x.set_identity(0)
    self.assertEqual(x.size(), 1)
 def test_iterator(self):
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     self.assertEqual(
         list(S),
         [
             Transformation([1, 0, 1]),
             Transformation([0, 0, 0]),
             Transformation([0, 1, 0]),
             Transformation([1, 1, 1]),
         ],
     )
 def test_products(self):
     S = FroidurePin(Transformation(list(range(1, 5)) + [0]))
     S.run()
     for i in range(5):
         for j in range(5):
             self.assertEqual(S.fast_product(i, j), ((i + j + 1) % 5))
             self.assertEqual(S.product_by_reduction(i, j), ((i + j + 1) % 5))
Exemple #11
0
    def test_constructors(self):
        ReportGuard(False)
        S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
        T = FpSemigroup(S)
        self.assertFalse(T.has_froidure_pin())
        if compare_version_numbers(libsemigroups_version(), "1.1.0"):
            self.assertEqual(S.nr_rules(), T.nr_rules())
            self.assertEqual(
                S.rules(),
                [[[0, 1], [1]], [[1, 1], [1]], [[0, 0, 0], [0]], [[1, 0, 0], [1]]],
            )
            self.assertEqual(
                T.rules(),
                [
                    ["\x01\x02", "\x02"],
                    ["\x02\x02", "\x02"],
                    ["\x01\x01\x01", "\x01"],
                    ["\x02\x01\x01", "\x02"],
                ],
            )

        self.assertEqual(T.size(), S.size())
    def test_basic(self):
        ReportGuard(False)
        s1 = PythonElement(1)
        s2 = PythonElement(2)
        s3 = PythonElement(3)
        self.assertEqual(s3.get_value(), 3)
        self.assertTrue(not s1 < s1)
        self.assertTrue(s1 < s2)

        s = s2 * s3
        self.assertEqual(s.get_value(), 6)  # Fails with Sage Integers

        S = FroidurePin([s1])
        self.assertEqual(S.size(), 1)

        S = FroidurePin([s1, s2, s3])
        S.enumerate(100)
        self.assertEqual(S.current_size(), 8195)
        self.assertEqual(S.current_nr_rules(), 6)
    def test_idempotents(self):
        S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
        S.run()
        self.assertEqual(
            std.distance(S.cbegin_idempotents(), S.cend_idempotents()),
            S.nr_idempotents(),
        )

        self.assertEqual(
            list(S.idempotents()),
            [
                Transformation([0, 0, 0]),
                Transformation([0, 1, 0]),
                Transformation([1, 1, 1]),
            ],
        )
Exemple #14
0
    def test_bug1_works_zno(self):
        S = FpSemigroup()
        S.set_alphabet("01")

        S.add_rule("000", "0")
        S.add_rule("1111", "1")
        S.add_rule("01110", "00")
        S.add_rule("1001", "11")
        S.add_rule("001010101010", "00")
        S.run()
        S.rules()

        S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
        self.assertEqual(S.size(), 4)
        self.assertEqual(std.distance(S.cbegin(), S.cend()), S.size())
 def test_copy_constructor(self):
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     T = S
     self.assertTrue(T is S)
     self.assertTrue(S is T)
     T = FroidurePin(S)
     self.assertFalse(S is T)
     self.assertFalse(T is S)
     self.assertEqual(T.size(), 4)
     self.assertEqual(S.current_size(), 2)
Exemple #16
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())
Exemple #17
0
 def test_aaa_bug(self):
     ReportGuard(False)
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     S.run()
     self.assertEqual(std.distance(S.cbegin(), S.cend()), 4)
     self.assertEqual(
         list(S),
         [
             Transformation([1, 0, 1]),
             Transformation([0, 0, 0]),
             Transformation([0, 1, 0]),
             Transformation([1, 1, 1]),
         ],
     )
Exemple #18
0
    def test_settings(self):
        ReportGuard(False)
        tc = ToddCoxeter("left")
        tc.set_nr_generators(1)
        tc.add_pair([0, 0, 0, 0], [0, 0])
        try:
            tc.reserve(10)
        except:
            self.fail("unexpected exception thrown")
        tc.run()

        self.assertFalse(tc.is_standardized())
        try:
            tc.standardize("lex")
        except:
            self.fail("unexpected exception thrown")
        self.assertTrue(tc.is_standardized())
        try:
            tc.standardize("shortlex")
        except:
            self.fail("unexpected exception thrown")
        try:
            tc.standardize("recursive")
        except:
            self.fail("unexpected exception thrown")
        try:
            tc.standardize(True)
        except:
            self.fail("unexpected exception thrown")
        try:
            tc.standardize(False)
        except:
            self.fail("unexpected exception thrown")
        with self.assertRaises(TypeError):
            tc.standardize(1)
        with self.assertRaises(ValueError):
            tc.standardize("shooortlex")

        S = FroidurePin(Transformation([3, 1, 2, 1, 2]),
                        Transformation([1, 1, 1, 2, 2]))
        tc = ToddCoxeter("twosided", S)
        try:
            tc.froidure_pin_policy()
        except:
            self.fail("unexpected exception thrown")
        try:
            tc.froidure_pin_policy("none")
        except:
            self.fail("unexpected exception thrown")
        self.assertEqual(tc.froidure_pin_policy(), "none")
        try:
            tc.froidure_pin_policy("use_relations")
        except:
            self.fail("unexpected exception thrown")
        self.assertEqual(tc.froidure_pin_policy(), "use_relations")
        try:
            tc.froidure_pin_policy("use_cayley_graph")
        except:
            self.fail("unexpected exception thrown")
        self.assertEqual(tc.froidure_pin_policy(), "use_cayley_graph")
        with self.assertRaises(TypeError):
            tc.froidure_pin_policy(1)
        with self.assertRaises(ValueError):
            tc.froidure_pin_policy("userelations")

        tc = ToddCoxeter("left")
        tc.set_nr_generators(2)
        tc.add_pair([0, 0, 0, 0], [0])
        tc.add_pair([1, 1, 1, 1], [0])
        with self.assertRaises(ValueError):
            tc.strategy("feelsch")
        with self.assertRaises(TypeError):
            tc.strategy(1)
        try:
            tc.strategy("felsch")
        except:
            self.fail("unexpected exception thrown")
        self.assertEqual(tc.strategy(), "felsch")
        try:
            tc.strategy("hlt")
        except:
            self.fail("unexpected exception thrown")
        self.assertEqual(tc.strategy(), "hlt")
        try:
            tc.strategy("random")
        except:
            self.fail("unexpected exception thrown")
        self.assertEqual(tc.strategy(), "random")
Exemple #19
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])
 def test_add_generator(self):
     ReportGuard(False)
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     self.assertEqual(S.size(), 4)
     S.add_generator(Transformation([1, 2, 0]))
     self.assertEqual(S.size(), 24)
    def test_settings(self):
        S = FroidurePin(Transformation([1, 0, 1]))

        self.assertTrue(isinstance(S.batch_size(), int))
        S.batch_size(10)
        self.assertEqual(S.batch_size(), 10)

        self.assertTrue(isinstance(S.concurrency_threshold(), int))
        S.concurrency_threshold(10)
        self.assertEqual(S.concurrency_threshold(), 10)

        self.assertFalse(S.immutable())

        self.assertTrue(isinstance(S.max_threads(), int))
        S.max_threads(1)
        self.assertEqual(S.max_threads(), 1)
 def test_cayley_graphs(self):
     ReportGuard(False)
     S = FroidurePin(Transformation(list(range(1, 10)) + [0]))
     S.run()
     for i in range(S.size()):
         self.assertEqual(S.left(i, 0), S.right(i, 0))
     for i in range(S.size()):
         self.assertEqual(S.left_cayley_graph().get(i, 0), S.left(i, 0))
         self.assertEqual(S.right_cayley_graph().get(i, 0), S.right(i, 0))
 def test_run_for(self):
     ReportGuard(False)
     S = FroidurePin(Transformation([1, 0] + list(range(2, 10))))
     S.add_generator(Transformation(list(range(1, 10)) + [0]))
     S.run_for(milliseconds(10))
 def test_run_until(self):
     if compare_version_numbers(libsemigroups_version(), "1.0.8"):
         ReportGuard(False)
         S = FroidurePin(Transformation([1, 0] + list(range(2, 10))))
         S.add_generator(Transformation(list(range(1, 10)) + [0]))
         S.run_until(lambda: S.current_size() > 10)
         self.assertFalse(S.finished())
         self.assertTrue(S.current_size() > 10)
         S.run_until(lambda: S.current_nr_rules() > 100)
         self.assertFalse(S.finished())
         self.assertTrue(S.current_nr_rules() > 100)
 def test_state(self):
     ReportGuard(False)
     S = FroidurePin(Transformation([1, 0] + list(range(2, 10))))
     S.add_generator(Transformation(list(range(1, 10)) + [0]))
     self.assertFalse(S.started())
     S.run_for(milliseconds(10))
     self.assertTrue(S.started())
     self.assertTrue(S.timed_out())
     self.assertTrue(S.stopped())
     self.assertFalse(S.finished())
    def test_attributes(self):
        ReportGuard(False)
        S = FroidurePin(Transformation(list(range(1, 10)) + [0]))
        self.assertEqual(S.current_nr_rules(), 0)
        self.assertEqual(S.current_size(), 1)
        self.assertEqual(S.degree(), 10)

        self.assertEqual(S.size(), 10)

        self.assertTrue(S.is_idempotent(9))
        for i in range(8):
            self.assertFalse(S.is_idempotent(i))

        with self.assertRaises(LibsemigroupsException):
            S.is_idempotent(10)

        self.assertTrue(S.is_monoid())
        self.assertEqual(S.nr_generators(), 1)
        self.assertEqual(S.nr_idempotents(), 1)
 def test_factorisation(self):
     S = FroidurePin(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
     self.assertEqual(S.size(), 4)
     self.assertEqual([S.factorisation(x) for x in range(S.size())],
                      [[0], [1], [0, 0], [1, 0]])
     with self.assertRaises(LibsemigroupsCppyyException):
         S.factorisation(4)
     # check again because of some bug in an early version of
     # unwrap(_return_value)
     self.assertEqual([S.factorisation(x) for x in range(S.size())],
                      [[0], [1], [0, 0], [1, 0]])
     with self.assertRaises(LibsemigroupsCppyyException):
         S.factorisation(Transformation([1, 1, 2]))
     self.assertEqual([S.factorisation(x) for x in S],
                      [[0], [1], [0, 0], [1, 0]])
    def test_membership(self):
        S = FroidurePin(Transformation(list(range(1, 5)) + [0]))
        S.add_generator(Transformation([1, 0] + list(range(2, 5))))
        if compare_version_numbers(libsemigroups_version(), "1.0.8"):
            self.assertEqual(
                S.current_position(Transformation([2, 0, 3, 4, 1])),
                18446744073709551615,
            )

        self.assertEqual(S.at(10), Transformation([2, 0, 3, 4, 1]))
        with self.assertRaises(Exception):
            S.at(120)
        with self.assertRaises(Exception):
            S[120]

        self.assertTrue(S.contains(Transformation([2, 0, 3, 4, 1])))
        self.assertEqual(S.position(Transformation([2, 0, 3, 4, 1])), 10)
        self.assertEqual(S.sorted_position(Transformation([2, 0, 3, 4, 1])),
                         51)
        self.assertEqual(S.sorted_at(51), Transformation([2, 0, 3, 4, 1]))

        if compare_version_numbers(libsemigroups_version(), "1.0.8"):
            self.assertEqual(
                S.current_position(Transformation([2, 0, 3, 4, 1])), 15)
    def test_factorisation_and_relations(self):
        ReportGuard(False)
        S = FroidurePin(Transformation(list(range(1, 10)) + [0]))
        self.assertEqual(S.length_const(0), 1)

        with self.assertRaises(LibsemigroupsException):
            S.length_const(1)

        self.assertEqual(S.current_max_word_length(), 1)
        S.run()
        self.assertEqual(S.current_max_word_length(), 10)

        self.assertTrue(S.equal_to([0, 0], [0, 0]))
        self.assertFalse(S.equal_to([0], [0, 0]))
        self.assertFalse(S.equal_to([0] * 10, [0]))

        with self.assertRaises(LibsemigroupsException):
            self.assertFalse(S.equal_to([0] * 10, [1]))
        with self.assertRaises(LibsemigroupsException):
            self.assertFalse(S.equal_to([1], [0] * 10))

        for i in range(S.size()):
            self.assertEqual(S.length_const(i), i + 1)
            self.assertEqual(S.length_non_const(i), i + 1)

        with self.assertRaises(LibsemigroupsException):
            S.length_non_const(10)

        self.assertEqual(S.letter_to_pos(0), 0)
        with self.assertRaises(LibsemigroupsException):
            S.letter_to_pos(1)

        S.add_generator(Transformation([1, 0] + list(range(2, 10))))
        self.assertEqual(S.letter_to_pos(1), 10)
        S.add_generator(Transformation(list(range(1, 10)) + [0]))
        self.assertEqual(S.letter_to_pos(2), 0)
        self.assertEqual(
            [S.minimal_factorisation(x) for x in range(10)],
            [
                [0],
                [0, 0],
                [0, 0, 0],
                [0, 0, 0, 0],
                [0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [1, 1],
            ],
        )

        with self.assertRaises(LibsemigroupsCppyyException):
            S.next_relation()

        S = FroidurePin(Transformation(list(range(1, 5)) + [0]))
        S.add_generator(Transformation([1, 0] + list(range(2, 5))))
        self.assertEqual(S.current_nr_rules(), 0)
        self.assertEqual(S.word_to_pos([0, 1, 0, 1]), 18446744073709551615)

        self.assertEqual(S.nr_rules(), 25)
        self.assertEqual(S.word_to_element([0, 1, 0, 1]),
                         Transformation([0, 3, 4, 1, 2]))
        self.assertEqual(S.word_to_pos([0, 1, 0, 1]), 15)