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_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_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_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)