Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/sage/modular/abvar/abvar.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Base class for modular abelian varieties

Expand Down Expand Up @@ -317,7 +317,7 @@ def base_extend(self, K):

sage: A = J0(37); A
Abelian variety J0(37) of dimension 2
sage: A.base_extend(QQbar)
sage: A.base_extend(QQbar) # needs sage.rings.number_field
Abelian variety J0(37) over Algebraic Field of dimension 2
sage: A.base_extend(GF(7))
Abelian variety J0(37) over Finite Field of size 7 of dimension 2
Expand Down
1 change: 1 addition & 0 deletions src/sage/modular/abvar/abvar_newform.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: needs sage.libs.pari
"""
Abelian varieties attached to newforms

Expand Down
73 changes: 48 additions & 25 deletions src/sage/modular/abvar/finite_subgroup.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: needs sage.libs.pari
r"""
Finite subgroups of modular abelian varieties

Expand Down Expand Up @@ -178,7 +179,8 @@ def lattice(self):
EXAMPLES::

sage: J = J0(33); C = J[0].cuspidal_subgroup(); C
Finite subgroup with invariants [5] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
Finite subgroup with invariants [5] over QQ of
Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
sage: C.lattice()
Free module of degree 6 and rank 2 over Integer Ring
Echelon basis matrix:
Expand All @@ -197,7 +199,8 @@ def _relative_basis_matrix(self):
sage: A = J0(43)[1]; A
Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43)
sage: C = A.cuspidal_subgroup(); C
Finite subgroup with invariants [7] over QQ of Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43)
Finite subgroup with invariants [7] over QQ of
Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43)
sage: C._relative_basis_matrix()
[ 1 0 0 0]
[ 0 1/7 6/7 5/7]
Expand Down Expand Up @@ -262,7 +265,7 @@ def __richcmp__(self, other, op):

def is_subgroup(self, other):
"""
Return True exactly if self is a subgroup of other, and both are
Return ``True`` exactly if ``self`` is a subgroup of ``other``, and both are
defined as subgroups of the same ambient abelian variety.

EXAMPLES::
Expand Down Expand Up @@ -302,8 +305,9 @@ def __add__(self, other):

An example where the parent abelian varieties are different::

A = J0(48); A[0].cuspidal_subgroup() + A[1].cuspidal_subgroup()
Finite subgroup with invariants [2, 4, 4] over QQ of Abelian subvariety of dimension 2 of J0(48)
sage: A = J0(48); A[0].cuspidal_subgroup() + A[1].cuspidal_subgroup()
Finite subgroup with invariants [2, 4, 4] over QQ of
Abelian subvariety of dimension 2 of J0(48)
"""
if not isinstance(other, FiniteSubgroup):
raise TypeError("only addition of two finite subgroups is defined")
Expand All @@ -330,7 +334,8 @@ def exponent(self):

sage: t = J0(33).hecke_operator(7)
sage: G = t.kernel()[0]; G
Finite subgroup with invariants [2, 2, 2, 2, 4, 4] over QQ of Abelian variety J0(33) of dimension 3
Finite subgroup with invariants [2, 2, 2, 2, 4, 4] over QQ of
Abelian variety J0(33) of dimension 3
sage: G.exponent()
4
"""
Expand All @@ -343,7 +348,7 @@ def exponent(self):

def intersection(self, other):
"""
Return the intersection of the finite subgroups self and other.
Return the intersection of the finite subgroups ``self`` and ``other``.

INPUT:

Expand All @@ -358,12 +363,15 @@ def intersection(self, other):
sage: E11a0, E11a1, B = J0(33)
sage: G = E11a0.torsion_subgroup(6); H = E11a0.torsion_subgroup(9)
sage: G.intersection(H)
Finite subgroup with invariants [3, 3] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
Finite subgroup with invariants [3, 3] over QQ of
Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
sage: W = E11a1.torsion_subgroup(15)
sage: G.intersection(W)
Finite subgroup with invariants [] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
Finite subgroup with invariants [] over QQ of
Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
sage: E11a0.intersection(E11a1)[0]
Finite subgroup with invariants [5] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
Finite subgroup with invariants [5] over QQ of
Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)

We intersect subgroups of different abelian varieties.

Expand All @@ -372,27 +380,35 @@ def intersection(self, other):
sage: E11a0, E11a1, B = J0(33)
sage: G = E11a0.torsion_subgroup(5); H = E11a1.torsion_subgroup(5)
sage: G.intersection(H)
Finite subgroup with invariants [5] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
Finite subgroup with invariants [5] over QQ of
Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
sage: E11a0.intersection(E11a1)[0]
Finite subgroup with invariants [5] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
Finite subgroup with invariants [5] over QQ of
Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)

We intersect abelian varieties with subgroups::

sage: t = J0(33).hecke_operator(7)
sage: G = t.kernel()[0]; G
Finite subgroup with invariants [2, 2, 2, 2, 4, 4] over QQ of Abelian variety J0(33) of dimension 3
Finite subgroup with invariants [2, 2, 2, 2, 4, 4] over QQ of
Abelian variety J0(33) of dimension 3
sage: A = J0(33).old_subvariety()
sage: A.intersection(G)
Finite subgroup with invariants [2, 2, 2, 2] over QQ of Abelian subvariety of dimension 2 of J0(33)
Finite subgroup with invariants [2, 2, 2, 2] over QQ of
Abelian subvariety of dimension 2 of J0(33)
sage: A.hecke_operator(7).kernel()[0]
Finite subgroup with invariants [2, 2, 2, 2] over QQ of Abelian subvariety of dimension 2 of J0(33)
Finite subgroup with invariants [2, 2, 2, 2] over QQ of
Abelian subvariety of dimension 2 of J0(33)
sage: B = J0(33).new_subvariety()
sage: B.intersection(G)
Finite subgroup with invariants [4, 4] over QQ of Abelian subvariety of dimension 1 of J0(33)
Finite subgroup with invariants [4, 4] over QQ of
Abelian subvariety of dimension 1 of J0(33)
sage: B.hecke_operator(7).kernel()[0]
Finite subgroup with invariants [4, 4] over QQ of Abelian subvariety of dimension 1 of J0(33)
Finite subgroup with invariants [4, 4] over QQ of
Abelian subvariety of dimension 1 of J0(33)
sage: A.intersection(B)[0]
Finite subgroup with invariants [3, 3] over QQ of Abelian subvariety of dimension 2 of J0(33)
Finite subgroup with invariants [3, 3] over QQ of
Abelian subvariety of dimension 2 of J0(33)
"""
from .abvar import is_ModularAbelianVariety
A = self.abelian_variety()
Expand Down Expand Up @@ -736,13 +752,15 @@ def subgroup(self, gens):

sage: J = J0(23)
sage: G = J.torsion_subgroup(11); G
Finite subgroup with invariants [11, 11, 11, 11] over QQ of Abelian variety J0(23) of dimension 2
Finite subgroup with invariants [11, 11, 11, 11] over QQ of
Abelian variety J0(23) of dimension 2

We create the subgroup of the 11-torsion subgroup of `J_0(23)`
generated by the first `11`-torsion point::

sage: H = G.subgroup([G.0]); H
Finite subgroup with invariants [11] over QQbar of Abelian variety J0(23) of dimension 2
Finite subgroup with invariants [11] over QQbar of
Abelian variety J0(23) of dimension 2
sage: H.invariants()
[11]

Expand Down Expand Up @@ -773,7 +791,8 @@ def invariants(self):

sage: J = J0(38)
sage: C = J.cuspidal_subgroup(); C
Finite subgroup with invariants [3, 45] over QQ of Abelian variety J0(38) of dimension 4
Finite subgroup with invariants [3, 45] over QQ of
Abelian variety J0(38) of dimension 4
sage: v = C.invariants(); v
[3, 45]
sage: v[0] = 5
Expand All @@ -786,12 +805,14 @@ def invariants(self):
::

sage: C * 3
Finite subgroup with invariants [15] over QQ of Abelian variety J0(38) of dimension 4
Finite subgroup with invariants [15] over QQ of
Abelian variety J0(38) of dimension 4

An example involving another cuspidal subgroup::

sage: C = J0(22).cuspidal_subgroup(); C
Finite subgroup with invariants [5, 5] over QQ of Abelian variety J0(22) of dimension 2
Finite subgroup with invariants [5, 5] over QQ of
Abelian variety J0(22) of dimension 2
sage: C.lattice()
Free module of degree 4 and rank 4 over Integer Ring
Echelon basis matrix:
Expand Down Expand Up @@ -843,7 +864,8 @@ def __init__(self, abvar, lattice, field_of_definition=None, check=True):

sage: J = J0(11)
sage: G = J.finite_subgroup([[1/3,0], [0,1/5]]); G
Finite subgroup with invariants [15] over QQbar of Abelian variety J0(11) of dimension 1
Finite subgroup with invariants [15] over QQbar of
Abelian variety J0(11) of dimension 1
"""
if field_of_definition is None:
from sage.rings.qqbar import QQbar as field_of_definition
Expand All @@ -868,7 +890,8 @@ def lattice(self):

sage: J = J0(11)
sage: G = J.finite_subgroup([[1/3,0], [0,1/5]]); G
Finite subgroup with invariants [15] over QQbar of Abelian variety J0(11) of dimension 1
Finite subgroup with invariants [15] over QQbar of
Abelian variety J0(11) of dimension 1
sage: G.lattice()
Free module of degree 2 and rank 2 over Integer Ring
Echelon basis matrix:
Expand Down
18 changes: 12 additions & 6 deletions src/sage/modular/abvar/homology.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: needs sage.libs.flint sage.libs.pari
r"""
Homology of modular abelian varieties

Expand Down Expand Up @@ -37,7 +38,8 @@
[-4 0]
[ 0 -4]
sage: a.T(7)
Hecke operator T_7 on Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3
Hecke operator T_7 on
Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3
"""

# ****************************************************************************
Expand Down Expand Up @@ -272,7 +274,8 @@ def hecke_matrix(self, n):

sage: J = J0(23)
sage: J.homology(QQ[I]).hecke_matrix(3).parent()
Full MatrixSpace of 4 by 4 dense matrices over Number Field in I with defining polynomial x^2 + 1 with I = 1*I
Full MatrixSpace of 4 by 4 dense matrices over
Number Field in I with defining polynomial x^2 + 1 with I = 1*I
"""
raise NotImplementedError

Expand Down Expand Up @@ -694,16 +697,19 @@ def hecke_bound(self):

def hecke_matrix(self, n):
"""
Return the matrix of the n-th Hecke operator acting on this
Return the matrix of the `n`-th Hecke operator acting on this
homology group.

EXAMPLES::

sage: d = J0(125).homology(GF(17)).decomposition(2); d
[
Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
Submodule of rank 8 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8
Submodule of rank 4 of Homology with coefficients in Finite Field of size 17
of Abelian variety J0(125) of dimension 8,
Submodule of rank 4 of Homology with coefficients in Finite Field of size 17
of Abelian variety J0(125) of dimension 8,
Submodule of rank 8 of Homology with coefficients in Finite Field of size 17
of Abelian variety J0(125) of dimension 8
]
sage: t = d[0].hecke_matrix(17); t
[16 15 15 0]
Expand Down
7 changes: 5 additions & 2 deletions src/sage/modular/abvar/homspace.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: needs sage.libs.flint sage.libs.pari
"""
Spaces of homomorphisms between modular abelian varieties

Expand All @@ -16,7 +17,8 @@
Simple abelian subvariety 37b(1,37) of dimension 1 of J0(37)
]
sage: D[0].intersection(D[1])
(Finite subgroup with invariants [2, 2] over QQ of Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37),
(Finite subgroup with invariants [2, 2] over QQ of
Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37),
Simple abelian subvariety of dimension 0 of J0(37))

As an abstract product, since these newforms are distinct, the
Expand Down Expand Up @@ -218,7 +220,8 @@ def __init__(self, domain, codomain, cat):
EXAMPLES::

sage: H = Hom(J0(11), J0(22)); H
Space of homomorphisms from Abelian variety J0(11) of dimension 1 to Abelian variety J0(22) of dimension 2
Space of homomorphisms from Abelian variety J0(11) of dimension 1
to Abelian variety J0(22) of dimension 2
sage: Hom(J0(11), J0(11))
Endomorphism ring of Abelian variety J0(11) of dimension 1
sage: type(H)
Expand Down
15 changes: 8 additions & 7 deletions src/sage/modular/abvar/lseries.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: needs sage.libs.flint
"""
`L`-series of modular abelian varieties

Expand Down Expand Up @@ -99,29 +100,29 @@ def __call__(self, s, prec=53):
EXAMPLES::

sage: L = J0(23).lseries()
sage: L(1)
sage: L(1) # needs sage.symbolic
0.248431866590600
sage: L(1, prec=100)
sage: L(1, prec=100) # needs sage.symbolic
0.24843186659059968120725033931

sage: L = J0(389)[0].lseries()
sage: L(1) # long time (2s) abstol 1e-10
sage: L(1) # abstol 1e-10 # long time (2s), needs sage.symbolic
-1.33139759782370e-19
sage: L(1, prec=100) # long time (2s) abstol 1e-20
sage: L(1, prec=100) # abstol 1e-20 # long time (2s), needs sage.symbolic
6.0129758648142797032650287762e-39
sage: L.rational_part()
0

sage: L = J1(23)[0].lseries()
sage: L(1)
sage: L(1) # needs sage.symbolic
0.248431866590600

sage: J = J0(11) * J1(11)
sage: J.lseries()(1)
sage: J.lseries()(1) # needs sage.symbolic
0.0644356903227915

sage: L = JH(17,[2]).lseries()
sage: L(1)
sage: L(1) # needs sage.symbolic
0.386769938387780

"""
Expand Down
1 change: 1 addition & 0 deletions src/sage/modular/abvar/morphism.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: needs sage.libs.flint
r"""
Hecke operators and morphisms between modular abelian varieties

Expand Down
14 changes: 9 additions & 5 deletions src/sage/modular/abvar/torsion_point.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# sage.doctest: needs sage.rings.number_field
"""
Torsion points on modular abelian varieties

Expand Down Expand Up @@ -30,10 +31,10 @@ class TorsionPoint(ModuleElement):
- ``parent`` -- a finite subgroup of a modular abelian variety

- ``element`` -- a `\QQ`-vector space element that represents
this element in terms of the ambient rational homology
this element in terms of the ambient rational homology

- ``check`` -- bool (default: ``True``): whether to check that
element is in the appropriate vector space
element is in the appropriate vector space

EXAMPLES:

Expand Down Expand Up @@ -78,7 +79,8 @@ def element(self):

sage: J = J0(11)
sage: G = J.finite_subgroup([[1/3,0], [0,1/5]]); G
Finite subgroup with invariants [15] over QQbar of Abelian variety J0(11) of dimension 1
Finite subgroup with invariants [15] over QQbar of
Abelian variety J0(11) of dimension 1
sage: G.0.element()
(1/3, 0)

Expand Down Expand Up @@ -194,7 +196,7 @@ def _richcmp_(self, right, op):
INPUT:

- ``self, right`` -- elements of the same finite abelian
variety subgroup.
variety subgroup.

- ``op`` -- comparison operator (see :mod:`sage.structure.richcmp`)

Expand Down Expand Up @@ -255,10 +257,12 @@ def _relative_element(self):

EXAMPLES::

sage: # needs sage.libs.flint
sage: A = J0(43)[1]; A
Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43)
sage: C = A.cuspidal_subgroup(); C
Finite subgroup with invariants [7] over QQ of Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43)
Finite subgroup with invariants [7] over QQ of
Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43)
sage: x = C.0; x
[(0, 1/7, 0, 6/7, 0, 5/7)]
sage: x._relative_element()
Expand Down
Loading