Ambient spaces of modular symbols#
This module defines the following classes. There is an abstract base
class ModularSymbolsAmbient
, derived from
space.ModularSymbolsSpace
and hecke.AmbientHeckeModule
. As
this is an abstract base class, only derived classes should be
instantiated. There are five derived classes:
ModularSymbolsAmbient_wtk_g0
, for modular symbols of general weight \(k\) for \(\Gamma_0(N)\);ModularSymbolsAmbient_wt2_g0
(derived fromModularSymbolsAmbient_wtk_g0
), for modular symbols of weight 2 for \(\Gamma_0(N)\);ModularSymbolsAmbient_wtk_g1
, for modular symbols of general weight \(k\) for \(\Gamma_1(N)\);ModularSymbolsAmbient_wtk_gamma_h
, for modular symbols of general weight \(k\) for \(\Gamma_H\), where \(H\) is a subgroup of \(\ZZ/N\ZZ\);ModularSymbolsAmbient_wtk_eps
, for modular symbols of general weight \(k\) and character \(\epsilon\).
EXAMPLES:
We compute a space of modular symbols modulo 2. The dimension is different from that of the corresponding space in characteristic 0:
sage: M = ModularSymbols(11,4,base_ring=GF(2)); M
Modular Symbols space of dimension 7 for Gamma_0(11) of weight 4
with sign 0 over Finite Field of size 2
sage: M.basis()
([X*Y,(1,0)], [X*Y,(1,8)], [X*Y,(1,9)], [X^2,(0,1)], [X^2,(1,8)], [X^2,(1,9)], [X^2,(1,10)])
sage: M0 = ModularSymbols(11,4,base_ring=QQ); M0
Modular Symbols space of dimension 6 for Gamma_0(11) of weight 4
with sign 0 over Rational Field
sage: M0.basis()
([X^2,(0,1)], [X^2,(1,6)], [X^2,(1,7)], [X^2,(1,8)], [X^2,(1,9)], [X^2,(1,10)])
The characteristic polynomial of the Hecke operator \(T_2\) has an extra factor \(x\).
sage: M.T(2).matrix().fcp('x')
(x + 1)^2 * x^5
sage: M0.T(2).matrix().fcp('x')
(x - 9)^2 * (x^2 - 2*x - 2)^2
- class sage.modular.modsym.ambient.ModularSymbolsAmbient(group, weight, sign, base_ring, character=None, custom_init=None, category=None)#
Bases:
sage.modular.modsym.space.ModularSymbolsSpace
,sage.modular.hecke.ambient_module.AmbientHeckeModule
An ambient space of modular symbols for a congruence subgroup of \(SL_2(\ZZ)\).
This class is an abstract base class, so only derived classes should be instantiated.
INPUT:
weight
- an integergroup
- a congruence subgroup.sign
- an integer, either -1, 0, or 1base_ring
- a commutative ringcustom_init
- a function that is called with self as input before any computations are done using self; this could be used to set a custom modular symbols presentation.
- boundary_map()#
Return the boundary map to the corresponding space of boundary modular symbols.
EXAMPLES:
sage: ModularSymbols(20,2).boundary_map() Hecke module morphism boundary map defined by the matrix [ 1 -1 0 0 0 0] [ 0 1 -1 0 0 0] [ 0 1 0 -1 0 0] [ 0 0 0 -1 1 0] [ 0 1 0 -1 0 0] [ 0 0 1 -1 0 0] [ 0 1 0 0 0 -1] Domain: Modular Symbols space of dimension 7 for Gamma_0(20) of weight ... Codomain: Space of Boundary Modular Symbols for Congruence Subgroup Gamma0(20) ... sage: type(ModularSymbols(20,2).boundary_map()) <class 'sage.modular.hecke.morphism.HeckeModuleMorphism_matrix'>
- boundary_space()#
Return the subspace of boundary modular symbols of this modular symbols ambient space.
EXAMPLES:
sage: M = ModularSymbols(20, 2) sage: B = M.boundary_space(); B Space of Boundary Modular Symbols for Congruence Subgroup Gamma0(20) of weight 2 over Rational Field sage: M.cusps() [Infinity, 0, -1/4, 1/5, -1/2, 1/10] sage: M.dimension() 7 sage: B.dimension() 6
- change_ring(R)#
Change the base ring to R.
EXAMPLES:
sage: ModularSymbols(Gamma1(13), 2).change_ring(GF(17)) Modular Symbols space of dimension 15 for Gamma_1(13) of weight 2 with sign 0 over Finite Field of size 17 sage: M = ModularSymbols(DirichletGroup(5).0, 7); MM=M.change_ring(CyclotomicField(8)); MM Modular Symbols space of dimension 6 and level 5, weight 7, character [zeta8^2], sign 0, over Cyclotomic Field of order 8 and degree 4 sage: MM.change_ring(CyclotomicField(4)) == M True sage: M.change_ring(QQ) Traceback (most recent call last): ... TypeError: Unable to coerce zeta4 to a rational
Similarly with
base_extend()
:sage: M = ModularSymbols(DirichletGroup(5).0, 7); MM = M.base_extend(CyclotomicField(8)); MM Modular Symbols space of dimension 6 and level 5, weight 7, character [zeta8^2], sign 0, over Cyclotomic Field of order 8 and degree 4 sage: MM.base_extend(CyclotomicField(4)) Traceback (most recent call last): ... TypeError: Base extension of self (over 'Cyclotomic Field of order 8 and degree 4') to ring 'Cyclotomic Field of order 4 and degree 2' not defined.
- compact_newform_eigenvalues(v, names='alpha')#
Return compact systems of eigenvalues for each Galois conjugacy class of cuspidal newforms in this ambient space.
INPUT:
v
- list of positive integers
OUTPUT:
list
- of pairs (E, x), where E*x is a vector with entries the eigenvalues \(a_n\) for \(n \in v\).
EXAMPLES:
sage: M = ModularSymbols(43,2,1) sage: X = M.compact_newform_eigenvalues(prime_range(10)) sage: X[0][0] * X[0][1] (-2, -2, -4, 0) sage: X[1][0] * X[1][1] (alpha1, -alpha1, -alpha1 + 2, alpha1 - 2)
sage: M = ModularSymbols(DirichletGroup(24,QQ).1,2,sign=1) sage: M.compact_newform_eigenvalues(prime_range(10),'a') [( [-1/2 -1/2] [ 1/2 -1/2] [ -1 1] [ -2 0], (1, -2*a0 - 1) )] sage: a = M.compact_newform_eigenvalues([1..10],'a')[0] sage: a[0]*a[1] (1, a0, a0 + 1, -2*a0 - 2, -2*a0 - 2, -a0 - 2, -2, 2*a0 + 4, -1, 2*a0 + 4) sage: M = ModularSymbols(DirichletGroup(13).0^2,2,sign=1) sage: M.compact_newform_eigenvalues(prime_range(10),'a') [( [ -zeta6 - 1] [ 2*zeta6 - 2] [-2*zeta6 + 1] [ 0], (1) )] sage: a = M.compact_newform_eigenvalues([1..10],'a')[0] sage: a[0]*a[1] (1, -zeta6 - 1, 2*zeta6 - 2, zeta6, -2*zeta6 + 1, -2*zeta6 + 4, 0, 2*zeta6 - 1, -zeta6, 3*zeta6 - 3)
- compute_presentation()#
Compute and cache the presentation of this space.
EXAMPLES:
sage: ModularSymbols(11,2).compute_presentation() # no output
- cuspidal_submodule()#
The cuspidal submodule of this modular symbols ambient space.
EXAMPLES:
sage: M = ModularSymbols(12,2,0,GF(5)) ; M Modular Symbols space of dimension 5 for Gamma_0(12) of weight 2 with sign 0 over Finite Field of size 5 sage: M.cuspidal_submodule() Modular Symbols subspace of dimension 0 of Modular Symbols space of dimension 5 for Gamma_0(12) of weight 2 with sign 0 over Finite Field of size 5 sage: ModularSymbols(1,24,-1).cuspidal_submodule() Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 2 for Gamma_0(1) of weight 24 with sign -1 over Rational Field
The cuspidal submodule of the cuspidal submodule is itself:
sage: M = ModularSymbols(389) sage: S = M.cuspidal_submodule() sage: S.cuspidal_submodule() is S True
- cusps()#
Return the set of cusps for this modular symbols space.
EXAMPLES:
sage: ModularSymbols(20,2).cusps() [Infinity, 0, -1/4, 1/5, -1/2, 1/10]
- dual_star_involution_matrix()#
Return the matrix of the dual star involution, which is induced by complex conjugation on the linear dual of modular symbols.
EXAMPLES:
sage: ModularSymbols(20,2).dual_star_involution_matrix() [1 0 0 0 0 0 0] [0 1 0 0 0 0 0] [0 0 0 0 1 0 0] [0 0 0 1 0 0 0] [0 0 1 0 0 0 0] [0 0 0 0 0 1 0] [0 0 0 0 0 0 1]
- eisenstein_submodule()#
Return the Eisenstein submodule of this space of modular symbols.
EXAMPLES:
sage: ModularSymbols(20,2).eisenstein_submodule() Modular Symbols subspace of dimension 5 of Modular Symbols space of dimension 7 for Gamma_0(20) of weight 2 with sign 0 over Rational Field
- element(x)#
Creates and returns an element of self from a modular symbol, if possible.
INPUT:
x
- an object of one of the following types: ModularSymbol, ManinSymbol.
OUTPUT:
ModularSymbol - a modular symbol with parent self.
EXAMPLES:
sage: M = ModularSymbols(11,4,1) sage: M.T(3) Hecke operator T_3 on Modular Symbols space of dimension 4 for Gamma_0(11) of weight 4 with sign 1 over Rational Field sage: M.T(3)(M.0) 28*[X^2,(0,1)] + 2*[X^2,(1,4)] + 2/3*[X^2,(1,6)] - 8/3*[X^2,(1,9)] sage: M.T(3)(M.0).element() (28, 2, 2/3, -8/3)
- factor()#
Return a list of pairs \((S,e)\) where \(S\) is spaces of modular symbols and self is isomorphic to the direct sum of the \(S^e\) as a module over the anemic Hecke algebra adjoin the star involution. The cuspidal \(S\) are all simple, but the Eisenstein factors need not be simple.
EXAMPLES:
sage: ModularSymbols(Gamma0(22), 2).factorization() (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field)^2 * (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field)^2 * (Modular Symbols subspace of dimension 3 of Modular Symbols space of dimension 7 for Gamma_0(22) of weight 2 with sign 0 over Rational Field)
sage: ModularSymbols(1,6,0,GF(2)).factorization() (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2 for Gamma_0(1) of weight 6 with sign 0 over Finite Field of size 2) * (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2 for Gamma_0(1) of weight 6 with sign 0 over Finite Field of size 2)
sage: ModularSymbols(18,2).factorization() (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 for Gamma_0(18) of weight 2 with sign 0 over Rational Field) * (Modular Symbols subspace of dimension 5 of Modular Symbols space of dimension 7 for Gamma_0(18) of weight 2 with sign 0 over Rational Field)
sage: M = ModularSymbols(DirichletGroup(38,CyclotomicField(3)).0^2, 2, +1); M Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2 sage: M.factorization() # long time (about 8 seconds) (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2) * (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2) * (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2) * (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2)
- factorization()#
Return a list of pairs \((S,e)\) where \(S\) is spaces of modular symbols and self is isomorphic to the direct sum of the \(S^e\) as a module over the anemic Hecke algebra adjoin the star involution. The cuspidal \(S\) are all simple, but the Eisenstein factors need not be simple.
EXAMPLES:
sage: ModularSymbols(Gamma0(22), 2).factorization() (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field)^2 * (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field)^2 * (Modular Symbols subspace of dimension 3 of Modular Symbols space of dimension 7 for Gamma_0(22) of weight 2 with sign 0 over Rational Field)
sage: ModularSymbols(1,6,0,GF(2)).factorization() (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2 for Gamma_0(1) of weight 6 with sign 0 over Finite Field of size 2) * (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2 for Gamma_0(1) of weight 6 with sign 0 over Finite Field of size 2)
sage: ModularSymbols(18,2).factorization() (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 for Gamma_0(18) of weight 2 with sign 0 over Rational Field) * (Modular Symbols subspace of dimension 5 of Modular Symbols space of dimension 7 for Gamma_0(18) of weight 2 with sign 0 over Rational Field)
sage: M = ModularSymbols(DirichletGroup(38,CyclotomicField(3)).0^2, 2, +1); M Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2 sage: M.factorization() # long time (about 8 seconds) (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2) * (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2) * (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2) * (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 7 and level 38, weight 2, character [zeta3], sign 1, over Cyclotomic Field of order 3 and degree 2)
- integral_structure(algorithm='default')#
Return the \(\ZZ\)-structure of this modular symbols space, generated by all integral modular symbols.
INPUT:
algorithm
- string (default: ‘default’ - choose heuristically)'pari'
- use pari for the HNF computation'padic'
- use p-adic algorithm (only good for dense case)
ALGORITHM: It suffices to consider lattice generated by the free generating symbols \(X^iY^{k-2-i}.(u,v)\) after quotienting out by the \(S\) (and \(I\)) relations, since the quotient by these relations is the same over any ring.
EXAMPLES: In weight 2 the rational basis is often integral.
sage: M = ModularSymbols(11,2) sage: M.integral_structure() Free module of degree 3 and rank 3 over Integer Ring Echelon basis matrix: [1 0 0] [0 1 0] [0 0 1]
This is rarely the case in higher weight:
sage: M = ModularSymbols(6,4) sage: M.integral_structure() Free module of degree 6 and rank 6 over Integer Ring Echelon basis matrix: [ 1 0 0 0 0 0] [ 0 1 0 0 0 0] [ 0 0 1/2 1/2 1/2 1/2] [ 0 0 0 1 0 0] [ 0 0 0 0 1 0] [ 0 0 0 0 0 1]
Here is an example involving \(\Gamma_1(N)\).
sage: M = ModularSymbols(Gamma1(5),6) sage: M.integral_structure() Free module of degree 10 and rank 10 over Integer Ring Echelon basis matrix: [ 1 0 0 0 0 0 0 0 0 0] [ 0 1 0 0 0 0 0 0 0 0] [ 0 0 1/96 1/32 23/24 0 1/96 0 7/24 67/96] [ 0 0 0 1/24 23/24 0 0 1/24 1/4 17/24] [ 0 0 0 0 1 0 0 0 0 0] [ 0 0 0 0 0 1/6 0 1/48 23/48 1/3] [ 0 0 0 0 0 0 1/24 1/24 11/24 11/24] [ 0 0 0 0 0 0 0 1/16 7/16 1/2] [ 0 0 0 0 0 0 0 0 1/2 1/2] [ 0 0 0 0 0 0 0 0 0 1]
- is_cuspidal()#
Return True if this space is cuspidal, else False.
EXAMPLES:
sage: M = ModularSymbols(20,2) sage: M.is_cuspidal() False sage: S = M.cuspidal_subspace() sage: S.is_cuspidal() True sage: S = M.eisenstein_subspace() sage: S.is_cuspidal() False
- is_eisenstein()#
Return True if this space is Eisenstein, else False.
EXAMPLES:
sage: M = ModularSymbols(20,2) sage: M.is_eisenstein() False sage: S = M.eisenstein_submodule() sage: S.is_eisenstein() True sage: S = M.cuspidal_subspace() sage: S.is_eisenstein() False
- manin_basis()#
Return a list of indices into the list of Manin generators (see
self.manin_generators()
) such that those symbols form a basis for the quotient of the \(\QQ\)-vector space spanned by Manin symbols modulo the relations.EXAMPLES:
sage: M = ModularSymbols(2,2) sage: M.manin_basis() [1] sage: [M.manin_generators()[i] for i in M.manin_basis()] [(1,0)] sage: M = ModularSymbols(6,2) sage: M.manin_basis() [1, 10, 11] sage: [M.manin_generators()[i] for i in M.manin_basis()] [(1,0), (3,1), (3,2)]
- manin_generators()#
Return list of all Manin symbols for this space. These are the generators in the presentation of this space by Manin symbols.
EXAMPLES:
sage: M = ModularSymbols(2,2) sage: M.manin_generators() [(0,1), (1,0), (1,1)]
sage: M = ModularSymbols(1,6) sage: M.manin_generators() [[Y^4,(0,0)], [X*Y^3,(0,0)], [X^2*Y^2,(0,0)], [X^3*Y,(0,0)], [X^4,(0,0)]]
- manin_gens_to_basis()#
Return the matrix expressing the manin symbol generators in terms of the basis.
EXAMPLES:
sage: ModularSymbols(11,2).manin_gens_to_basis() [-1 0 0] [ 1 0 0] [ 0 0 0] [ 0 0 1] [ 0 -1 1] [ 0 -1 0] [ 0 0 -1] [ 0 0 -1] [ 0 1 -1] [ 0 1 0] [ 0 0 1] [ 0 0 0]
- manin_symbol(x, check=True)#
Construct a Manin Symbol from the given data.
INPUT:
x
(list) – either \([u,v]\) or \([i,u,v]\), where \(0\le i\le k-2\) where \(k\) is the weight, and \(u\),`v` are integers defining a valid element of \(\mathbb{P}^1(N)\), where \(N\) is the level.
OUTPUT:
(ManinSymbol) the Manin Symbol associated to \([i;(u,v)]\), with \(i=0\) if not supplied, corresponding to the monomial symbol \([X^i*Y^{k-2-i}, (u,v)]\).
EXAMPLES:
sage: M = ModularSymbols(11,4,1) sage: M.manin_symbol([2,5,6]) -2/3*[X^2,(1,6)] + 5/3*[X^2,(1,9)]
- manin_symbols()#
Return the list of Manin symbols for this modular symbols ambient space.
EXAMPLES:
sage: ModularSymbols(11,2).manin_symbols() Manin Symbol List of weight 2 for Gamma0(11)
- manin_symbols_basis()#
A list of Manin symbols that form a basis for the ambient space
self
.OUTPUT:
list
- a list of 2-tuples (if the weight is 2) or 3-tuples, which represent the Manin symbols basis for self.
EXAMPLES:
sage: m = ModularSymbols(23) sage: m.manin_symbols_basis() [(1,0), (1,17), (1,19), (1,20), (1,21)] sage: m = ModularSymbols(6, weight=4, sign=-1) sage: m.manin_symbols_basis() [[X^2,(2,1)]]
- modular_symbol(x, check=True)#
Create a modular symbol in this space.
INPUT:
x
(list) – a list of either 2 or 3 entries:2 entries: \([\alpha, \beta]\) where \(\alpha\) and \(\beta\) are cusps;
3 entries: \([i, \alpha, \beta]\) where \(0\le i\le k-2\) and \(\alpha\) and \(\beta\) are cusps;
check
(bool, default True) – flag that determines whether the inputx
needs processing: use check=False for efficiency if the inputx
is a list of length 3 whose first entry is an Integer, and whose second and third entries are Cusps (see examples).
OUTPUT:
(Modular Symbol) The modular symbol \(Y^{k-2}\{\alpha, \beta\}\). or \(X^i Y^{k-2-i}\{\alpha,\beta\}\).
EXAMPLES:
sage: set_modsym_print_mode('modular') sage: M = ModularSymbols(11) sage: M.modular_symbol([2/11, oo]) -{-1/9, 0} sage: M.1 {-1/8, 0} sage: M.modular_symbol([-1/8, 0]) {-1/8, 0} sage: M.modular_symbol([0, -1/8, 0]) {-1/8, 0} sage: M.modular_symbol([10, -1/8, 0]) Traceback (most recent call last): ... ValueError: The first entry of the tuple (=[10, -1/8, 0]) must be an integer between 0 and k-2 (=0).
sage: N = ModularSymbols(6,4) sage: set_modsym_print_mode('manin') sage: N([1,Cusp(-1/4),Cusp(0)]) 17/2*[X^2,(2,3)] - 9/2*[X^2,(2,5)] + 15/2*[X^2,(3,1)] - 15/2*[X^2,(3,2)] sage: N([1,Cusp(-1/2),Cusp(0)]) 1/2*[X^2,(2,3)] + 3/2*[X^2,(2,5)] + 3/2*[X^2,(3,1)] - 3/2*[X^2,(3,2)]
Use check=False for efficiency if the input x is a list of length 3 whose first entry is an Integer, and whose second and third entries are cusps:
sage: M.modular_symbol([0, Cusp(2/11), Cusp(oo)], check=False) -(1,9)
sage: set_modsym_print_mode() # return to default.
- modular_symbol_sum(x, check=True)#
Construct a modular symbol sum.
INPUT:
x
(list) – \([f, \alpha, \beta]\) where \(f = \sum_{i=0}^{k-2} a_i X^i Y^{k-2-i}\) is a homogeneous polynomial over \(\ZZ\) of degree \(k\) and \(\alpha\) and \(\beta\) are cusps.check
(bool, default True) – if True check the validity of the input tuplex
OUTPUT:
The sum \(\sum_{i=0}^{k-2} a_i [ i, \alpha, \beta ]\) as an element of this modular symbol space.
EXAMPLES:
sage: M = ModularSymbols(11,4) sage: R.<X,Y>=QQ[] sage: M.modular_symbol_sum([X*Y,Cusp(0),Cusp(Infinity)]) -3/14*[X^2,(1,6)] + 1/14*[X^2,(1,7)] - 1/14*[X^2,(1,8)] + 1/2*[X^2,(1,9)] - 2/7*[X^2,(1,10)]
- modular_symbols_of_level(G)#
Return a space of modular symbols with the same parameters as this space, except the congruence subgroup is changed to \(G\).
INPUT:
G
– either a congruence subgroup or an integer to use as the level of such a group. The given group must either contain or be contained in the group definingself
.
- modular_symbols_of_sign(sign)#
Return a space of modular symbols with the same defining properties (weight, level, etc.) as this space except with given sign.
INPUT:
sign
(int) – A sign (\(+1\), \(-1\) or \(0\)).
OUTPUT:
(ModularSymbolsAmbient) A space of modular symbols with the same defining properties (weight, level, etc.) as this space except with given sign.
EXAMPLES:
sage: M = ModularSymbols(Gamma0(11),2,sign=0) sage: M Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field sage: M.modular_symbols_of_sign(-1) Modular Symbols space of dimension 1 for Gamma_0(11) of weight 2 with sign -1 over Rational Field sage: M = ModularSymbols(Gamma1(11),2,sign=0) sage: M.modular_symbols_of_sign(-1) Modular Symbols space of dimension 1 for Gamma_1(11) of weight 2 with sign -1 over Rational Field
- modular_symbols_of_weight(k)#
Return a space of modular symbols with the same defining properties (weight, sign, etc.) as this space except with weight \(k\).
INPUT:
k
(int) – A positive integer.
OUTPUT:
(ModularSymbolsAmbient) A space of modular symbols with the same defining properties (level, sign) as this space except with given weight.
EXAMPLES:
sage: M = ModularSymbols(Gamma1(6),2,sign=0) sage: M.modular_symbols_of_weight(3) Modular Symbols space of dimension 4 for Gamma_1(6) of weight 3 with sign 0 over Rational Field
- new_submodule(p=None)#
Return the new or \(p\)-new submodule of this modular symbols ambient space.
INPUT:
p
- (default: None); if not None, return only the \(p\)-new submodule.
OUTPUT:
The new or \(p\)-new submodule of this modular symbols ambient space.
EXAMPLES:
sage: ModularSymbols(100).new_submodule() Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 31 for Gamma_0(100) of weight 2 with sign 0 over Rational Field sage: ModularSymbols(389).new_submodule() Modular Symbols space of dimension 65 for Gamma_0(389) of weight 2 with sign 0 over Rational Field
- p1list()#
Return a P1list of the level of this modular symbol space.
EXAMPLES:
sage: ModularSymbols(11,2).p1list() The projective line over the integers modulo 11
- rank()#
Return the rank of this modular symbols ambient space.
OUTPUT:
(int) The rank of this space of modular symbols.
EXAMPLES:
sage: M = ModularSymbols(389) sage: M.rank() 65
sage: ModularSymbols(11,sign=0).rank() 3 sage: ModularSymbols(100,sign=0).rank() 31 sage: ModularSymbols(22,sign=1).rank() 5 sage: ModularSymbols(1,12).rank() 3 sage: ModularSymbols(3,4).rank() 2 sage: ModularSymbols(8,6,sign=-1).rank() 3
- star_involution()#
Return the star involution on this modular symbols space.
OUTPUT:
(matrix) The matrix of the star involution on this space, which is induced by complex conjugation on modular symbols, with respect to the standard basis.
EXAMPLES:
sage: ModularSymbols(20,2).star_involution() Hecke module morphism Star involution on Modular Symbols space of dimension 7 for Gamma_0(20) of weight 2 with sign 0 over Rational Field defined by the matrix [1 0 0 0 0 0 0] [0 1 0 0 0 0 0] [0 0 0 0 1 0 0] [0 0 0 1 0 0 0] [0 0 1 0 0 0 0] [0 0 0 0 0 1 0] [0 0 0 0 0 0 1] Domain: Modular Symbols space of dimension 7 for Gamma_0(20) of weight ... Codomain: Modular Symbols space of dimension 7 for Gamma_0(20) of weight ...
- submodule(M, dual_free_module=None, check=True)#
Return the submodule with given generators or free module \(M\).
INPUT:
M
- either a submodule of this ambient free module, or generators for a submodule;dual_free_module
(bool, default None) – this may beuseful to speed up certain calculations; it is the corresponding submodule of the ambient dual module;
check
(bool, default True) – if True, check that \(M\) isa submodule, i.e. is invariant under all Hecke operators.
OUTPUT:
A subspace of this modular symbol space.
EXAMPLES:
sage: M = ModularSymbols(11) sage: M.submodule([M.0]) Traceback (most recent call last): ... ValueError: The submodule must be invariant under all Hecke operators. sage: M.eisenstein_submodule().basis() ((1,0) - 1/5*(1,9),) sage: M.basis() ((1,0), (1,8), (1,9)) sage: M.submodule([M.0 - 1/5*M.2]) Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field
Note
It would make more sense to only check that \(M\) is invariant under the Hecke operators with index coprime to the level. Unfortunately, I do not know a reasonable algorithm for determining whether a module is invariant under just the anemic Hecke algebra, since I do not know an analogue of the Sturm bound for the anemic Hecke algebra. - William Stein, 2007-07-27
- twisted_winding_element(i, eps)#
Return the twisted winding element of given degree and character.
INPUT:
i
(int) – an integer, \(0\le i\le k-2\) where \(k\) is the weight.eps
(character) – a Dirichlet character
OUTPUT:
(modular symbol) The so-called ‘twisted winding element’:
\[\sum_{a \in (\ZZ/m\ZZ)^\times} \varepsilon(a) * [ i, 0, a/m ].\]Note
This will only work if the base ring of the modular symbol space contains the character values.
EXAMPLES:
sage: eps = DirichletGroup(5)[2] sage: K = eps.base_ring() sage: M = ModularSymbols(37,2,0,K) sage: M.twisted_winding_element(0,eps) 2*(1,23) - 2*(1,32) + 2*(1,34)
- class sage.modular.modsym.ambient.ModularSymbolsAmbient_wt2_g0(N, sign, F, custom_init=None, category=None)#
Bases:
sage.modular.modsym.ambient.ModularSymbolsAmbient_wtk_g0
Modular symbols for \(\Gamma_0(N)\) of integer weight \(2\) over the field \(F\).
INPUT:
N
- int, the levelsign
- int, either -1, 0, or 1
OUTPUT:
The space of modular symbols of weight \(2\), trivial character, level \(N\) and given sign.
EXAMPLES:
sage: ModularSymbols(Gamma0(12),2) Modular Symbols space of dimension 5 for Gamma_0(12) of weight 2 with sign 0 over Rational Field
- boundary_space()#
Return the space of boundary modular symbols for this space.
EXAMPLES:
sage: M = ModularSymbols(100,2) sage: M.boundary_space() Space of Boundary Modular Symbols for Congruence Subgroup Gamma0(100) of weight 2 over Rational Field
- class sage.modular.modsym.ambient.ModularSymbolsAmbient_wtk_eps(eps, weight, sign, base_ring, custom_init=None, category=None)#
Bases:
sage.modular.modsym.ambient.ModularSymbolsAmbient
Space of modular symbols with given weight, character, base ring and sign.
INPUT:
eps
- dirichlet.DirichletCharacter, the “Nebentypus” character.weight
- int, the weight = 2sign
- int, either -1, 0, or 1base_ring
- the base ring. It must be possible to change the ring of the character to this base ring (not always canonically).
EXAMPLES:
sage: eps = DirichletGroup(4).gen(0) sage: eps.order() 2 sage: ModularSymbols(eps, 2) Modular Symbols space of dimension 0 and level 4, weight 2, character [-1], sign 0, over Rational Field sage: ModularSymbols(eps, 3) Modular Symbols space of dimension 2 and level 4, weight 3, character [-1], sign 0, over Rational Field
We next create a space with character of order bigger than 2.
sage: eps = DirichletGroup(5).gen(0) sage: eps # has order 4 Dirichlet character modulo 5 of conductor 5 mapping 2 |--> zeta4 sage: ModularSymbols(eps, 2).dimension() 0 sage: ModularSymbols(eps, 3).dimension() 2
Here is another example:
sage: G.<e> = DirichletGroup(5) sage: M = ModularSymbols(e,3) sage: loads(M.dumps()) == M True
- boundary_space()#
Return the space of boundary modular symbols for this space.
EXAMPLES:
sage: eps = DirichletGroup(5).gen(0) sage: M = ModularSymbols(eps, 2) sage: M.boundary_space() Boundary Modular Symbols space of level 5, weight 2, character [zeta4] and dimension 0 over Cyclotomic Field of order 4 and degree 2
- manin_symbols()#
Return the Manin symbol list of this modular symbol space.
EXAMPLES:
sage: eps = DirichletGroup(5).gen(0) sage: M = ModularSymbols(eps, 2) sage: M.manin_symbols() Manin Symbol List of weight 2 for Gamma1(5) with character [zeta4] sage: len(M.manin_symbols()) 6
- modular_symbols_of_level(N)#
Return a space of modular symbols with the same parameters as this space except with level \(N\).
INPUT:
N
(int) – a positive integer.
OUTPUT:
(Modular Symbol space) A space of modular symbols with the same defining properties (weight, sign, etc.) as this space except with level \(N\).
EXAMPLES:
sage: eps = DirichletGroup(5).gen(0) sage: M = ModularSymbols(eps, 2); M Modular Symbols space of dimension 0 and level 5, weight 2, character [zeta4], sign 0, over Cyclotomic Field of order 4 and degree 2 sage: M.modular_symbols_of_level(15) Modular Symbols space of dimension 0 and level 15, weight 2, character [1, zeta4], sign 0, over Cyclotomic Field of order 4 and degree 2
- modular_symbols_of_sign(sign)#
Return a space of modular symbols with the same defining properties (weight, level, etc.) as this space except with given sign.
INPUT:
sign
(int) – A sign (\(+1\), \(-1\) or \(0\)).
OUTPUT:
(ModularSymbolsAmbient) A space of modular symbols with the same defining properties (weight, level, etc.) as this space except with given sign.
EXAMPLES:
sage: eps = DirichletGroup(5).gen(0) sage: M = ModularSymbols(eps, 2); M Modular Symbols space of dimension 0 and level 5, weight 2, character [zeta4], sign 0, over Cyclotomic Field of order 4 and degree 2 sage: M.modular_symbols_of_sign(0) == M True sage: M.modular_symbols_of_sign(+1) Modular Symbols space of dimension 0 and level 5, weight 2, character [zeta4], sign 1, over Cyclotomic Field of order 4 and degree 2 sage: M.modular_symbols_of_sign(-1) Modular Symbols space of dimension 0 and level 5, weight 2, character [zeta4], sign -1, over Cyclotomic Field of order 4 and degree 2
- modular_symbols_of_weight(k)#
Return a space of modular symbols with the same defining properties (weight, sign, etc.) as this space except with weight \(k\).
INPUT:
k
(int) – A positive integer.
OUTPUT:
(ModularSymbolsAmbient) A space of modular symbols with the same defining properties (level, sign) as this space except with given weight.
EXAMPLES:
sage: eps = DirichletGroup(5).gen(0) sage: M = ModularSymbols(eps, 2); M Modular Symbols space of dimension 0 and level 5, weight 2, character [zeta4], sign 0, over Cyclotomic Field of order 4 and degree 2 sage: M.modular_symbols_of_weight(3) Modular Symbols space of dimension 2 and level 5, weight 3, character [zeta4], sign 0, over Cyclotomic Field of order 4 and degree 2 sage: M.modular_symbols_of_weight(2) == M True
- class sage.modular.modsym.ambient.ModularSymbolsAmbient_wtk_g0(N, k, sign, F, custom_init=None, category=None)#
Bases:
sage.modular.modsym.ambient.ModularSymbolsAmbient
Modular symbols for \(\Gamma_0(N)\) of integer weight \(k > 2\) over the field \(F\).
For weight \(2\), it is faster to use
ModularSymbols_wt2_g0
.INPUT:
N
- int, the levelk
- integer weight = 2.sign
- int, either -1, 0, or 1F
- field
EXAMPLES:
sage: ModularSymbols(1,12) Modular Symbols space of dimension 3 for Gamma_0(1) of weight 12 with sign 0 over Rational Field sage: ModularSymbols(1,12, sign=1).dimension() 2 sage: ModularSymbols(15,4, sign=-1).dimension() 4 sage: ModularSymbols(6,6).dimension() 10 sage: ModularSymbols(36,4).dimension() 36
- boundary_space()#
Return the space of boundary modular symbols for this space.
EXAMPLES:
sage: M = ModularSymbols(100,2) sage: M.boundary_space() Space of Boundary Modular Symbols for Congruence Subgroup Gamma0(100) of weight 2 over Rational Field
- manin_symbols()#
Return the Manin symbol list of this modular symbol space.
EXAMPLES:
sage: M = ModularSymbols(100,4) sage: M.manin_symbols() Manin Symbol List of weight 4 for Gamma0(100) sage: len(M.manin_symbols()) 540
- class sage.modular.modsym.ambient.ModularSymbolsAmbient_wtk_g1(level, weight, sign, F, custom_init=None, category=None)#
Bases:
sage.modular.modsym.ambient.ModularSymbolsAmbient
INPUT:
level
- int, the levelweight
- int, the weight = 2sign
- int, either -1, 0, or 1F
- field
EXAMPLES:
sage: ModularSymbols(Gamma1(17),2) Modular Symbols space of dimension 25 for Gamma_1(17) of weight 2 with sign 0 over Rational Field sage: [ModularSymbols(Gamma1(7),k).dimension() for k in [2,3,4,5]] [5, 8, 12, 16]
sage: ModularSymbols(Gamma1(7),3) Modular Symbols space of dimension 8 for Gamma_1(7) of weight 3 with sign 0 over Rational Field
- boundary_space()#
Return the space of boundary modular symbols for this space.
EXAMPLES:
sage: M = ModularSymbols(100,2) sage: M.boundary_space() Space of Boundary Modular Symbols for Congruence Subgroup Gamma0(100) of weight 2 over Rational Field
- manin_symbols()#
Return the Manin symbol list of this modular symbol space.
EXAMPLES:
sage: M = ModularSymbols(Gamma1(30),4) sage: M.manin_symbols() Manin Symbol List of weight 4 for Gamma1(30) sage: len(M.manin_symbols()) 1728
- class sage.modular.modsym.ambient.ModularSymbolsAmbient_wtk_gamma_h(group, weight, sign, F, custom_init=None, category=None)#
Bases:
sage.modular.modsym.ambient.ModularSymbolsAmbient
Initialize a space of modular symbols for \(\Gamma_H(N)\).
INPUT:
group
- a congruence subgroup \(\Gamma_H(N)\).weight
- int, the weight = 2sign
- int, either -1, 0, or 1F
- field
EXAMPLES:
sage: ModularSymbols(GammaH(15,[4]),2) Modular Symbols space of dimension 9 for Congruence Subgroup Gamma_H(15) with H generated by [4] of weight 2 with sign 0 over Rational Field
- boundary_space()#
Return the space of boundary modular symbols for this space.
EXAMPLES:
sage: M = ModularSymbols(GammaH(15,[4]),2) sage: M.boundary_space() Boundary Modular Symbols space for Congruence Subgroup Gamma_H(15) with H generated by [4] of weight 2 over Rational Field
- manin_symbols()#
Return the Manin symbol list of this modular symbol space.
EXAMPLES:
sage: M = ModularSymbols(GammaH(15,[4]),2) sage: M.manin_symbols() Manin Symbol List of weight 2 for Congruence Subgroup Gamma_H(15) with H generated by [4] sage: len(M.manin_symbols()) 96