示例#1
0
 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))
示例#2
0
 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())
示例#3
0
 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)))
示例#4
0
 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))
示例#5
0
 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]])
示例#6
0
 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))
示例#7
0
 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))
示例#8
0
 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)
示例#9
0
 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)
示例#10
0
 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)
示例#11
0
 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)
示例#12
0
 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]
示例#13
0
 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)))
示例#14
0
 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)))
示例#15
0
 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)