|
|
"""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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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) |
|
|
|