Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
r""" Weight 1 modular forms
This module contains routines for computing weight 1 modular forms, using George Schaeffer's "Hecke stability" algorithm (detailed in [Sch2015]_). These functions are mostly for internal use; a more convenient interface is offered by the usual ModularForms and CuspForms constructors.
AUTHORS:
- David Loeffler (2017-11): first version """
from sage.misc.cachefunc import cached_function from sage.rings.all import PowerSeriesRing, ZZ from sage.misc.misc import verbose from sage.structure.sequence import Sequence from sage.modular.arithgroup.all import Gamma0
@cached_function def modular_ratio_space(chi): r""" Compute the space of 'modular ratios', i.e. meromorphic modular forms f level N and character chi such that f * E is a holomorphic cusp form for every Eisenstein series E of weight 1 and character 1/chi.
Elements are returned as q-expansions up to precision R, where R is one greater than the weight 3 Sturm bound.
EXAMPLES::
sage: chi = DirichletGroup(31,QQ).0 sage: sage.modular.modform.weight1.modular_ratio_space(chi) [q - 8/3*q^3 + 13/9*q^4 + 43/27*q^5 - 620/81*q^6 + 1615/243*q^7 + 3481/729*q^8 + O(q^9), q^2 - 8/3*q^3 + 13/9*q^4 + 70/27*q^5 - 620/81*q^6 + 1858/243*q^7 + 2752/729*q^8 + O(q^9)] """
def modular_ratio_to_prec(chi, qexp, prec): r""" Given a q-expansion of a modular ratio up to sufficient precision to determine it uniquely, compute it to greater precision.
EXAMPLES::
sage: from sage.modular.modform.weight1 import modular_ratio_to_prec sage: R.<q> = QQ[[]] sage: modular_ratio_to_prec(DirichletGroup(31,QQ).0, q-q^2-q^5-q^7+q^8+O(q^9), 20) q - q^2 - q^5 - q^7 + q^8 + q^9 + q^10 + q^14 - q^16 - q^18 - q^19 + O(q^20) """
@cached_function def hecke_stable_subspace(chi, aux_prime=ZZ(2)): r""" Compute a q-expansion basis for S_1(chi).
Results are returned as q-expansions to a certain fixed (and fairly high) precision. If more precision is required this can be obtained with :func:`modular_ratio_to_prec`.
EXAMPLES::
sage: from sage.modular.modform.weight1 import hecke_stable_subspace sage: hecke_stable_subspace(DirichletGroup(59, QQ).0) [q - q^3 + q^4 - q^5 - q^7 - q^12 + q^15 + q^16 + 2*q^17 - q^19 - q^20 + q^21 + q^27 - q^28 - q^29 + q^35 + O(q^40)] """
# Auxiliary prime for Hecke stability method
# Compute working precision
# We want to compute the largest subspace of I stable under T_l. To do # this, we compute I intersect T_l(I) modulo q^(R/l), and take its preimage # under T_l, which is then well-defined modulo q^R.
# The theory does not guarantee that J is exactly S_1(chi), just that it is # intermediate between S_1(chi) and M_1(chi). In every example I know of, # it is equal to S_1(chi), but just for honesty, we check this anyway. raise ArithmeticError("Got non-cuspidal form!")
@cached_function def dimension_cusp_forms(chi): r""" Return the dimension of the space of cusp forms of weight 1 and character chi.
EXAMPLES::
sage: chi = DirichletGroup(59, QQ).0 sage: sage.modular.modform.weight1.dimension_cusp_forms(chi) 1 """ |