Manin symbols#

This module defines the class ManinSymbol. A Manin symbol of weight \(k\), level \(N\) has the form \([P(X,Y),(u:v)]\) where \(P(X,Y)\in\ZZ[X,Y]\) is homogeneous of weight \(k-2\) and \((u:v)\in\mathbb{P}^1(\ZZ/N\ZZ).\) The ManinSymbol class holds a “monomial Manin symbol” of the simpler form \([X^iY^{k-2-i},(u:v)]\), which is stored as a triple \((i,u,v)\); the weight and level are obtained from the parent structure, which is a sage.modular.modsym.manin_symbol_list.ManinSymbolList.

Integer matrices \([a,b;c,d]\) act on Manin symbols on the right, sending \([P(X,Y),(u,v)]\) to \([P(aX+bY,cX+dY),(u,v)g]\). Diagonal matrices (with \(b=c=0\), such as \(I=[-1,0;0,1]\) and \(J=[-1,0;0,-1]\)) and anti-diagonal matrices (with \(a=d=0\), such as \(S=[0,-1;1,0]\)) map monomial Manin symbols to monomial Manin symbols, up to a scalar factor. For general matrices (such as \(T=[0,1,-1,-1]\) and \(T^2=[-1,-1;0,1]\)) the image of a monomial Manin symbol is expressed as a formal sum of monomial Manin symbols, with integer coefficients.

class sage.modular.modsym.manin_symbol.ManinSymbol[source]#

Bases: Element

A Manin symbol \([X^i Y^{k-2-i}, (u, v)]\).

INPUT:

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,2)
sage: s = ManinSymbol(m,(2,2,3)); s
(2,3)
sage: s == loads(dumps(s))
True
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(2))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3))); s
(2,3)
>>> s == loads(dumps(s))
True
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3)); s
[X^2*Y^4,(2,3)]
>>> from sage.all import *
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3))); s
[X^2*Y^4,(2,3)]
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3))
sage: s.parent()
Manin Symbol List of weight 8 for Gamma0(5)
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3)))
>>> s.parent()
Manin Symbol List of weight 8 for Gamma0(5)
apply(a, b, c, d)[source]#

Return the image of self under the matrix \([a,b;c,d]\).

Not implemented for raw ManinSymbol objects, only for members of ManinSymbolLists.

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,2)
sage: m.apply(10,[1,0,0,1]) # not implemented for base class
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(2))
>>> m.apply(Integer(10),[Integer(1),Integer(0),Integer(0),Integer(1)]) # not implemented for base class
endpoints(N=None)[source]#

Return cusps \(alpha\), \(beta\) such that this Manin symbol, viewed as a symbol for level \(N\), is \(X^i*Y^{k-2-i} \{alpha, beta\}\).

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3)); s
[X^2*Y^4,(2,3)]
sage: s.endpoints()
(1/3, 1/2)
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3))); s
[X^2*Y^4,(2,3)]
>>> s.endpoints()
(1/3, 1/2)
i[source]#
level()[source]#

Return the level of this Manin symbol.

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3))
sage: s.level()
5
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3)))
>>> s.level()
5
lift_to_sl2z(N=None)[source]#

Return a lift of this Manin symbol to \(SL_2(\ZZ)\).

If this Manin symbol is \((c,d)\) and \(N\) is its level, this function returns a list \([a,b, c',d']\) that defines a 2x2 matrix with determinant 1 and integer entries, such that \(c=c'\) (mod \(N\)) and \(d=d'\) (mod \(N\)).

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3))
sage: s
[X^2*Y^4,(2,3)]
sage: s.lift_to_sl2z()
[1, 1, 2, 3]
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3)))
>>> s
[X^2*Y^4,(2,3)]
>>> s.lift_to_sl2z()
[1, 1, 2, 3]
modular_symbol_rep()[source]#

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

The result is not cached.

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3))
sage: s.modular_symbol_rep()
 144*X^6*{1/3, 1/2} - 384*X^5*Y*{1/3, 1/2} + 424*X^4*Y^2*{1/3, 1/2} - 248*X^3*Y^3*{1/3, 1/2} + 81*X^2*Y^4*{1/3, 1/2} - 14*X*Y^5*{1/3, 1/2} + Y^6*{1/3, 1/2}
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3)))
>>> s.modular_symbol_rep()
 144*X^6*{1/3, 1/2} - 384*X^5*Y*{1/3, 1/2} + 424*X^4*Y^2*{1/3, 1/2} - 248*X^3*Y^3*{1/3, 1/2} + 81*X^2*Y^4*{1/3, 1/2} - 14*X*Y^5*{1/3, 1/2} + Y^6*{1/3, 1/2}
tuple()[source]#

Return the 3-tuple \((i,u,v)\) of this Manin symbol.

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3))
sage: s.tuple()
(2, 2, 3)
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3)))
>>> s.tuple()
(2, 2, 3)
u[source]#
v[source]#
weight()[source]#

Return the weight of this Manin symbol.

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(5,8)
sage: s = ManinSymbol(m,(2,2,3))
sage: s.weight()
8
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(5),Integer(8))
>>> s = ManinSymbol(m,(Integer(2),Integer(2),Integer(3)))
>>> s.weight()
8
sage.modular.modsym.manin_symbol.is_ManinSymbol(x)[source]#

Return True if x is a ManinSymbol.

EXAMPLES:

sage: from sage.modular.modsym.manin_symbol import ManinSymbol, is_ManinSymbol
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
sage: m = ManinSymbolList_gamma0(6, 4)
sage: s = ManinSymbol(m, m.symbol_list()[3])
sage: s
[Y^2,(1,2)]
sage: is_ManinSymbol(s)
doctest:warning...
DeprecationWarning: The function is_ManinSymbol is deprecated;
use 'isinstance(..., ManinSymbol)' instead.
See https://github.com/sagemath/sage/issues/38184 for details.
True
sage: is_ManinSymbol(m[3])
True
>>> from sage.all import *
>>> from sage.modular.modsym.manin_symbol import ManinSymbol, is_ManinSymbol
>>> from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
>>> m = ManinSymbolList_gamma0(Integer(6), Integer(4))
>>> s = ManinSymbol(m, m.symbol_list()[Integer(3)])
>>> s
[Y^2,(1,2)]
>>> is_ManinSymbol(s)
doctest:warning...
DeprecationWarning: The function is_ManinSymbol is deprecated;
use 'isinstance(..., ManinSymbol)' instead.
See https://github.com/sagemath/sage/issues/38184 for details.
True
>>> is_ManinSymbol(m[Integer(3)])
True