ai-content-maker/.venv/Lib/site-packages/sympy/combinatorics/tests/test_galois.py

83 lines
2.7 KiB
Python
Raw Permalink Normal View History

2024-05-03 04:18:51 +03:00
"""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)