Пример #1
0
 def test_schreier_sims_algorithm_fixed_base(self):
     cf  =Permutation.read_cycle_form
     a = cf([[1, 2]],4)
     b = cf([[1,2,3,4]], 4)
     c = cf([[2, 3, 4]], 4)
     d = cf([[2, 3], [1,4]], 4)
     e = cf([], 4)
     info = schreier_sims_algorithm_fixed_base([], [1,2,3,4], e)
     self.assertEquals(info, ([],[],[],[]))
     info = schreier_sims_algorithm_fixed_base([e,e,e,e], [1,2,3,4], e)
     self.assertEquals(info, ([],[],[],[]))
     base, gens, c_gens, graphs = schreier_sims_algorithm_fixed_base([a,b], [4,3], e)
     self.assertEquals(len(base), 3)
     self.assertEquals(base[:2], [4,3])
     base, gens, c_gens, graphs = schreier_sims_algorithm_fixed_base([c,d], [4,1], e)
     self.assertEquals(base[:2], [4,1])
     siftee = membership_siftee(a, graphs, base, e)
     self.assertNotEqual(siftee, e)
     siftee = membership_siftee(cf([[1,2,3]],4), graphs, base, e)
     self.assertEqual(siftee, e)
     base, gens, c_gens, graphs = schreier_sims_algorithm_fixed_base([c], [1,2,3,4], e)
     self.assertEquals(base[:2], [1,2])
     siftee = membership_siftee(a, graphs, base, e)
     self.assertNotEqual(siftee, e)
     siftee = membership_siftee(cf([[2,4,3]],4), graphs, base, e)
     self.assertEqual(siftee, e)        
Пример #2
0
 def test_group_size(self):
     cf  = Permutation.read_cycle_form
     a = cf([[1, 2, 3,4,5]],5)
     b = cf([[1,2,3]], 5)
     e = cf([],5)
     base, _, _, graphs = schreier_sims_algorithm_fixed_base([a,b],[1,2,3,4,5], e)
     self.assertEqual(group_size(graphs),60)
Пример #3
0
 def fixed_base_group(cls, gens, base):
     if len(gens) > 0:
         g = gens[0]
         e = g ** -1 * g
     else:
         e = Permutation([1])
     return cls(gens, schreier_sims_info=schreier_sims_tools.schreier_sims_algorithm_fixed_base(gens, base, e))
Пример #4
0
 def test_base_image_member(self):
     cf  =Permutation.read_cycle_form
     a = cf([[1, 2]],4)
     b = cf([[1,2,3,4]], 4)
     c = cf([[2,3]], 4)
     e = cf([],4)
     base, gens, c_gens, graphs = schreier_sims_algorithm_fixed_base([a,b],[1,2,3,4], e)
     self.assertEqual(base_image_member(base,[1,3,2],graphs,e), c)
Пример #5
0
 def change_base(self, new_base):
     prefix_size = min(len(self.base), len(new_base))
     if self.base[:prefix_size] != new_base[:prefix_size]:
         # the bases diverge at some (possibly redundant) point.
         # in the future this should be smarter and check for redundant elements
         # too but on the other hand that can also be taken care of in a
         # future version of schreier_sims_tools (i.e. provide support for base change)
         ss_info = schreier_sims_tools.schreier_sims_algorithm_fixed_base(self.generators, new_base, self.identity)
         self.base = ss_info[0]
         self.strong_generators = ss_info[1]
         self.chain_generators = ss_info[2]
         self.schreier_graphs = ss_info[3]
Пример #6
0
 def test_memebership_index(self):
     cf  = Permutation.read_cycle_form
     a = cf([[1, 2, 3,4,5]],5)
     b = cf([[1,2,3]], 5)
     c = cf([[1,2]], 5)
     e = cf([],5)
     ordering = [3,5,2,1,4]
     base, _, _, graphs = schreier_sims_algorithm_fixed_base([a,b], ordering, e)
     S5_base, _, _, S5_graphs = schreier_sims_algorithm_fixed_base([a,c], ordering, e)
     real_group = []
     S5_group = []
     
     ele_key = ordering_to_key(ordering)        
     perm_key = ordering_to_perm_key(ordering)
     
     for index in range(group_size(S5_graphs)):
         S5_group.append(element_at_index(S5_base, S5_graphs, index, e, key=ele_key))
      
     self.assertEquals(len(S5_group), 120)
     self.assertEquals(S5_group, sorted(S5_group, key = perm_key))
     
     
     for index in range(group_size(graphs)):
         real_group.append(element_at_index(base, graphs, index, e, key=ele_key))
          
     self.assertEquals(len(real_group), 60)
     self.assertEquals(real_group, sorted(real_group, key = perm_key))
     
     for ele in S5_group:
         cand_index = membership_index(ele, graphs, base, e, key = ele_key)
         if cand_index > -1:
             #print("{}: {} {}?".format(cand_index, ele, real_group[cand_index]))
             self.assertTrue(ele in real_group)
             self.assertEquals(real_group[cand_index], ele)
         else:
             self.assertFalse(ele in real_group)
Пример #7
0
 def test_element_at_index(self):
     cf  = Permutation.read_cycle_form
     a = cf([[1, 2, 3,4,5]],5)
     b = cf([[1,2,3]], 5)
     e = cf([],5)
     ordering = [3,5,2,1,4]
     base, _, _, graphs = schreier_sims_algorithm_fixed_base([a,b], ordering, e)
     full_group = []
     ele_key = ordering_to_key(ordering)        
     perm_key = ordering_to_perm_key(ordering)
     for index in range(group_size(graphs)):
         full_group.append(element_at_index(base, graphs, index, e, key=ele_key))
     ordered_group = sorted(full_group, key = perm_key)
     #for x,y in zip(full_group, ordered_group):
         #print("{!s:<20} {!s:<20}".format(x,y))
     self.assertEqual(full_group, ordered_group)
Пример #8
0
 def change_base(self, new_base):
     ss_info = schreier_sims_tools.schreier_sims_algorithm_fixed_base(self.generators, new_base, self.identity)
     self.base = ss_info[0]
     self.strong_generators = ss_info[1]
     self.chain_generators = ss_info[2]
     self.schreier_graphs = ss_info[3]