def test_is_normal(self): a = Perm()(0, 1, 2) b = Perm()(0, 1) c = Perm()(0, 2, 1) G = Group() G.insert(a) G.insert(b) self.assertEqual(G.order(), 6) # G = S_3 H = Group() H.insert(a) H.insert(c) self.assertEqual(H.order(), 3) # H = A_3 self.assertTrue(H.is_normal(G))
def test_normal_closure(self): n = 5 # Make Cyclic(5). C5 = Group() C5.insert(Perm()(*range(n))) self.assertEqual(C5.order(), n) # Make Sym(5). S5 = Group() S5.insert(Perm()(*range(n))) S5.insert(Perm()(0, 1)) self.assertEqual(S5.order(), 120) A5 = S5.normal_closure(C5) # we get Alt(5) self.assertEqual(A5.order(), 60) for perm in A5: self.assertTrue(perm.is_even())
def test_orbits4(self): self.N = 10 self.group = Group() self.group.insert(Perm()(0, 1, 2)) self.assertFalse(self.group.is_transitive(points=range(self.N))) self.assertTrue( self.group.is_transitive(strict=False, points=range(self.N)))
def test_cyclic6(self): points = range(5) C6 = Group() C6.insert(Perm()(0, 1, 2)(3, 4)) self.assertEqual(C6.order(), 6) self.assertEqual(C6.orbits(points), [[0, 2, 1], [3, 4]]) self.assertEqual(len(C6.orbits(points)), 2) self.assertFalse(C6.is_transitive(points))
def test_orbits2(self): self.N = 4 self.group = Group() self.group.insert(Perm()(0, 1)) self.group.insert(Perm()(2, 3)) self.assertFalse(self.group.is_transitive(points=range(self.N))) self.assertEqual(self.group.orbits(range(self.N)), [[0, 1], [2, 3]]) self.assertEqual(self.group.orbits([0, 1]), [[0, 1]]) self.assertEqual(self.group.orbits([0, 1, 2]), [[0, 1], [2, 3]])
def test_orbits1(self): self.N = 3 self.group = Group() self.group.insert(Perm()(0, 1)) self.assertEqual(self.group.orbits(range(self.N)), [[0, 1], [2]]) self.assertEqual(self.group.orbits([0, 1]), [[0, 1]]) self.assertFalse(self.group.is_transitive(points=range(self.N))) self.assertTrue( self.group.is_transitive(points=range(self.N), strict=False))
def test_is_subgroup(self): self.group2 = Group() # Tworze grupe cykliczna C_N. self.group2.insert(Perm()(*range(self.N))) self.assertEqual(self.group2.order(), self.N) self.assertTrue(self.group2.is_subgroup(self.group1)) self.assertTrue(self.group2.is_abelian()) self.assertFalse(self.group1.is_abelian()) self.assertFalse(self.group2.is_normal(self.group1))
def test_alt_n(self): self.N = 5 self.assertTrue(self.N > 2) self.group = Group() order = 1 for i in range(self.N - 2): self.group.insert(Perm()(i, i + 1, i + 2)) order = order * (i + 3) self.assertEqual(self.group.order(), order) self.assertTrue(self.group.is_transitive(points=range(self.N))) self.assertEqual(len(self.group.orbits(range(self.N))), 1)
def test_centralizer(self): # Tworze grupe cykliczna. self.group2 = Group() self.group2.insert(Perm()(*range(self.N))) self.assertEqual(self.group2.order(), self.N) # centrum grupy abelowej cyklicznej to cala grupa self.group3 = self.group2.center() self.assertEqual(self.group3.order(), self.N) # Dalej dla grupy symetrycznej. self.group2 = self.group1.center() self.assertEqual(self.group2.order(), 1)
def setUp(self): self.N = 6 self.assertTrue(self.N > 2) self.group = Group() self.H = Perm()(*range(self.N)) self.group.insert(self.H) left = 1 right = self.N - 1 perm = Perm() while left < right: perm = perm * Perm()(left, right) left = left + 1 right = right - 1 self.group.insert(perm)
def test_alt_5(self): self.N = 5 self.group = Group() self.assertEqual(self.group.order(), 1) self.group.insert(Perm()(0, 1, 2)) self.assertEqual(self.group.order(), 3) self.group.insert(Perm()(1, 2, 3)) self.assertEqual(self.group.order(), 12) self.group.insert(Perm()(2, 3, 4)) self.assertEqual(self.group.order(), 60) self.assertFalse(Perm()(0, 1) in self.group) self.assertTrue(Perm()(*range(self.N)) in self.group) # N is odd self.assertTrue(self.group.is_transitive(points=range(self.N))) self.assertEqual(len(self.group.orbits(range(self.N))), 1)
def setUp(self): self.N = 21 self.group = Group() self.order_rubik2 = 3674160 # 6 * 9 * 12 * 15 * 18 * 21 R1 = Perm()(2, 13, 19, 4) * Perm()(3, 11, 0, 6) * Perm()(7, 8, 10, 9) D1 = Perm()(5, 9, 13, 16) * Perm()(6, 10, 14, 17) * Perm()(18, 19, 0, 20) B1 = Perm()(1, 16, 0, 8) * Perm()(2, 15, 20, 10) * Perm()(11, 12, 14, 13) R2 = R1 * R1 R3 = R1 * R2 D2 = D1 * D1 D3 = D1 * D2 B2 = B1 * B1 B3 = B1 * B2 self.generators = [R1, D1, B1] # cwiartki i polowki self.face_turns = [R1, R2, R3, D1, D2, D3, B1, B2, B3] # tylko cwiartki self.quarter_turns = [R1, R3, D1, D3, B1, B3]
def setUp(self): self.N = 4 # Tworze grupe symetryczna. self.group1 = Group() self.group1.insert(Perm()(0, 1)) self.group1.insert(Perm()(*range(self.N)))
def test_orbits3(self): # grupa cykliczna self.N = 10 self.group = Group() self.group.insert(Perm()(*range(self.N))) self.assertTrue(self.group.is_transitive(points=range(self.N)))
def setUp(self): # The cyclic group from the paper by Knuth. self.N = 6 self.H = Perm()(0, 1, 2, 4)(3, 5) self.group = Group() self.group.insert(self.H)