Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagesmc
Path: blob/master/src/sage/groups/pari_group.py
8814 views
1
r"""
2
PARI Groups
3
"""
4
5
from sage.groups.old import Group
6
from sage.libs.all import pari_gen
7
from sage.rings.all import Integer
8
from sage.structure.parent import Parent
9
10
class PariGroup(Group):
11
def __init__(self, x, degree=None):
12
"""
13
EXAMPLES::
14
15
sage: R.<x> = PolynomialRing(QQ)
16
sage: f = x^4 - 17*x^3 - 2*x + 1
17
sage: G = f.galois_group(pari_group=True); G
18
PARI group [24, -1, 5, "S4"] of degree 4
19
sage: G.category()
20
Category of finite groups
21
22
Caveat: fix those tests and/or document precisely that this is
23
an abstract group without explicit elements::
24
25
sage: TestSuite(G).run(skip = ["_test_an_element",\
26
"_test_associativity",\
27
"_test_elements",\
28
"_test_elements_eq_reflexive",\
29
"_test_elements_eq_symmetric",\
30
"_test_elements_eq_transitive",\
31
"_test_elements_neq",\
32
"_test_enumerated_set_contains",\
33
"_test_enumerated_set_iter_cardinality",\
34
"_test_enumerated_set_iter_list",\
35
"_test_inverse",\
36
"_test_one",\
37
"_test_prod",\
38
"_test_some_elements"])
39
"""
40
if not isinstance(x, pari_gen):
41
raise TypeError, "x (=%s) must be a PARI gen"%x
42
self.__x = x
43
self.__degree = degree
44
from sage.categories.finite_groups import FiniteGroups
45
Parent.__init__(self, category = FiniteGroups())
46
47
def __repr__(self):
48
return "PARI group %s of degree %s"%(self.__x, self.__degree)
49
50
def __cmp__(self, other):
51
if not isinstance(other, PariGroup):
52
return cmp(type(self), type(other))
53
return cmp((self.__x, self.__degree), (other.__x, other.__degree))
54
55
def _pari_(self):
56
return self.__x
57
58
def degree(self):
59
return self.__degree
60
61
def order(self):
62
return Integer(self.__x[0])
63
64
def permutation_group(self):
65
if self.__degree is None:
66
raise NotImplementedError
67
import perm_gps.permgroup_named
68
return perm_gps.permgroup_named.TransitiveGroup(self.__degree, self.__x[2])
69
70
_permgroup_ = permutation_group
71
72