def test_partition_backtrack_subgroup_leon_paper(self): cf = Permutation.read_cycle_form a = cf([[2,3],[4,6],[5,8],[9,11]], 13) b = cf([[1,2,4,7,9,3,5,6,8,10,11,12,13]], 13) G = PermGroup([a,b]) fam_subgroup = SubgroupFamily(G) prop_subgroup = SubgroupProperty(G) stab = Partition([[1,3,5,7,9,11],[2,4,6,8,10,12,13]]) fam_part_stab = PartitionStabaliserFamily(stab) prop_part_stab = PartitionStabaliserProperty(stab) size = 13 fam = RefinementUnion([fam_subgroup, fam_part_stab]) prop = CosetPropertyUnion([prop_subgroup, prop_part_stab]) con = PartitionStackConstraint() multi_back = MultiBacktracker() mods = ModifierUnion([fam, prop, con, multi_back]) ls = LeonSearch(mods, size) gens = ls.subgroup() cand_G = PermGroup(gens) leon_gens = [] leon_gens.append(cf([[2,12],[4,10],[5,7],[6,8]],13)) leon_gens.append(cf([[2,8],[3,5],[4,6],[10,12]],13)) leon_gens.append(cf([[1,9],[2,4],[6,8],[10,12]],13)) leon_G = PermGroup(leon_gens) third_source = [] for ele in G._list_elements(): if prop.property_check(ele): third_source.append(ele) self.assertEqual(cand_G.order(), leon_G.order()) for perm in leon_gens: self.assertTrue(perm in G) self.assertTrue(perm in cand_G)
def test_partition_backtrack_subgroup_two_prop_subgroup_stab(self): cf = Permutation.read_cycle_form a = cf([[3,2,6]], 7) b = cf([[3,2],[6,7]], 7) G = PermGroup([a,b]) fam_subgroup = SubgroupFamily(G) prop_subgroup = SubgroupProperty(G) stab = Partition([[1,3,5,7],[2,4,6]]) fam_part_stab = PartitionStabaliserFamily(stab) prop_part_stab = PartitionStabaliserProperty(stab) size = 7 fam = RefinementUnion([fam_part_stab, fam_subgroup]) prop = CosetPropertyUnion([prop_part_stab, prop_subgroup]) con = PartitionStackConstraint() mods = ModifierUnion([fam, prop, con]) ls = LeonSearch(mods, size) gens = ls.subgroup() found = [] s7 = PermGroup([cf([[1,2]],7),cf([[1,2,3,4,5,6,7]],7)]) for ele in s7._list_elements(): if prop.property_check(ele): found.append(ele) self.assertEqual(len(PermGroup(gens)), len(found))
def test_multi_coset_property(self): cf = Permutation.read_cycle_form a = cf([[1,2,3]],4) b = cf([[1,2],[3,4]],4) gens = [a,b] G= PermGroup(gens) prop1 = SubgroupProperty(G) prop2 = PartitionStabaliserProperty(Partition([[2,3],[1,4]])) co_prop = CosetPropertyUnion([prop1,prop2]) pos = cf([[2,3],[1,4]]) self.assertTrue(co_prop.property_check(pos))
def test_subgroup_property(self): cf = Permutation.read_cycle_form a = cf([[1,2,3]],4) b = cf([[1,2],[3,4]],4) gens = [a,b] G= PermGroup(gens) prop = CosetPropertyUnion([SubgroupProperty(G)]) pos = cf([[2,3,4]],4) neg = cf([[3,4]],4) self.assertTrue(prop.property_check(pos)) self.assertFalse(prop.property_check(neg))
def test_partition_backtrack_subgroup_one_prop_stab(self): cf = Permutation.read_cycle_form stab = Partition([[1,3,5],[2,4,6]]) fam_part_stab = PartitionStabaliserFamily(stab) prop_part_stab = PartitionStabaliserProperty(stab) size = 6 fam = RefinementUnion([fam_part_stab]) prop = CosetPropertyUnion([prop_part_stab]) con = PartitionStackConstraint() mods = ModifierUnion([fam, prop, con]) ls = LeonSearch(mods, size) gens = ls.subgroup() found = [] s6 = PermGroup([cf([[1,2]],6),cf([[1,2,3,4,5,6]],6)]) for ele in s6._list_elements(): if prop.property_check(ele): found.append(ele) self.assertEqual(sorted(PermGroup(gens)._list_elements()), sorted(found))
def test_partition_backtrack_subgroup_one_prop_subgroup(self): cf = Permutation.read_cycle_form a = cf([[1,2,3]], 5) b = cf([[1,2],[3,4]], 5) G = PermGroup([a,b]) fam_subgroup = SubgroupFamily(G) prop_subgroup = SubgroupProperty(G) fam = RefinementUnion([fam_subgroup]) prop = CosetPropertyUnion([prop_subgroup]) con = PartitionStackConstraint() mods = ModifierUnion([fam, prop, con]) ls = LeonSearch(mods, 5) gens = ls.subgroup() found = [] s5 = PermGroup([cf([[1,2]],5),cf([[1,2,3,4,5]],5)]) for ele in s5._list_elements(): if prop.property_check(ele): found.append(ele) self.assertEqual(sorted(PermGroup(gens)._list_elements()), sorted(found))
def test_permutation_commuter_property(self): prop = CosetPropertyUnion([PermutationCommuterProperty(Permutation([2,1,3,4]))]) pos = Permutation.read_cycle_form([[3,4]],4) neg = Permutation.read_cycle_form([[2,3]],4) self.assertTrue(prop.property_check(pos)) self.assertFalse(prop.property_check(neg))
def test_partition_stabaliser_property(self): prop = CosetPropertyUnion([PartitionStabaliserProperty(Partition([[1,2],[3,4],[5]]))]) pos = Permutation.read_cycle_form([[1,2]],5) neg = Permutation.read_cycle_form([[1,2],[4,5]],5) self.assertTrue(prop.property_check(pos)) self.assertFalse(prop.property_check(neg))
def test_coset_property_init(self): prop = CosetPropertyUnion([IdentityProperty()]) self.assertTrue(prop.property_check(Permutation.read_cycle_form([[1,2,3,4]], 5)))