def AbelianGroup(*cyclic_orders): """ Returns the direct product of cyclic groups with the given orders. According to the structure theorem for finite abelian groups ([1]), every finite abelian group can be written as the direct product of finitely many cyclic groups. [1] http://groupprops.subwiki.org/wiki/Structure_theorem_for_finitely _generated_abelian_groups Examples ======== >>> from sympy.combinatorics.named_groups import AbelianGroup >>> AbelianGroup(3,4) PermutationGroup([Permutation([1, 2, 0, 3, 4, 5, 6]),\ Permutation([0, 1, 2, 4, 5, 6, 3])]) See Also ======== DirectProduct """ groups = [] degree = 0 order = 1 for size in cyclic_orders: degree += size order *= size groups.append(CyclicGroup(size)) G = DirectProduct(*groups) G._is_abelian = True G._degree = degree G._order = order return G
def test_direct_product_n(): C = CyclicGroup(4) D = DihedralGroup(4) G = DirectProduct(C, C, C) assert G.order() == 64 assert G.degree == 12 assert len(G.orbits()) == 3 assert G.is_abelian == True H = DirectProduct(D, C) assert H.order() == 32 assert H.is_abelian == False