"""Test groups defined by the galois module. """ from sympy.combinatorics.galois import ( S4TransitiveSubgroups, S5TransitiveSubgroups, S6TransitiveSubgroups, find_transitive_subgroups_of_S6, ) from sympy.combinatorics.homomorphisms import is_isomorphic from sympy.combinatorics.named_groups import ( SymmetricGroup, AlternatingGroup, CyclicGroup, ) def test_four_group(): G = S4TransitiveSubgroups.V.get_perm_group() A4 = AlternatingGroup(4) assert G.is_subgroup(A4) assert G.degree == 4 assert G.is_transitive() assert G.order() == 4 assert not G.is_cyclic def test_M20(): G = S5TransitiveSubgroups.M20.get_perm_group() S5 = SymmetricGroup(5) A5 = AlternatingGroup(5) assert G.is_subgroup(S5) assert not G.is_subgroup(A5) assert G.degree == 5 assert G.is_transitive() assert G.order() == 20 # Setting this True means that for each of the transitive subgroups of S6, # we run a test not only on the fixed representation, but also on one freshly # generated by the search procedure. INCLUDE_SEARCH_REPS = False S6_randomized = {} if INCLUDE_SEARCH_REPS: S6_randomized = find_transitive_subgroups_of_S6(*list(S6TransitiveSubgroups)) def get_versions_of_S6_subgroup(name): vers = [name.get_perm_group()] if INCLUDE_SEARCH_REPS: vers.append(S6_randomized[name]) return vers def test_S6_transitive_subgroups(): """ Test enough characteristics to distinguish all 16 transitive subgroups. """ ts = S6TransitiveSubgroups A6 = AlternatingGroup(6) for name, alt, order, is_isom, not_isom in [ (ts.C6, False, 6, CyclicGroup(6), None), (ts.S3, False, 6, SymmetricGroup(3), None), (ts.D6, False, 12, None, None), (ts.A4, True, 12, None, None), (ts.G18, False, 18, None, None), (ts.A4xC2, False, 24, None, SymmetricGroup(4)), (ts.S4m, False, 24, SymmetricGroup(4), None), (ts.S4p, True, 24, None, None), (ts.G36m, False, 36, None, None), (ts.G36p, True, 36, None, None), (ts.S4xC2, False, 48, None, None), (ts.PSL2F5, True, 60, None, None), (ts.G72, False, 72, None, None), (ts.PGL2F5, False, 120, None, None), (ts.A6, True, 360, None, None), (ts.S6, False, 720, None, None), ]: for G in get_versions_of_S6_subgroup(name): assert G.is_transitive() assert G.degree == 6 assert G.is_subgroup(A6) is alt assert G.order() == order if is_isom: assert is_isomorphic(G, is_isom) if not_isom: assert not is_isomorphic(G, not_isom)