コード例 #1
0
    def test_richcmp(self):
        self.assertEqual(PartialPerm([1, 2, 3], [2, 1, 0], 5),
                         PartialPerm([1, 2, 3], [2, 1, 0], 5))
        self.assertFalse(
            PartialPerm([1, 2, 3], [2, 1, 0], 5) != PartialPerm([1, 2, 3],
                                                                [2, 1, 0], 5))
        self.assertFalse(
            PartialPerm([1, 2, 4], [2, 1, 0], 5) == PartialPerm([1, 2, 3],
                                                                [2, 3, 0], 5))
        self.assertNotEqual(PartialPerm([1, 2, 4], [2, 1, 0], 5),
                            PartialPerm([1, 2, 3], [2, 3, 0], 5))
        self.assertFalse(
            PartialPerm([1, 2, 4], [2, 1, 0], 5) < PartialPerm([1, 2, 3],
                                                               [2, 3, 0], 5))
        self.assertLess(PartialPerm([1, 2], [0, 1], 3),
                        PartialPerm([2, 0], [0, 1], 3))
        self.assertFalse(
            PartialPerm([1, 2], [0, 1], 3) > PartialPerm([2, 0], [0, 1], 3))
        self.assertGreater(PartialPerm([1, 2], [1, 2], 3),
                           PartialPerm([1, 2], [0, 1], 3))
        self.assertGreaterEqual(PartialPerm([1, 2], [1, 2], 3),
                                PartialPerm([1, 2], [0, 1], 3))
        self.assertLessEqual(PartialPerm([1, 2, 3], [2, 1, 0], 5),
                             PartialPerm([1, 2, 3], [2, 1, 0], 5))

        with self.assertRaises(TypeError):
            (PartialPerm([1, 2], [2, 1], 3) == Bipartition([1, -1], [2, 3, -2],
                                                           [-3]))
        with self.assertRaises(TypeError):
            PartialPerm([0, 1], [0, 1], 2) < Transformation([0, 1])
        with self.assertRaises(TypeError):
            PartialPerm([0, 1], [0, 1], 2) != Transformation([0, 1])
コード例 #2
0
 def test_init(self):
     Transformation([0, 1, 2, 3])
     Transformation([1, 1, 3, 2, 4, 3])
     Transformation([9, 3, 1, 2, 0, 8, 1, 2, 0, 5])
     # Check for CPPYY issue workaround
     Transformation([])
     Transformation([0, 1])
コード例 #3
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)
コード例 #4
0
 def test_dealloc(self):
     U, V = Transformation([1, 0, 1, 2]), Transformation([1, 1, 3, 2, 4, 3])
     del U, V
     with self.assertRaises(NameError):
         V
     with self.assertRaises(NameError):
         U
コード例 #5
0
    def test_richcmp(self):
        self.assertEqual(Bipartition([3, -4, -1], [2, -3], [4, -2], [1]),
                         Bipartition([4, -2], [3, -4, -1], [1], [2, -3]))
        self.assertFalse(
            Bipartition([3, -4, -1], [2, -3], [4, -2], [1]) != Bipartition(
                [4, -2], [3, -4, -1], [1], [2, -3]))
        self.assertLessEqual(Bipartition([1, -1, 3], [-3, 2, -2]),
                             Bipartition([1, -1], [2, 3, -2], [-3]))
        self.assertLess(Bipartition([1, -1], [2, -2]),
                        Bipartition([1, -2], [2, -1]))
        self.assertLessEqual(Bipartition([1, -1], [2, -2]),
                             Bipartition([1, -2], [2, -1]))
        self.assertGreaterEqual(Bipartition([1, -1, 3], [-3, 2, -2]),
                                Bipartition([1, -2], [2, -1]))
        self.assertFalse(
            Bipartition([1, -1, 3], [-3, 2, -2]) > Bipartition(
                [1, -1], [2, 3, -2], [-3]))

        with self.assertRaises(TypeError):
            (PartialPerm([1, 2], [2, 1], 3) == Bipartition([1, -1], [2, 3, -2],
                                                           [-3]))
        with self.assertRaises(TypeError):
            Bipartition([1, -1], [2, -2]) < Transformation([0, 1])
        with self.assertRaises(TypeError):
            Bipartition([1, -1], [2, -2]) != Transformation([0, 1])
コード例 #6
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)
コード例 #7
0
    def test_init_fail(self):
        with self.assertRaises(TypeError):
            Transformation([1, 5, 26])
        with self.assertRaises(TypeError):
            Transformation([1])

        with self.assertRaises(TypeError):
            Transformation(26)
        with self.assertRaises(TypeError):
            Transformation(["a", "b"])
コード例 #8
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())
コード例 #9
0
 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)
コード例 #10
0
 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())
コード例 #11
0
 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]),
         ],
     )
コード例 #12
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})
コード例 #13
0
 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)
コード例 #14
0
    def test_init_fail(self):
        with self.assertRaises(TypeError):
            Transformation([1, 5, 26])
        with self.assertRaises(TypeError):
            Transformation([1])

        with self.assertRaises(TypeError):
            Transformation(26)
        with self.assertRaises(TypeError):
            Transformation(['a', 'b'])
        with self.assertRaises(TypeError):
            Transformation([0.1, 1.0])
コード例 #15
0
    def test_init(self):
        Semigroup(-1)
        Semigroup(Transformation([1, 0, 1]), Transformation([0, 0, 0]))

        with self.assertRaises(ValueError):
            Semigroup()

        with self.assertRaises(TypeError):
            Semigroup(Bipartition([1, -1], [2], [-2]), Transformation([0, 1]))

        with self.assertRaises(TypeError):
            Semigroup({2, 3})
コード例 #16
0
 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]])
コード例 #17
0
        def test_init(self):
            ReportGuard(False)
            S = Konieczny(Transformation([1, 0, 1]), Transformation([0, 0, 0]))
            self.assertEqual(S.size(), 4)
            self.assertEqual(S.number_of_generators(), 2)

            with self.assertRaises(KeyError):
                Konieczny()

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

            with self.assertRaises(TypeError):
                Konieczny({2, 3})
コード例 #18
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())
コード例 #19
0
    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]),
            ],
        )
コード例 #20
0
 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))
コード例 #21
0
    def test_mul(self):
        self.assertEqual(
            PBR([[1, -1]], [[1]]) * PBR([[1, -1]], [[1]]), PBR([[1, -1]],
                                                               [[1]]))
        self.assertEqual(
            PBR([[1, -1], [-2, -1]], [[1], [-2, -1]]) *
            PBR([[-1, 1, 2], [2]], [[-1, 1], [-2, 2]]),
            PBR([[1, -1], [1, -1]], [[1, -1], [1, -1, -2]]))
        self.assertEqual(
            PBR([[-1, 1, 2], [2]], [[-1, 1], [-2, 2]]) *
            PBR([[1, -1], [-2, -1]], [[1], [-2, -1]]),
            PBR([[-1, 1, 2], [2]], [[-1, 1], [-2, -1]]))
        self.assertEqual(
            PBR([[1, -1, 3], [-2, -1, 2], [3, -2]], [[2], [-2], [1, -1, 2]]) *
            PBR([[1, -1, 3], [-2, -1, 2], [3, -3, -2]],
                [[1, 2], [-2, 3, -3], [1, -1]]),
            PBR([[-1, 1, 2, 3], [-2, -1, 1, 2], [-2, -1, 3]],
                [[-2, -1, 2], [-3, -2, -1, 1, 2], [-1, 2]]))

        with self.assertRaises(TypeError):
            (Transformation([0, 2, 1]) *
             PBR([[1, -1, 3], [-2, -1, 2], [3, -2]], [[2], [-2], [1, -1, 2]]))
        with self.assertRaises(TypeError):
            (PBR([[1, -1, 3], [-2, -1, 2], [3, -2]], [[2], [-2], [1, -1, 2]]) *
             Bipartition([1, -1], [2, 3, -3], [-2]))
        with self.assertRaises(TypeError):
            PBR([[1, -1]], [[1]]) * 0.142857

        with self.assertRaises(ValueError):
            PBR([[1, -1, 3], [-2, -1, 2], [3, -2]],
                [[2], [-2], [1, -1, 2]]) * PBR([[1, -1]], [[1]])
コード例 #22
0
    def test_richcmp(self):
        self.assertEqual(PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]),
                         PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]))
        self.assertEqual(PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]),
                         PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]))
        self.assertNotEqual(
            PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]),
            PBR([[1, 2], [-2, 1, 2], [3, -3]], [[2, 1], [-2, 2, 1], [1, -1]]))
        self.assertTrue(
            PBR([[1], [1, 2, -1]], [[1], [2, -1, 1]]) < PBR([[1], [2]],
                                                            [[-1], [-2]]))
        self.assertTrue(
            PBR([[1, -1, 3], [-2, -1, 2], [3, -2]], [[2], [-2], [1, -1, 2]]) >
            PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]))
        self.assertTrue(
            PBR([[1, -1, 3], [-2, -1, 2], [3, -2]], [[2], [-2], [1, -1, 2]]) >=
            PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]))
        self.assertTrue(
            PBR([[1, -1], [-2, -1, 2]], [[2], [-2]]) <= PBR(
                [[1, -1], [-2, -1, 2]], [[2], [-2]]))

        with self.assertRaises(TypeError):
            (PBR([[1, -1, 3], [-2, -1, 2], [3, -2]],
                 [[2], [-2], [1, -1, 2]]) == Bipartition([1, -1], [2, 3, -2],
                                                         [-3]))
        with self.assertRaises(TypeError):
            PBR([[1, -1], [-2, -1]], [[1], [-2, -1]]) < Transformation([0, 1])
        with self.assertRaises(TypeError):
            (PBR([[1, -1], [-2, -1]], [[1], [-2, -1]]) != PartialPerm(
                [0, 1], [1, 0], 2))
        with self.assertRaises(TypeError):
            PBR([[1, -1]], [[1]]) < 3
コード例 #23
0
    def test_mul(self):
        (self.assertEqual(
            BooleanMat([[True, False], [False, True]]) *
            BooleanMat([[False, False], [False, True]]),
            BooleanMat([[False, False], [False, True]])))
        self.assertEqual(
            BooleanMat([[False]]) * BooleanMat([[True]]),
            BooleanMat([[False]]))
        (self.assertEqual(
            BooleanMat([[False, True, True], [True, True, False],
                        [False, False, False]]) *
            BooleanMat([[False, True, False], [True, False, False],
                        [False, False, True]]),
            BooleanMat([[True, False, True], [True, True, False],
                        [False, False, False]])))

        with self.assertRaises(TypeError):
            BooleanMat([[True, True], [False, False]]) * Transformation([1, 1])
        with self.assertRaises(TypeError):
            BooleanMat([[False, True, True], [True, True, False],
                        [False, False, False]]) * PartialPerm([0, 1], [1, 2],
                                                              3)
        with self.assertRaises(TypeError):
            BooleanMat([[True]]) * [[True]]
        with self.assertRaises(TypeError):
            BooleanMat([[True, False], [False, True]]) * Bipartition(
                [1, 2], [-1], [-2])

        with self.assertRaises(ValueError):
            (BooleanMat([[False, True, True], [True, True, False],
                         [False, False, False]]) *
             BooleanMat([[True, False], [False, True]]))
コード例 #24
0
    def test_richcmp(self):
        self.assertEqual(BooleanMat([[True, False], [False, True]]),
                         BooleanMat([[True, False], [False, True]]))
        self.assertFalse(
            BooleanMat([[True, False], [False, True]]) != BooleanMat(
                [[True, False], [False, True]]))
        self.assertFalse(
            BooleanMat([[True, False], [False, True]]) == BooleanMat(
                [[False, False], [False, True]]))
        self.assertLess(BooleanMat([[False]]), BooleanMat([[True]]))
        self.assertFalse(
            BooleanMat([[False, True, True], [True, True, False],
                        [False, False, False]]) < BooleanMat([[
                            False, True, False
                        ], [True, False, False], [False, False, True]]))
        self.assertLessEqual(BooleanMat([[False]]), BooleanMat([[False]]))
        self.assertGreater(BooleanMat([[True, False], [False, True]]),
                           BooleanMat([[True, False], [False, False]]))
        self.assertFalse(
            BooleanMat([[True, False], [False, True]]) > BooleanMat(
                [[True, False], [False, True]]))
        self.assertGreaterEqual(BooleanMat([[False]]), BooleanMat([[False]]))

        with self.assertRaises(TypeError):
            (Bipartition([1, -2], [-1, 2]) >= BooleanMat([False, False],
                                                         [True, False]))
        with self.assertRaises(TypeError):
            BooleanMat([False, False], [True, False]) < Transformation([0, 1])
        with self.assertRaises(TypeError):
            (BooleanMat([True, False], [False, True]) == PartialPerm([0], [1],
                                                                     2))
コード例 #25
0
 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)
コード例 #26
0
 def test_mul(self):
     (self.assertEqual(
         Transformation([1, 3, 2, 1]) * Transformation([0, 3, 2, 2]),
         Transformation([3, 2, 2, 3]),
     ))
     self.assertEqual(
         Transformation([2, 2, 2]) * Transformation([1, 0, 1]),
         Transformation([1, 1, 1]),
     )
     (self.assertEqual(
         Transformation([0, 1, 2, 3, 4, 5]) *
         Transformation([3, 2, 2, 3, 1, 4]),
         Transformation([3, 2, 2, 3, 1, 4]),
     ))
コード例 #27
0
 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))
コード例 #28
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())
コード例 #29
0
 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()
コード例 #30
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())