################################################## ## Dirichlet Characters ################################################## > G := DirichletGroup(8*13, CyclotomicField(12)); > G; Group of Dirichlet characters of modulus 104 over Cyclotomic Field of order 12 and degree 4 > // WARNING: The default ring is Q, not Q(zeta_n). > DirichletGroup(8*13); Group of Dirichlet characters of modulus 104 over Rational Field > G := DirichletGroup(8*13, CyclotomicField(12)); > [Order(a), Order(b), Order(c)]; [ 2, 2, 12 ] > [Conductor(a), Conductor(b), Conductor(c)]; [ 4, 8, 13 ] > a(3); -1 > b(3); -1 > c(3); zeta_12^2 - 1 > G := DirichletGroup(5,CyclotomicField(4)); > H := DirichletGroup(7,RationalField()); > Parent(a*b); Group of Dirichlet characters of modulus 35 over Cyclotomic Field of order 4 and degree 2 > c := a*b; > d := Extend(c,70); // natural extension to character of modulus 70 > Parent(d); Group of Dirichlet characters of modulus 70 over Cyclotomic Field of order 4 and degree 2 > Conductor(d); 35 > Modulus(AssociatedPrimitiveCharacter(d)); 35 > G := DirichletGroup(35,CyclotomicField(28)); G; Group of Dirichlet characters of modulus 35 over Cyclotomic Field of order 28 and degree 12 > e := G!c; > Parent(e); Group of Dirichlet characters of modulus 35 over Cyclotomic Field of order 28 and degree 12 > c(3); zeta_4 > e(3); zeta_28^7 > Parent(MinimalBaseRingCharacter(e)); Group of Dirichlet characters of modulus 35 over Cyclotomic Field of order 4 and degree 2 ################################################## ## What Are Modular Symbols? ################################################## > G := DirichletGroup(13, CyclotomicField(4)); > eps(-1); -1 > Order(eps); 4 > M := ModularSymbols(eps, 5); // eps determines N !! > M; Full modular symbols space of level 13, weight 5, character eps, and dimension 8 over Cyclotomic Field of order 4 and degree 2 > [ManinSymbol(x)[1] : x in Basis(M)]; [ , , , , , , , ] > M.1; X^3*{0, oo} > M.2; (1331*X^3 + 363*X^2*Y + 33*X*Y^2 + Y^3)*{-1/11, 0} ################################################## ## Efficiency of Computation of Presentation ################################################## > time M := ModularSymbols(2004); M; // on my laptop Time: 1.440 Full modular symbols space for Gamma_0(2004) of weight 2 and dimension 673 over Rational Field > GetMemoryUsage(); 9306624 // about 9.3MB > time M := ModularSymbols(10000); Current total memory usage: 419.4MB, failed memory request: 206.0MB System error: Out of memory. > time M := ModularSymbols(10007); M; // prime level, so easier Time: 6.590 Full modular symbols space for Gamma_0(10007) of weight 2 and dimension 1669 over Rational Field > time t2 := HeckeOperator(M,2); Time: 3.270 > G := DirichletGroup(389,CyclotomicField(97)); > Order(e); 194 > time M := ModularSymbols(e^2,2); Time: 0.320 > M; Full modular symbols space of level 389, weight 2, character e^2, and dimension 64 over Cyclotomic Field of order 97 and degree 96 > G := DirichletGroup(37,CyclotomicField(36)); > time M := ModularSymbols(e,7); // weight 7 Time: 3.260 > M; Full modular symbols space of level 37, weight 7, character e, and dimension 38 over Cyclotomic Field of order 36 and degree 12 ################################################## ## Efficiency Trick: Work Mod~$p$ ################################################## > G := DirichletGroup(2000,GF(5)); > Conductor(c); 5 > Order(c); 4 > time M := ModularSymbols(c,3); Time: 5.070 > M; Full modular symbols space of level 2000, weight 3, character c, and dimension 1200 over Finite field of size 5 > function f(N,k,p) return Dimension(ModularSymbols(N,k,GF(p))) - Dimension(ModularSymbols(N,k)); end function; > [N : N in [2..100] | f(N,2,2) gt 0]; [ 5, 10, 13, 17, 25, 26, 29, 34, 37, 41, 50, 53, 58, 61, 65, 73, 74, 82, 85, 89, 97 ] ################################################## ## Hecke Operators on Modular Symbols ################################################## > HeilbronnMerel(2); [ [ 1, 0, 0, 2 ], [ 1, 0, 1, 2 ], [ 2, 0, 0, 1 ], [ 2, 1, 0, 1 ] ] > #HeilbronnMerel(29); 199 > #HeilbronnMerel(10007); // takes a while 337977 > #HeilbronnCremona(10007); // in some cases these can be used... 67698 > G := DirichletGroup(13, CyclotomicField(4)); > M := ModularSymbols(eps, 5); > T2 := HeckeOperator(M,2); > Nrows(T2); 8 > T2[1]; (zeta_4 + 16 -3/4 1/4 3/4 -3/4 0 2 -3/2) > F := CharacteristicPolynomial(T2); > R := Parent(F); > Factorization(F); [ , , ] ################################################## ## Subspaces of Modular Symbols ################################################## > G := DirichletGroup(13, CyclotomicField(4)); > M := ModularSymbols(eps, 5); > S := CuspidalSubspace(M); S; Modular symbols space of level 13, weight 5, character eps, and dimension 6 over Cyclotomic Field of order 4 and degree 2 > Factorization(CharacteristicPolynomial(HeckeOperator(S,2))); [ ] > M := ModularSymbols(33); M; Full modular symbols space for Gamma_0(33) of weight 2 and dimension 9 over Rational Field > NewSubspace(M); Modular symbols space for Gamma_0(33) of weight 2 and dimension 3 over Rational Field > Complement(NewSubspace(M)); Modular symbols space for Gamma_0(33) of weight 2 and dimension 6 over Rational Field ################################################## ## Decomposition of Modular Symbols Spaces ################################################## > S := CuspidalSubspace(ModularSymbols(33,2)); > NewformDecomposition(S); [ Modular symbols space for Gamma_0(33) of weight 2 and dimension 2 over Rational Field, // new Modular symbols space for Gamma_0(33) of weight 2 and dimension 4 over Rational Field // old ] > time M := ModularSymbols(700,2,+1); Time: 0.270 > time S := CuspidalSubspace(M); Time: 0.190 > time D := NewformDecomposition(S); Time: 10.990 > #D; 34 > D; [ Modular symbols space for Gamma_0(700) of weight 2 and dimension 1 over Rational Field, Modular symbols space for Gamma_0(700) of weight 2 and dimension 1 over Rational Field, ... Modular symbols space for Gamma_0(700) of weight 2 and dimension 6 over Rational Field ] % > HeckeBound(M); % 8 $ ls magma/package/Geometry/ModSym/*.m analytic.m cusps.m inner_twists.m operators.m arith.m decomp.m intersection_pairing.m period.m boundary.m derivative.m linalg.m qexpansion.m calc.m dims.m maps.m representation.m charpolyhecke.m dirichlet.m mestre.m subspace.m compgrp.m eisenstein.m modsym.m tests.m core.m elliptic.m multichar.m verbose.m ################################################## ## Computing Modular Forms Using MAGMA ################################################## > G := DirichletGroup(13,CyclotomicField(6)); > M := ModularSymbols(eps,2, +1); > S := CuspidalSubspace(M); > S; Modular symbols space of level 13, weight 2, character eps, and dimension 1 over Cyclotomic Field of order 6 and degree 2 > qExpansionBasis(S,4); [ q + (-zeta_6 - 1)*q^2 + (2*zeta_6 - 2)*q^3 + O(q^4) ] > M := ModularSymbols(33,2); > S := CuspidalSubspace(M); > qExpansionBasis(S,10); [ q - q^5 - 2*q^6 + 2*q^7 - 2*q^8 - q^9 + O(q^10), q^2 - q^4 - q^5 - q^6 + 2*q^7 - q^8 + q^9 + O(q^10), q^3 - 2*q^6 - q^9 + O(q^10) ] > qExpansionBasis(OldSubspace(S),10); [ q - 2*q^2 + 2*q^4 + q^5 - 2*q^7 - 3*q^9 + O(q^10), q^3 - 2*q^6 - q^9 + O(q^10) ] > qExpansionBasis(NewSubspace(S),10); [ q + q^2 - q^3 - q^4 - 2*q^5 - q^6 + 4*q^7 - 3*q^8 + q^9 + O(q^10) ] > M := ModularSymbols(389,2, 1); > S := CuspidalSubspace(M); > D := Decomposition(S,2); > V := D[3]; V; Modular symbols space for Gamma_0(389) of weight 2 and dimension 3 over Rational Field > qExpansionBasis(V,10); [ q - q^5 - 2*q^6 - q^7 + 2*q^8 - q^9 + O(q^10), q^2 - q^3 + O(q^10), q^4 - q^5 - q^6 + q^9 + O(q^10) ] > qEigenform(V,6); // eigenform in span of above q-expansions q + a*q^2 - a*q^3 + (a^2 - 2)*q^4 + (-a^2 + 1)*q^5 + O(q^6) > BaseRing(Modulus(Parent($1))); Univariate Quotient Polynomial Algebra in a over Rational Field with modulus a^3 - 4*a - 2 > M := ModularForms(33,2); M; Space of modular forms on Gamma_0(33) of weight 2 and dimension 6 over Integer Ring. > Basis(M); [ 1 + O(q^8), q - q^5 + 2*q^7 + O(q^8), q^2 + 2*q^7 + O(q^8), q^3 + O(q^8), q^4 + q^5 + O(q^8), q^6 + O(q^8) ] > SetPrecision(M,15); > Basis(M); [ 1 + 12*q^11 + O(q^15), q - q^5 + 2*q^7 - 2*q^8 + q^9 - 2*q^10 - q^11 + 4*q^12 + 4*q^14 + O(q^15), q^2 + 2*q^7 + q^8 + q^9 + 2*q^10 + q^11 + q^12 + 2*q^14 + O(q^15), q^3 + q^9 - 2*q^11 + 4*q^12 + O(q^15), ... ] > M := ModularForms(1,12); > Newforms(M); [* [* q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 - 16744*q^7 + O(q^8) *], [* 691/65520 + q + 2049*q^2 + 177148*q^3 + 4196353*q^4 + 48828126*q^5 + 362976252*q^6 + 1977326744*q^7 + O(q^8) *] *] > M := ModularForms(23,2); > S := CuspidalSubspace(M); > S; Space of modular forms on Gamma_0(23) of weight 2 and dimension 2 over Integer Ring. > Newforms(S); [* [* q + a*q^2 + (-2*a - 1)*q^3 + (-a - 1)*q^4 + 2*a*q^5 + (a - 2)*q^6 + (2*a + 2)*q^7 + O(q^8), q + b*q^2 + (-2*b - 1)*q^3 + (-b - 1)*q^4 + 2*b*q^5 + (b - 2)*q^6 + (2*b + 2)*q^7 + O(q^8) *] *] > Parent($1[1][1]); Space of modular forms on Gamma_0(23) of weight 2 and dimension 2 over Number Field with defining polynomial x^2 + x - 1 over the Rational Field. > f := Newforms(S)[1][1]; g := Newforms(S)[1][2]; > f + g; >> f + g; ^ Runtime error in '+': Arguments 1 and 2 have incompatible coefficient rings. > ComplexEmbeddings(f); [* [* q - 1.618033988749894848204586834365638117720*q^2 + ... q + 0.618033988749894848204586834365638117720*q^2 - ... *] *] > $1[1][1] + $1[1][2]; 2*q - q^2 - q^4 - 2.0...*q^5 - > pAdicEmbeddings(f,2); [* [* O(2^20) + (1 + O(2^20))*q + ((1 + O(2^20))*a + O(2^20))*q^2 + ... O(2^20) + (1 + O(2^20))*q + ((1 + O(2^20))*b + O(2^20))*q^2 + ... *] *] > pAdicEmbeddings(f,11); [* [* O(11^20) + (1 + O(11^20))*q + (273946294811098331671 + ... *], [* O(11^20) + (1 + O(11^20))*q - (273946294811098331672 + ... *] *] > $1[1][1] + $1[2][1]; O(11^20) + (2 + O(11^20))*q - (1 + O(11^20))*q^2 + ... > Reductions(f,2); [* [* q + $.1*q^2 + q^3 + $.1^2*q^4 + $.1*q^6 + O(q^8), q + $.1^2*q^2 + q^3 + $.1*q^4 + $.1^2*q^6 + O(q^8) *] *] > Reductions(f,11); [* [* q + 7*q^2 + 7*q^3 + 3*q^4 + 3*q^5 + 5*q^6 + 5*q^7 + O(q^8) *], [* q + 3*q^2 + 4*q^3 + 7*q^4 + 6*q^5 + q^6 + 8*q^7 + O(q^8) *] *] > f11 := Reductions(f,11)[1][1]; > Type(f11); ModFrmElt > f11; q + 7*q^2 + 7*q^3 + 3*q^4 + 3*q^5 + 5*q^6 + 5*q^7 + O(q^8) > PowerSeries(f11,15); q + 7*q^2 + 7*q^3 + 3*q^4 + 3*q^5 + 5*q^6 + 5*q^7 + 7*q^8 + 2*q^9 + 10*q^10 + 4*q^11 + 10*q^12 + 3*q^13 + 2*q^14 + O(q^15) > G := DirichletGroup(13, CyclotomicField(6)); > M := ModularForms(eps); > BaseRing(M); Integer Ring > S := CuspidalSubspace(M); > S; Space of modular forms on Gamma_1(13) with character all conjugates of [eps], weight 2, and dimension 2 over Integer Ring. > Basis(S); [ q - 4*q^3 - q^4 + 3*q^5 + 6*q^6 + O(q^8), q^2 - 2*q^3 - q^4 + 2*q^5 + 2*q^6 + O(q^8) ] %> Newforms(S); % [* [* % q + (-a - 1)*q^2 + (2*a - 2)*q^3 + a*q^4 + (-2*a + 1)*q^5 + (-2*a % + 4)*q^6 + O(q^8), % q + (-b - 1)*q^2 + (2*b - 2)*q^3 + b*q^4 + (-2*b + 1)*q^5 + (-2*b % + 4)*q^6 + O(q^8) % *] *] $ ls magma/package/Geometry/ModFrm/*.m abelian_varieties.m eisenstein.m modular_symbols.m relations.m arithmetic.m elliptic_curve.m newforms.m subspaces.m bases.m hecke_algebras.m operators.m tests.m categories.m input_output.m p-adic.m verbose.m congruences.m l_series.m predicates.m weight1table.m creation.m level1.m q-expansions.m degeneracy_maps.m misc.m qexp_mappings.m ################################################## ## Modular Abelian Varieties and Modular Symbols ################################################## > M := ModularSymbols(389); > S := CuspidalSubspace(M); > D := NewformDecomposition(S); > [Dimension(A)/2 : A in D]; // dimensions of abvars A_f [ 1, 2, 3, 6, 20 ] > [ModularDegree(D[i]) : i in [1..#D]]; [ 40, 144, 992, 17856, 20480 ] > [LRatio(D[i],1) : i in [1..#D]]; // BSD Ratios L(A_f,1)/Omega [ 0, 0, 0, 0, 51200/97 ] > Factorization(51200); [ <2, 11>, <5, 2> ] > LSeriesLeadingCoefficient(D[1],1,100); 0.75931650029224679065762600319 2 > E := EllipticCurve(A); AnalyticRank(E); // Watkin's new code 2 0.7593000000 > LSeriesLeadingCoefficient(D[2],1,100); 1.487184621319346836916654326667 1 > TamagawaNumber(D[1],389); // c_{389} = 1 for elliptic curve 1 > TamagawaNumber(D[5],389); // c_{389} = 97 for 20-dim quotient 97 > TorsionBound(D[5],13); // multiple of order of torsion 97 > #RationalCuspidalSubgroup(D[5]); // divisor of order of torsion 97 > Invariants(IntersectionGroup(D[1],D[2])); [ 2, 2 ] > Invariants(IntersectionGroup(D[1],D[5])); [ 20, 20 ] ################################################## ## The Modular Abelian Varieties Package ################################################## > J := JZero(389); J; Modular abelian variety JZero(389) of dimension 32 and level 389 over Q > D := Decomposition(J); > [Dimension(A) : A in D]; [ 1, 2, 3, 6, 20 ] > [ModularDegree(A) : A in D]; [ 40, 144, 992, 17856, 20480 ] > [LRatio(A,1) : A in D]; [ 0, 0, 0, 0, 51200/97 ] > L := LSeries(D[1]); L; L(389A,s): L-series of Modular abelian variety 389A of dimension 1, level 389 and conductor 389 over Q > LeadingCoefficient(L,1,200); // slow, since doesn't use Watkins (but *general*) 0.75931650029224679065762600319 2 > TamagawaNumber(D[1],389); 1 1 true > TamagawaNumber(D[5],389); 97 97 true > TorsionLowerBound(D[5]); 97 > TorsionMultiple(D[5]); 97 > G := RationalCuspidalSubgroup(D[5]); G; Finitely generated subgroup ... with invariants [ 97 ] > B := D[5]/G; B; // quotients by anything are defined. Modular abelian variety of dimension 20 and level 389 over Q > H := D[1] meet D[5]; H; // takes a while Finitely generated subgroup ... with invariants [ 20, 20 ] > J := JZero(22); > [Matrix(phi) : phi in Basis(End(J))]; ... > function f(N) J := JZero(N); T := HeckeAlgebra(J); return Index(Saturation(T),T); end function; > for N in [1..120] do print N, f(N); end for; ... $ ls magma/package/Geometry/ModAbVar/*.m arithabvar.m elt.m homspace.m misc.m periods.m compgrp.m endo_alg.m inner_twists.m modabvar.m rings.m complements.m fields.m linalg.m morphisms.m subgrp.m decomp.m heegner.m lser.m new_old.m test.m ellcrv.m homology.m map.m operators.m torsion.m ########################################################## # The following are all the examples not in functions. # ########################################################## def examples(): """ """ if __name__ == '__main__': import doctest, sys doctest.testmod(sys.modules[__name__])