Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
241818 views
1
include "wrapper0.pyx"
2
include 'stdsage.pxi'
3
4
5
cdef class GroupModp:
6
pass
7
8
cdef class FrobPoly:
9
cdef long a0, a1
10
cdef unsigned long p
11
def __init__(self, a0, a1, p):
12
self.a0 = a0
13
self.a1 = a1
14
self.p = p
15
16
def __reduce__(self):
17
return FrobPoly_new, (self.a0, self.a1, self.p)
18
19
def __repr__(self):
20
return "Frobenius in characteristic %s with charpoly %s"%(self.p, self.characteristic_polynomial())
21
22
def prime(self):
23
return int(self.p)
24
25
def trace(self):
26
return -self.a0
27
28
def characteristic_polynomial(self, var='x'):
29
from sage.rings.all import ZZ
30
p = int(self.p)
31
return ZZ[var]([p*p, self.a0*p, self.a1, self.a0, 1])
32
33
charpoly = characteristic_polynomial
34
35
36
cpdef FrobPoly_new(long a0, long a1, unsigned long p):
37
cdef FrobPoly L = PY_NEW(FrobPoly)
38
L.a0 = a0; L.a1 = a1; L.p = p
39
return L
40
41
cdef int callback_Lpolys(smalljac_Qcurve_t c, unsigned long p, int good, long a[], int n, void *arg):
42
cdef int i
43
if good:
44
(<SmallJac>arg).tmp[int(p)] = FrobPoly_new(a[0], a[1], p)
45
else:
46
(<SmallJac>arg).tmp[int(p)] = None
47
return 1
48
49
cdef int callback_Lpolys_single(smalljac_Qcurve_t c, unsigned long p, int good, long a[], int n, void *arg):
50
cdef int i
51
if good:
52
(<SmallJac>arg).tmp = FrobPoly_new(a[0], a[1], p)
53
else:
54
(<SmallJac>arg).tmp = None
55
return 1
56
57
cdef int callback_ap_dict(smalljac_Qcurve_t c, unsigned long p, int good, long a[], int n, void *arg):
58
if good:
59
(<SmallJac>arg).tmp[int(p)] = -a[0]
60
else:
61
(<SmallJac>arg).tmp[int(p)] = None
62
return 1
63
64
cdef int callback_ap_single(smalljac_Qcurve_t c, unsigned long p, int good, long a[], int n, void *arg):
65
if good:
66
(<SmallJac>arg).tmp = -a[0]
67
else:
68
(<SmallJac>arg).tmp = None
69
return 1
70
71