The following intrinsics give the q-expansion of a modular form (about the cusp ∞).
Note that q-expansions are printed by default only to precision O(q12). This may be adjusted using SetPrecision (see below), which should be used to control printing only; to control the amount of precision computed internally, instead use qExpansion or qExpansionBasis and specify the desired precision.
The q-expansion (at the cusp ∞) of the modular form (or half-integral weight form) f to absolute precision prec. This is an element of the power series ring over the base ring of the parent of f.
The nth coefficient of the q-expansion of the modular form f.
When an element of the space M is printed, the q-expansion is displayed to this precision. The default value is 12.Important note: This controls only printing. It does not control the precision used during calculations. For instance, the precision to which q-expansions are computed is controlled by the second argument in qExpansion and qExpansionBasis.
> M := ModularForms(Gamma1(11),3); M; Space of modular forms on Gamma_1(11) of weight 3 and dimension 15 over Integer Ring. > f := M.1; > f; 1 + O(q^8) > qExpansion(f); 1 + O(q^8) > Coefficient(f,16); // f is a modular form, so has infinite precision -5457936 > qExpansion(f,17); 1 + 763774*q^15 - 5457936*q^16 + O(q^17) > PowerSeries(f,20); // same as qExpansion(f,20) 1 + 763774*q^15 - 5457936*q^16 + 14709156*q^17 - 12391258*q^18 - 21614340*q^19 + O(q^20)The "big-oh" notation is supported via addition of a modular form and a power series.
> M<q> := Parent(f); > Parent(q); Power series ring in q over Integer Ring > f + O(q^17); 1 + 763774*q^15 - 5457936*q^16 + O(q^17) > 5*q - O(q^17) + f; 1 + 5*q + 763774*q^15 - 5457936*q^16 + O(q^17) > 5*q + f; 1 + 5*q + O(q^8)Default printing precision can be set using the command SetPrecision.
> SetPrecision(M,16); > f; 1 + 763774*q^15 + O(q^16)
> function InftyIsWP(N) > S := CuspidalSubspace(ModularForms(Gamma0(N),2)); > assert Dimension(S) ge 2; > return (PrecisionBound(S : Exact := true)-1) ne Dimension(S); > end function; > [<N,InftyIsWP(N)> : N in [97..100]]; [ <97, false>, <98, true>, <99, false>, <100, true> ]It is an open problem to give a simple characterization of the integers N such that ∞ is a Weierstrass point on X0(N), though Atkin and others have made significant progress on this problem (see, e.g., 1967 Annals paper [Atk67]). I verified that if N<3223 is square free, then ∞ is not a Weierstrass point on X0(N), which suggests a nice conjecture.