This module implements computations of Hecke operators and -eigenfunctions
on
-adic overconvergent modular forms of tame level 1, where
is one of
the primes
, using the algorithms described in [Loe2007].
[Loe2007] | (1, 2, 3) David Loeffler, Spectral expansions of overconvergent modular functions, Int. Math. Res. Not 2007 (050). Arxiv preprint. |
AUTHORS:
Let be one of the above primes, so
has genus 0, and let
(an -product of level
– see module sage.modular.etaproducts).
Then one can show that
gives an isomorphism
.
Furthermore, if we work over
, the
-overconvergent locus on
(or of
, via the canonical subgroup lifting), corresponds to the
-adic disc
(This is Theorem 1 of [Loe2007].)
Hence if we fix an element with
, the space
of overconvergent
-adic modular forms has an orthonormal
basis given by the functions
. So any element can be written in the
form
, where
as
, and any such sequence
defines a unique overconvergent form.
One can now find the matrix of Hecke operators in this basis, either by
calculating -expansions, or (for the special case of
) using a
recurrence formula due to Kolberg.
We create a space of 3-adic modular forms:
sage: M = OverconvergentModularForms(3, 8, 1/6, prec=60)
Creating an element directly as a linear combination of basis vectors.
sage: f1 = M.3 + M.5; f1.q_expansion()
27*q^3 + 1055916/1093*q^4 + 19913121/1093*q^5 + 268430112/1093*q^6 + ...
sage: f1.coordinates(8)
[0, 0, 0, 1, 0, 1, 0, 0]
We can coerce from elements of classical spaces of modular forms:
sage: f2 = M(CuspForms(3, 8).0); f2
3-adic overconvergent modular form of weight-character 8 with q-expansion q + 6*q^2 - 27*q^3 - 92*q^4 + 390*q^5 - 162*q^6 ...
We express this in a basis, and see that the coefficients go to zero very fast:
sage: [x.valuation(3) for x in f2.coordinates(60)]
[+Infinity, -1, 3, 6, 10, 13, 18, 20, 24, 27, 31, 34, 39, 41, 45, 48, 52, 55, 61, 62, 66, 69, 73, 76, 81, 83, 87, 90, 94, 97, 102, 104, 108, 111, 115, 118, 124, 125, 129, 132, 136, 139, 144, 146, 150, 153, 157, 160, 165, 167, 171, 174, 178, 181, 188, 188, 192, 195, 199, 202]
This form has more level at , and hence is less overconvergent:
sage: f3 = M(CuspForms(9, 8).0); [x.valuation(3) for x in f3.coordinates(60)]
[+Infinity, -1, -1, 0, -4, -4, -2, -3, 0, 0, -1, -1, 1, 0, 3, 3, 3, 3, 5, 3, 7, 7, 6, 6, 8, 7, 10, 10, 8, 8, 10, 9, 12, 12, 12, 12, 14, 12, 17, 16, 15, 15, 17, 16, 19, 19, 18, 18, 20, 19, 22, 22, 22, 22, 24, 21, 25, 26, 24, 24]
An error will be raised for forms which are not sufficiently overconvergent:
sage: M(CuspForms(27, 8).0)
...
ValueError: Form is not overconvergent enough (form is only 1/12-overconvergent)
Let’s compute some Hecke operators. Note that the coefficients of this matrix are -adically tiny:
sage: M.hecke_matrix(3, 4).change_ring(Qp(3,prec=1))
[ 1 + O(3) 0 0 0]
[ 0 2*3^3 + O(3^4) 2*3^3 + O(3^4) 3^2 + O(3^3)]
[ 0 2*3^7 + O(3^8) 2*3^8 + O(3^9) 3^6 + O(3^7)]
[ 0 2*3^10 + O(3^11) 2*3^10 + O(3^11) 2*3^9 + O(3^10)]
We compute the eigenfunctions of a 4x4 truncation:
sage: efuncs = M.eigenfunctions(4)
sage: for i in [1..3]:
... print efuncs[i].q_expansion(prec=4).change_ring(Qp(3,prec=20))
(1 + O(3^20))*q + (2*3 + 3^15 + 3^16 + 3^17 + 2*3^19 + 2*3^20 + O(3^21))*q^2 + (2*3^3 + 2*3^4 + 2*3^5 + 2*3^6 + 2*3^7 + 2*3^8 + 2*3^9 + 2*3^10 + 2*3^11 + 2*3^12 + 2*3^13 + 2*3^14 + 2*3^15 + 2*3^16 + 3^17 + 2*3^18 + 2*3^19 + 3^21 + 3^22 + O(3^23))*q^3 + O(q^4)
(1 + O(3^20))*q + (3 + 2*3^2 + 3^3 + 3^4 + 3^12 + 3^13 + 2*3^14 + 3^15 + 2*3^17 + 3^18 + 3^19 + 3^20 + O(3^21))*q^2 + (3^7 + 3^13 + 2*3^14 + 2*3^15 + 3^16 + 3^17 + 2*3^18 + 3^20 + 2*3^21 + 2*3^22 + 2*3^23 + 2*3^25 + O(3^27))*q^3 + O(q^4)
(1 + O(3^20))*q + (2*3 + 3^3 + 2*3^4 + 3^6 + 2*3^8 + 3^9 + 3^10 + 2*3^11 + 2*3^13 + 3^16 + 3^18 + 3^19 + 3^20 + O(3^21))*q^2 + (3^9 + 2*3^12 + 3^15 + 3^17 + 3^18 + 3^19 + 3^20 + 2*3^22 + 2*3^23 + 2*3^27 + 2*3^28 + O(3^29))*q^3 + O(q^4)
The first eigenfunction is a classical cusp form of level 3:
sage: (efuncs[1] - M(CuspForms(3, 8).0)).valuation()
13
The second is an Eisenstein series!
sage: (efuncs[2] - M(EisensteinForms(3, 8).1)).valuation()
10
The third is a genuinely new thing (not a classical modular form at all); the
coefficients are almost certainly not algebraic over . Note that the slope
is 9, so Coleman’s classicality criterion (forms of slope
are
classical) does not apply.
sage: a3 = efuncs[3].q_expansion()[3]; a3
3^9 + 2*3^12 + 3^15 + 3^17 + 3^18 + 3^19 + 3^20 + 2*3^22 + 2*3^23 + 2*3^27 + 2*3^28 + 3^32 + 3^33 + 2*3^34 + 3^38 + 2*3^39 + 3^40 + 2*3^41 + 3^44 + 3^45 + 3^46 + 2*3^47 + 2*3^48 + 3^49 + 3^50 + 2*3^51 + 2*3^52 + 3^53 + 2*3^54 + 3^55 + 3^56 + 3^57 + 2*3^58 + 2*3^59 + 3^60 + 2*3^61 + 2*3^63 + 2*3^64 + 3^65 + 2*3^67 + 3^68 + 2*3^69 + 2*3^71 + 3^72 + 2*3^74 + 3^75 + 3^76 + 3^79 + 3^80 + 2*3^83 + 2*3^84 + 3^85 + 2*3^87 + 3^88 + 2*3^89 + 2*3^90 + 2*3^91 + 3^92 + O(3^98)
sage: efuncs[3].slope()
9
Bases: sage.structure.element.ModuleElement
A class representing an element of a space of overconvergent modular forms.
EXAMPLE:
sage: K.<w> = Qp(5).extension(x^7 - 5); s = OverconvergentModularForms(5, 6, 1/21, base_ring=K).0
sage: s == loads(dumps(s))
True
Return the additive order of this element (required attribute for all elements deriving from sage.modules.ModuleElement).
EXAMPLES:
sage: M = OverconvergentModularForms(13, 10, 1/2, base_ring = Qp(13).extension(x^2 - 13,names='a'))
sage: M.gen(0).additive_order()
+Infinity
sage: M(0).additive_order()
1
Return a copy of self but with coefficients in the given ring.
EXAMPLES:
sage: M = OverconvergentModularForms(7, 10, 1/2, prec=5)
sage: f = M.1
sage: f.base_extend(Qp(7, 4))
7-adic overconvergent modular form of weight-character 10 with q-expansion (7 + O(7^5))*q + (6*7 + 4*7^2 + 7^3 + 6*7^4 + O(7^5))*q^2 + (5*7 + 5*7^2 + 7^4 + O(7^5))*q^3 + (7^2 + 4*7^3 + 3*7^4 + 2*7^5 + O(7^6))*q^4 + O(q^5)
Return the coordinates of this modular form in terms of the basis of this space.
EXAMPLES:
sage: M = OverconvergentModularForms(3, 0, 1/2, prec=15)
sage: f = (M.0 + M.3); f.coordinates()
[1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
sage: f.coordinates(6)
[1, 0, 0, 1, 0, 0]
sage: OverconvergentModularForms(3, 0, 1/6)(f).coordinates(6)
[1, 0, 0, 729, 0, 0]
sage: f.coordinates(100)
...
ValueError: Precision too large for space
Return the -eigenvalue of this eigenform. Raises an error unless
this element was explicitly flagged as an eigenform, using the
_notify_eigen function.
EXAMPLE:
sage: M = OverconvergentModularForms(3, 0, 1/2)
sage: f = M.eigenfunctions(3)[1]
sage: f.eigenvalue()
3^2 + 3^4 + 2*3^6 + 3^7 + 3^8 + 2*3^9 + 2*3^10 + 3^12 + 3^16 + 2*3^17 + 3^18 + 3^20 + 2*3^21 + 3^22 + 2*3^23 + 3^25 + 3^26 + 2*3^27 + 2*3^29 + 3^30 + 3^31 + 3^32 + 3^33 + 3^34 + 3^36 + 3^40 + 2*3^41 + 3^43 + 3^44 + 3^45 + 3^46 + 3^48 + 3^49 + 3^50 + 2*3^51 + 3^52 + 3^54 + 2*3^57 + 2*3^59 + 3^60 + 3^61 + 2*3^63 + 2*3^66 + 2*3^67 + 3^69 + 2*3^72 + 3^74 + 2*3^75 + 3^76 + 2*3^77 + 2*3^78 + 2*3^80 + 3^81 + 2*3^82 + 3^84 + 2*3^85 + 2*3^86 + 3^87 + 3^88 + 2*3^89 + 2*3^91 + 3^93 + 3^94 + 3^95 + 3^96 + 3^98 + 2*3^99 + O(3^100)
sage: M.gen(4).eigenvalue()
...
TypeError: eigenvalue only defined for eigenfunctions
Return the formal power series in corresponding to this
overconvergent modular form (so the result is
where this modular form
is
, where
is the appropriately normalised
parameter of
).
EXAMPLE:
sage: M = OverconvergentModularForms(3, 0, 1/2)
sage: f = M.eigenfunctions(3)[1]
sage: f.gexp()
(3^-3 + O(3^91))*g + (3^-1 + 1 + 2*3 + 3^2 + 2*3^3 + 3^5 + 3^7 + 3^10 + 3^11 + 3^14 + 3^15 + 3^16 + 2*3^19 + 3^21 + 3^22 + 2*3^23 + 2*3^24 + 3^26 + 2*3^27 + 3^29 + 3^31 + 3^34 + 2*3^35 + 2*3^36 + 3^38 + 2*3^39 + 3^41 + 2*3^42 + 2*3^43 + 2*3^44 + 2*3^46 + 2*3^47 + 3^48 + 2*3^49 + 2*3^50 + 3^51 + 2*3^54 + 2*3^55 + 2*3^56 + 3^57 + 2*3^58 + 2*3^59 + 2*3^60 + 3^61 + 3^62 + 3^63 + 3^64 + 2*3^65 + 3^67 + 3^68 + 2*3^69 + 3^70 + 2*3^71 + 2*3^74 + 3^76 + 2*3^77 + 3^78 + 2*3^79 + 2*3^80 + 3^84 + 2*3^85 + 2*3^86 + 3^88 + 2*3^89 + 3^91 + 3^92 + O(3^93))*g^2 + O(g^3)
The degree of the series term with largest norm on the -overconvergent region.
EXAMPLES:
sage: o=OverconvergentModularForms(3, 0, 1/2)
sage: f=o.eigenfunctions(10)[1]
sage: f.governing_term(1/2)
1
Return True if this is an eigenform. At present this returns False unless this element was explicitly flagged as an eigenform, using the _notify_eigen function.
EXAMPLE:
sage: M = OverconvergentModularForms(3, 0, 1/2)
sage: f = M.eigenfunctions(3)[1]
sage: f.is_eigenform()
True
sage: M.gen(4).is_eigenform()
False
Test whether or not this element has -expansion coefficients that
are
-adically integral. This should always be the case with eigenfunctions, but sometimes
if n is very large this breaks down for unknown reasons!
EXAMPLE:
sage: M = OverconvergentModularForms(2, 0, 1/3)
sage: q = QQ[['q']].gen()
sage: M(q - 17*q^2 + O(q^3)).is_integral()
True
sage: M(q - q^2/2 + 6*q^7 + O(q^9)).is_integral()
False
Return the series expansion precision of this overconvergent modular
form. (This is not the same as the -adic precision of the
coefficients.)
EXAMPLE:
sage: OverconvergentModularForms(5, 6, 1/3,prec=15).gen(1).prec()
15
If this is a -adic modular form, return
.
EXAMPLE:
sage: OverconvergentModularForms(2, 0, 1/2).an_element().prime()
2
Return the -expansion of self, to as high precision as it is known.
EXAMPLE:
sage: OverconvergentModularForms(3, 4, 1/2).gen(0).q_expansion()
1 - 120/13*q - 1080/13*q^2 - 120/13*q^3 - 8760/13*q^4 - 15120/13*q^5 - 1080/13*q^6 - 41280/13*q^7 - 5400*q^8 - 120/13*q^9 - 136080/13*q^10 - 159840/13*q^11 - 8760/13*q^12 - 263760/13*q^13 - 371520/13*q^14 - 15120/13*q^15 - 561720/13*q^16 - 45360*q^17 - 1080/13*q^18 - 823200/13*q^19 + O(q^20)
The -adic valuation of the norm of self on the
-overconvergent region.
EXAMPLES:
sage: o=OverconvergentModularForms(3, 0, 1/2)
sage: t = o([1, 1, 1/3])
sage: t.r_ord(1/2)
1
sage: t.r_ord(2/3)
3
Return the slope of this eigenform, i.e. the valuation of its
-eigenvalue. Raises an error unless this element was explicitly
flagged as an eigenform, using the _notify_eigen function.
EXAMPLE:
sage: M = OverconvergentModularForms(3, 0, 1/2)
sage: f = M.eigenfunctions(3)[1]
sage: f.slope()
2
sage: M.gen(4).slope()
...
TypeError: slope only defined for eigenfunctions
Return the -adic valuation of this form (i.e. the minimum of the
-adic valuations of its coordinates).
EXAMPLES:
sage: M = OverconvergentModularForms(3, 0, 1/2)
sage: (M.7).valuation()
0
sage: (3^18 * (M.2)).valuation()
18
Draw a graph depicting the growth of the norm of this overconvergent modular form as it approaches the boundary of the overconvergent region.
EXAMPLE:
sage: o=OverconvergentModularForms(3, 0, 1/2)
sage: f=o.eigenfunctions(4)[1]
sage: f.valuation_plot()
Return the weight of this overconvergent modular form.
EXAMPLES:
sage: M = OverconvergentModularForms(13, 10, 1/2, base_ring = Qp(13).extension(x^2 - 13,names='a'))
sage: M.gen(0).weight()
10
Create a space of overconvergent -adic modular forms of level
, over the given base ring. The base ring need not be a
-adic ring (the spaces we compute with typically have bases over
).
INPUT:
The character and weight
must satisfy
, and
the base ring must contain an element
such that
where
is the radius of
overconvergence (and
is normalised so
).
EXAMPLES:
sage: OverconvergentModularForms(3, 0, 1/2)
Space of 3-adic 1/2-overconvergent modular forms of weight-character 0 over Rational Field
sage: OverconvergentModularForms(3, 16, 1/2)
Space of 3-adic 1/2-overconvergent modular forms of weight-character 16 over Rational Field
sage: OverconvergentModularForms(3, 3, 1/2, char = DirichletGroup(3,QQ).0)
Space of 3-adic 1/2-overconvergent modular forms of weight-character (3, 3, [-1]) over Rational Field
Bases: sage.modules.module.Module
A space of overconvergent modular forms of level ,
where
is a prime such that
has genus 0.
Elements are represented as power series, with a formal power series
corresponding to the modular form
where
is the
-deprived Eisenstein series of weight-character
, and
is a
uniformiser of
normalised so that the
-overconvergent region
corresponds to
.
TESTS:
sage: K.<w> = Qp(13).extension(x^2-13); M = OverconvergentModularForms(13, 20, radius=1/2, base_ring=K)
sage: M is loads(dumps(M))
True
Return the base extension of self to the given base ring. There must be a canonical map to this ring from the current base ring, otherwise a TypeError will be raised.
EXAMPLES:
sage: M = OverconvergentModularForms(2, 0, 1/2, base_ring = Qp(2))
sage: M.base_extend(Qp(2).extension(x^2 - 2, names="w"))
Space of 2-adic 1/2-overconvergent modular forms of weight-character 0 over Eisenstein Extension of 2-adic Field ...
sage: M.base_extend(QQ)
...
TypeError: Base extension of self (over '2-adic Field with capped relative precision 20') to ring 'Rational Field' not defined.
Return the space corresponding to self but over the given base ring.
EXAMPLES:
sage: M = OverconvergentModularForms(2, 0, 1/2)
sage: M.change_ring(Qp(2))
Space of 2-adic 1/2-overconvergent modular forms of weight-character 0 over 2-adic Field with ...
Return the character of self. For overconvergent forms, the weight and the character are unified into the concept of a weight-character, so this returns exactly the same thing as self.weight().
EXAMPLE:
sage: OverconvergentModularForms(3, 0, 1/2).character()
0
sage: type(OverconvergentModularForms(3, 0, 1/2).character())
<class '...weightspace.AlgebraicWeight'>
sage: OverconvergentModularForms(3, 3, 1/2, char=DirichletGroup(3,QQ).0).character()
(3, 3, [-1])
Write x as a vector with respect to the basis given by self.basis(). Here x must be an element of this space or something that can be converted into one. If x has precision less than the default precision of self, then the returned vector will be shorter.
EXAMPLES:
sage: M = OverconvergentModularForms(Gamma0(3), 0, 1/3, prec=4)
sage: M.coordinate_vector(M.gen(2))
(0, 0, 1, 0)
sage: q = QQ[['q']].gen(); M.coordinate_vector(q - q^2 + O(q^4))
(0, 1/9, -13/81, 74/243)
sage: M.coordinate_vector(q - q^2 + O(q^3))
(0, 1/9, -13/81)
Compute the characteristic power series of acting on self, using
an n x n matrix.
EXAMPLES:
sage: OverconvergentModularForms(3, 16, 1/2, base_ring=Qp(3)).cps_u(4)
1 + O(3^20) + (2 + 2*3 + 2*3^2 + 2*3^4 + 3^5 + 3^6 + 3^7 + 3^11 + 3^12 + 2*3^14 + 3^16 + 3^18 + O(3^19))*T + (2*3^3 + 3^5 + 3^6 + 3^7 + 2*3^8 + 2*3^9 + 2*3^10 + 3^11 + 3^12 + 2*3^13 + 2*3^16 + 2*3^18 + O(3^19))*T^2 + (2*3^15 + 2*3^16 + 2*3^19 + 2*3^20 + 2*3^21 + O(3^22))*T^3 + (3^17 + 2*3^18 + 3^19 + 3^20 + 3^22 + 2*3^23 + 2*3^25 + 3^26 + O(3^27))*T^4
sage: OverconvergentModularForms(3, 16, 1/2, base_ring=Qp(3), prec=30).cps_u(10)
1 + O(3^20) + (2 + 2*3 + 2*3^2 + 2*3^4 + 3^5 + 3^6 + 3^7 + 2*3^15 + O(3^16))*T + (2*3^3 + 3^5 + 3^6 + 3^7 + 2*3^8 + 2*3^9 + 2*3^10 + 2*3^11 + 2*3^12 + 2*3^13 + 3^14 + 3^15 + O(3^16))*T^2 + (3^14 + 2*3^15 + 2*3^16 + 3^17 + 3^18 + O(3^19))*T^3 + (3^17 + 2*3^18 + 3^19 + 3^20 + 3^21 + O(3^24))*T^4 + (3^29 + 2*3^32 + O(3^33))*T^5 + (2*3^44 + O(3^45))*T^6 + (2*3^59 + O(3^60))*T^7 + (2*3^78 + O(3^79))*T^8
NOTES:
Uses the Hessenberg form of the Hecke matrix to compute the characteristic polynomial. Because of the use of relative precision here this tends to give better precision in the p-adic coefficients.
Calculate approximations to eigenfunctions of self. These are the eigenfunctions of self.hecke_matrix(p, n), which are approximations to the true eigenfunctions. Returns a list of OverconvergentModularFormElement objects, in increasing order of slope.
INPUT:
NOTE: Try using set_verbose(1, 'sage/modular/overconvergent') to get more feedback on what is going on in this algorithm. For even more feedback, use 2 instead of 1.
EXAMPLES:
sage: X = OverconvergentModularForms(2, 2, 1/6).eigenfunctions(8, Qp(2, 100))
sage: X[1]
2-adic overconvergent modular form of weight-character 2 with q-expansion (1 + O(2^36))*q + (2^4 + 2^5 + 2^9 + 2^10 + 2^12 + 2^13 + 2^15 + 2^17 + 2^19 + 2^20 + 2^21 + 2^23 + 2^28 + 2^30 + 2^31 + 2^32 + 2^34 + 2^36 + 2^37 + 2^39 + O(2^40))*q^2 + (2^2 + 2^7 + 2^8 + 2^9 + 2^12 + 2^13 + 2^16 + 2^17 + 2^21 + 2^23 + 2^25 + 2^28 + 2^33 + 2^34 + 2^36 + 2^37 + O(2^38))*q^3 + (2^8 + 2^11 + 2^14 + 2^19 + 2^21 + 2^22 + 2^24 + 2^25 + 2^26 + 2^27 + 2^28 + 2^29 + 2^32 + 2^33 + 2^35 + 2^36 + O(2^44))*q^4 + (2 + 2^2 + 2^9 + 2^13 + 2^15 + 2^17 + 2^19 + 2^21 + 2^23 + 2^26 + 2^27 + 2^28 + 2^30 + 2^33 + 2^34 + 2^35 + 2^36 + O(2^37))*q^5 + (2^6 + 2^7 + 2^15 + 2^16 + 2^21 + 2^24 + 2^25 + 2^28 + 2^29 + 2^33 + 2^34 + 2^37 + O(2^42))*q^6 + (2^3 + 2^8 + 2^9 + 2^10 + 2^11 + 2^12 + 2^14 + 2^15 + 2^17 + 2^19 + 2^20 + 2^21 + 2^23 + 2^25 + 2^26 + 2^34 + 2^37 + 2^38 + O(2^39))*q^7 + O(q^8)
sage: [x.slope() for x in X]
[0, 4, 8, 14, 16, 18, 26, 30]
Return the ith module generator of self.
EXAMPLE:
sage: M = OverconvergentModularForms(3, 2, 1/2, prec=4)
sage: M.gen(0)
3-adic overconvergent modular form of weight-character 2 with q-expansion 1 + 12*q + 36*q^2 + 12*q^3 + O(q^4)
sage: M.gen(1)
3-adic overconvergent modular form of weight-character 2 with q-expansion 27*q + 648*q^2 + 7290*q^3 + O(q^4)
sage: M.gen(30)
3-adic overconvergent modular form of weight-character 2 with q-expansion O(q^4)
Return a generator object that iterates over the (infinite) set of basis vectors of self.
EXAMPLES:
sage: o = OverconvergentModularForms(3, 12, 1/2)
sage: t = o.gens()
sage: t.next()
3-adic overconvergent modular form of weight-character 12 with q-expansion 1 - 32760/61203943*q - 67125240/61203943*q^2 - ...
sage: t.next()
3-adic overconvergent modular form of weight-character 12 with q-expansion 27*q + 19829193012/61203943*q^2 + 146902585770/61203943*q^3 + ...
Return a dictionary mapping the names of generators of this space to their values. (Required by parent class definition.) As this does not make any sense here, this raises a TypeError.
EXAMPLES:
sage: M = OverconvergentModularForms(2, 4, 1/6)
sage: M.gens_dict()
...
TypeError: gens_dict does not make sense as number of generators is infinite
Calculate the matrix of the operator in the basis of this space,
truncated to an
matrix. Conventions are that operators act
on the left on column vectors (this is the opposite of the conventions
of the sage.modules.matrix_morphism class!) Uses naive
-expansion
arguments if use_recurrence=False and uses the Kolberg style
recurrences if use_recurrence=True.
The argument “exact_arith” causes the computation to be done with
rational arithmetic, even if the base ring is an inexact -adic ring.
This is useful as there can be precision loss issues (particularly with
use_recurrence=False).
EXAMPLES:
sage: OverconvergentModularForms(2, 0, 1/2).hecke_matrix(2, 4)
[ 1 0 0 0]
[ 0 24 64 0]
[ 0 32 1152 4608]
[ 0 0 3072 61440]
sage: OverconvergentModularForms(2, 12, 1/2, base_ring=pAdicField(2)).hecke_matrix(2, 3) * (1 + O(2^2))
[ 1 + O(2^2) 0 0]
[ 0 2^3 + O(2^5) 2^6 + O(2^8)]
[ 0 2^4 + O(2^6) 2^7 + 2^8 + O(2^9)]
sage: OverconvergentModularForms(2, 12, 1/2, base_ring=pAdicField(2)).hecke_matrix(2, 3, exact_arith=True)
[ 1 0 0]
[ 0 33881928/1414477 64]
[ 0 -192898739923312/2000745183529 1626332544/1414477]
Given an element and an integer
, calculates the Hecke operator
acting on
.
The input may be either a “bare” power series, or an OverconvergentModularFormElement object; the return value will be of the same type.
EXAMPLE:
sage: M = OverconvergentModularForms(3, 0, 1/2)
sage: f = M.1
sage: M.hecke_operator(f, 3)
3-adic overconvergent modular form of weight-character 0 with q-expansion 2430*q + 265356*q^2 + 10670373*q^3 + 249948828*q^4 + 4113612864*q^5 + 52494114852*q^6 + O(q^7)
sage: M.hecke_operator(f.q_expansion(), 3)
2430*q + 265356*q^2 + 10670373*q^3 + 249948828*q^4 + 4113612864*q^5 + 52494114852*q^6 + O(q^7)
True if elements of this space are represented exactly, i.e., there is no precision loss when doing arithmetic. As this is never true for overconvergent modular forms spaces, this returns False.
EXAMPLES:
sage: OverconvergentModularForms(13, 12, 0).is_exact()
False
The number of generators of self (as a module over its base ring), i.e. infinity.
EXAMPLES:
sage: M = OverconvergentModularForms(2, 4, 1/6)
sage: M.ngens()
+Infinity
The normalising factor such that
is a parameter for the
-overconvergent disc in
, where
is the standard
uniformiser.
EXAMPLE:
sage: L.<w> = Qp(7).extension(x^2 - 7)
sage: OverconvergentModularForms(7, 0, 1/4, base_ring=L).normalising_factor()
w + O(w^41)
Return the series precision of self. Note that this is different from
the -adic precision of the base ring.
EXAMPLE:
sage: OverconvergentModularForms(3, 0, 1/2).prec()
20
sage: OverconvergentModularForms(3, 0, 1/2,prec=40).prec()
40
Return the residue characteristic of self, i.e. the prime such that
this is a
-adic space.
EXAMPLES:
sage: OverconvergentModularForms(5, 12, 1/3).prime()
5
The radius of overconvergence of this space.
EXAMPLE:
sage: OverconvergentModularForms(3, 0, 1/3).radius()
1/3
Return the recurrence matrix satisfied by the coefficients of ,
that is a matrix
such that
. Uses an elegant construction which
I believe is due to Smithline. See [Loe2007].
EXAMPLES:
sage: OverconvergentModularForms(2, 0, 0).recurrence_matrix()
[ 48 1]
[4096 0]
sage: OverconvergentModularForms(2, 0, 1/2).recurrence_matrix()
[48 64]
[64 0]
sage: OverconvergentModularForms(3, 0, 0).recurrence_matrix()
[ 270 36 1]
[ 26244 729 0]
[531441 0 0]
sage: OverconvergentModularForms(5, 0, 0).recurrence_matrix()
[ 1575 1300 315 30 1]
[ 162500 39375 3750 125 0]
[ 4921875 468750 15625 0 0]
[ 58593750 1953125 0 0 0]
[244140625 0 0 0 0]
sage: OverconvergentModularForms(7, 0, 0).recurrence_matrix()
[ 4018 8624 5915 1904 322 28 1]
[ 422576 289835 93296 15778 1372 49 0]
[ 14201915 4571504 773122 67228 2401 0 0]
[ 224003696 37882978 3294172 117649 0 0 0]
[ 1856265922 161414428 5764801 0 0 0 0]
[ 7909306972 282475249 0 0 0 0 0]
[13841287201 0 0 0 0 0 0]
sage: OverconvergentModularForms(13, 0, 0).recurrence_matrix()
[ 15145 124852 354536 ...
Compute the slopes of the operator acting on self, using an n x n matrix.
EXAMPLES:
sage: OverconvergentModularForms(5,2,1/3,base_ring=Qp(5),prec=100).slopes(5)
[0, 2, 5, 6, 9]
sage: OverconvergentModularForms(2,1,1/3,char=DirichletGroup(4,QQ).0).slopes(5)
[0, 2, 4, 6, 8]
Return the character of self. For overconvergent forms, the weight and the character are unified into the concept of a weight-character, so this returns exactly the same thing as self.character().
EXAMPLE:
sage: OverconvergentModularForms(3, 0, 1/2).weight()
0
sage: type(OverconvergentModularForms(3, 0, 1/2).weight())
<class '...weightspace.AlgebraicWeight'>
sage: OverconvergentModularForms(3, 3, 1/2, char=DirichletGroup(3,QQ).0).weight()
(3, 3, [-1])