# Modular symbols $$\{\alpha$$, $$\beta\}$$#

The ModularSymbol class represents a single modular symbol $$X^i Y^{k-2-i} \{\alpha, \beta\}$$.

AUTHOR:

• William Stein (2005, 2009)

class sage.modular.modsym.modular_symbols.ModularSymbol(space, i, alpha, beta)[source]#

Bases: SageObject

The modular symbol $$X^i\cdot Y^{k-2-i}\cdot \{\alpha, \beta\}$$.

alpha()[source]#

For a symbol of the form $$X^i Y^{k-2-i}\{\alpha, \beta\}$$, return $$\alpha$$.

EXAMPLES:

sage: s = ModularSymbols(11,4).1.modular_symbol_rep()[0][1]; s
X^2*{-1/6, 0}
sage: s.alpha()
-1/6
sage: type(s.alpha())
<class 'sage.modular.cusps.Cusp'>

>>> from sage.all import *
>>> s = ModularSymbols(Integer(11),Integer(4)).gen(1).modular_symbol_rep()[Integer(0)][Integer(1)]; s
X^2*{-1/6, 0}
>>> s.alpha()
-1/6
>>> type(s.alpha())
<class 'sage.modular.cusps.Cusp'>

apply(g)[source]#

Act on this symbol by the element $$g \in {\rm GL}_2(\QQ)$$.

INPUT:

• g – a list [a,b,c,d], corresponding to the 2x2 matrix $$\begin{pmatrix} a & b \\ c & d \end{pmatrix} \in {\rm GL}_2(\QQ)$$.

OUTPUT:

• FormalSum – a formal sum $$\sum_i c_i x_i$$, where $$c_i$$ are scalars and $$x_i$$ are ModularSymbol objects, such that the sum $$\sum_i c_i x_i$$ is the image of this symbol under the action of g. No reduction is performed modulo the relations that hold in self.space().

The action of $$g$$ on symbols is by

$P(X,Y)\{\alpha, \beta\} \mapsto P(dX-bY, -cx+aY) \{g(\alpha), g(\beta)\}.$

Note that for us we have $$P=X^i Y^{k-2-i}$$, which simplifies computation of the polynomial part slightly.

EXAMPLES:

sage: s = ModularSymbols(11,2).1.modular_symbol_rep()[0][1]; s
{-1/8, 0}
sage: a = 1; b = 2; c = 3; d = 4; s.apply([a,b,c,d])
{15/29, 1/2}
sage: x = -1/8;  (a*x+b)/(c*x+d)
15/29
sage: x = 0;  (a*x+b)/(c*x+d)
1/2
sage: s = ModularSymbols(11,4).1.modular_symbol_rep()[0][1]; s
X^2*{-1/6, 0}
sage: s.apply([a,b,c,d])
16*X^2*{11/21, 1/2} - 16*X*Y*{11/21, 1/2} + 4*Y^2*{11/21, 1/2}
sage: P = s.polynomial_part()
sage: X, Y = P.parent().gens()
sage: P(d*X-b*Y, -c*X+a*Y)
16*X^2 - 16*X*Y + 4*Y^2
sage: x = -1/6; (a*x+b)/(c*x+d)
11/21
sage: x = 0; (a*x+b)/(c*x+d)
1/2
sage: type(s.apply([a,b,c,d]))
<class 'sage.structure.formal_sum.FormalSum'>

>>> from sage.all import *
>>> s = ModularSymbols(Integer(11),Integer(2)).gen(1).modular_symbol_rep()[Integer(0)][Integer(1)]; s
{-1/8, 0}
>>> a = Integer(1); b = Integer(2); c = Integer(3); d = Integer(4); s.apply([a,b,c,d])
{15/29, 1/2}
>>> x = -Integer(1)/Integer(8);  (a*x+b)/(c*x+d)
15/29
>>> x = Integer(0);  (a*x+b)/(c*x+d)
1/2
>>> s = ModularSymbols(Integer(11),Integer(4)).gen(1).modular_symbol_rep()[Integer(0)][Integer(1)]; s
X^2*{-1/6, 0}
>>> s.apply([a,b,c,d])
16*X^2*{11/21, 1/2} - 16*X*Y*{11/21, 1/2} + 4*Y^2*{11/21, 1/2}
>>> P = s.polynomial_part()
>>> X, Y = P.parent().gens()
>>> P(d*X-b*Y, -c*X+a*Y)
16*X^2 - 16*X*Y + 4*Y^2
>>> x = -Integer(1)/Integer(6); (a*x+b)/(c*x+d)
11/21
>>> x = Integer(0); (a*x+b)/(c*x+d)
1/2
>>> type(s.apply([a,b,c,d]))
<class 'sage.structure.formal_sum.FormalSum'>

beta()[source]#

For a symbol of the form $$X^i Y^{k-2-i}\{\alpha, \beta\}$$, return $$\beta$$.

EXAMPLES:

sage: s = ModularSymbols(11,4).1.modular_symbol_rep()[0][1]; s
X^2*{-1/6, 0}
sage: s.beta()
0
sage: type(s.beta())
<class 'sage.modular.cusps.Cusp'>

>>> from sage.all import *
>>> s = ModularSymbols(Integer(11),Integer(4)).gen(1).modular_symbol_rep()[Integer(0)][Integer(1)]; s
X^2*{-1/6, 0}
>>> s.beta()
0
>>> type(s.beta())
<class 'sage.modular.cusps.Cusp'>

i()[source]#

For a symbol of the form $$X^i Y^{k-2-i}\{\alpha, \beta\}$$, return $$i$$.

EXAMPLES:

sage: s = ModularSymbols(11).2.modular_symbol_rep()[0][1]
sage: s.i()
0
sage: s = ModularSymbols(1,28).0.modular_symbol_rep()[0][1]; s
X^22*Y^4*{0, Infinity}
sage: s.i()
22

>>> from sage.all import *
>>> s = ModularSymbols(Integer(11)).gen(2).modular_symbol_rep()[Integer(0)][Integer(1)]
>>> s.i()
0
>>> s = ModularSymbols(Integer(1),Integer(28)).gen(0).modular_symbol_rep()[Integer(0)][Integer(1)]; s
X^22*Y^4*{0, Infinity}
>>> s.i()
22

manin_symbol_rep()[source]#

Return a representation of self as a formal sum of Manin symbols.

The result is not cached.

EXAMPLES:

sage: M = ModularSymbols(11,4)
sage: s = M.1.modular_symbol_rep()[0][1]; s
X^2*{-1/6, 0}
sage: s.manin_symbol_rep()
-2*[X*Y,(-1,0)] - [X^2,(-1,0)] - [Y^2,(1,1)] - [X^2,(-6,1)]
sage: M(s.manin_symbol_rep()) == M([2,-1/6,0])
True

>>> from sage.all import *
>>> M = ModularSymbols(Integer(11),Integer(4))
>>> s = M.gen(1).modular_symbol_rep()[Integer(0)][Integer(1)]; s
X^2*{-1/6, 0}
>>> s.manin_symbol_rep()
-2*[X*Y,(-1,0)] - [X^2,(-1,0)] - [Y^2,(1,1)] - [X^2,(-6,1)]
>>> M(s.manin_symbol_rep()) == M([Integer(2),-Integer(1)/Integer(6),Integer(0)])
True

polynomial_part()[source]#

Return the polynomial part of this symbol, i.e. for a symbol of the form $$X^i Y^{k-2-i}\{\alpha, \beta\}$$, return $$X^i Y^{k-2-i}$$.

EXAMPLES:

sage: s = ModularSymbols(11).2.modular_symbol_rep()[0][1]
sage: s.polynomial_part()
1
sage: s = ModularSymbols(1,28).0.modular_symbol_rep()[0][1]; s
X^22*Y^4*{0, Infinity}
sage: s.polynomial_part()
X^22*Y^4

>>> from sage.all import *
>>> s = ModularSymbols(Integer(11)).gen(2).modular_symbol_rep()[Integer(0)][Integer(1)]
>>> s.polynomial_part()
1
>>> s = ModularSymbols(Integer(1),Integer(28)).gen(0).modular_symbol_rep()[Integer(0)][Integer(1)]; s
X^22*Y^4*{0, Infinity}
>>> s.polynomial_part()
X^22*Y^4

space()[source]#

The list of Manin symbols to which this symbol belongs.

EXAMPLES:

sage: s = ModularSymbols(11).2.modular_symbol_rep()[0][1]
sage: s.space()
Manin Symbol List of weight 2 for Gamma0(11)

>>> from sage.all import *
>>> s = ModularSymbols(Integer(11)).gen(2).modular_symbol_rep()[Integer(0)][Integer(1)]
>>> s.space()
Manin Symbol List of weight 2 for Gamma0(11)

weight()[source]#

Return the weight of the modular symbols space to which this symbol belongs; i.e. for a symbol of the form $$X^i Y^{k-2-i}\{\alpha, \beta\}$$, return $$k$$.

EXAMPLES:

sage: s = ModularSymbols(1,28).0.modular_symbol_rep()[0][1]
sage: s.weight()
28

>>> from sage.all import *
>>> s = ModularSymbols(Integer(1),Integer(28)).gen(0).modular_symbol_rep()[Integer(0)][Integer(1)]
>>> s.weight()
28