Hecke operators and morphisms between modular abelian varieties¶
Sage can compute with Hecke operators on modular abelian varieties. A Hecke operator is defined by given a modular abelian variety and an index. Given a Hecke operator, Sage can compute the characteristic polynomial, and the action of the Hecke operator on various homology groups.
AUTHORS:
- William Stein (2007-03) 
- Craig Citro (2008-03) 
EXAMPLES:
sage: A = J0(54)
sage: t5 = A.hecke_operator(5); t5
Hecke operator T_5 on Abelian variety J0(54) of dimension 4
sage: t5.charpoly().factor()
(x - 3) * (x + 3) * x^2
sage: B = A.new_subvariety(); B
Abelian subvariety of dimension 2 of J0(54)
sage: t5 = B.hecke_operator(5); t5
Hecke operator T_5 on Abelian subvariety of dimension 2 of J0(54)
sage: t5.charpoly().factor()
(x - 3) * (x + 3)
sage: t5.action_on_homology().matrix()
[ 0  3  3 -3]
[-3  3  3  0]
[ 3  3  0 -3]
[-3  6  3 -3]
>>> from sage.all import *
>>> A = J0(Integer(54))
>>> t5 = A.hecke_operator(Integer(5)); t5
Hecke operator T_5 on Abelian variety J0(54) of dimension 4
>>> t5.charpoly().factor()
(x - 3) * (x + 3) * x^2
>>> B = A.new_subvariety(); B
Abelian subvariety of dimension 2 of J0(54)
>>> t5 = B.hecke_operator(Integer(5)); t5
Hecke operator T_5 on Abelian subvariety of dimension 2 of J0(54)
>>> t5.charpoly().factor()
(x - 3) * (x + 3)
>>> t5.action_on_homology().matrix()
[ 0  3  3 -3]
[-3  3  3  0]
[ 3  3  0 -3]
[-3  6  3 -3]
- class sage.modular.abvar.morphism.DegeneracyMap(parent, A, t, side='left')[source]¶
- Bases: - Morphism- Create the degeneracy map of index t in parent defined by the matrix A. - INPUT: - parent– a space of homomorphisms of abelian varieties
- A– a matrix defining self
- t– list of indices defining the degeneracy map
 - EXAMPLES: - sage: J0(44).degeneracy_map(11,2) Degeneracy map from Abelian variety J0(44) of dimension 4 to Abelian variety J0(11) of dimension 1 defined by [2] sage: J0(44)[0].degeneracy_map(88,2) Degeneracy map from Simple abelian subvariety 11a(1,44) of dimension 1 of J0(44) to Abelian variety J0(88) of dimension 9 defined by [2] - >>> from sage.all import * >>> J0(Integer(44)).degeneracy_map(Integer(11),Integer(2)) Degeneracy map from Abelian variety J0(44) of dimension 4 to Abelian variety J0(11) of dimension 1 defined by [2] >>> J0(Integer(44))[Integer(0)].degeneracy_map(Integer(88),Integer(2)) Degeneracy map from Simple abelian subvariety 11a(1,44) of dimension 1 of J0(44) to Abelian variety J0(88) of dimension 9 defined by [2] - t()[source]¶
- Return the list of indices defining - self.- EXAMPLES: - sage: J0(22).degeneracy_map(44).t() [1] sage: J = J0(22) * J0(11) sage: J.degeneracy_map([44,44], [2,1]) Degeneracy map from Abelian variety J0(22) x J0(11) of dimension 3 to Abelian variety J0(44) x J0(44) of dimension 8 defined by [2, 1] sage: J.degeneracy_map([44,44], [2,1]).t() [2, 1] - >>> from sage.all import * >>> J0(Integer(22)).degeneracy_map(Integer(44)).t() [1] >>> J = J0(Integer(22)) * J0(Integer(11)) >>> J.degeneracy_map([Integer(44),Integer(44)], [Integer(2),Integer(1)]) Degeneracy map from Abelian variety J0(22) x J0(11) of dimension 3 to Abelian variety J0(44) x J0(44) of dimension 8 defined by [2, 1] >>> J.degeneracy_map([Integer(44),Integer(44)], [Integer(2),Integer(1)]).t() [2, 1] 
 
- class sage.modular.abvar.morphism.HeckeOperator(abvar, n, side='left')[source]¶
- Bases: - Morphism- A Hecke operator acting on a modular abelian variety. - action_on_homology(R=Integer Ring)[source]¶
- Return the action of this Hecke operator on the homology \(H_1(A; R)\) of this abelian variety with coefficients in \(R\). - EXAMPLES: - sage: A = J0(43) sage: t2 = A.hecke_operator(2); t2 Hecke operator T_2 on Abelian variety J0(43) of dimension 3 sage: h2 = t2.action_on_homology(); h2 Hecke operator T_2 on Integral Homology of Abelian variety J0(43) of dimension 3 sage: h2.matrix() [-2 1 0 0 0 0] [-1 1 1 0 -1 0] [-1 0 -1 2 -1 1] [-1 0 1 1 -1 1] [ 0 -2 0 2 -2 1] [ 0 -1 0 1 0 -1] sage: h2 = t2.action_on_homology(GF(2)); h2 Hecke operator T_2 on Homology with coefficients in Finite Field of size 2 of Abelian variety J0(43) of dimension 3 sage: h2.matrix() [0 1 0 0 0 0] [1 1 1 0 1 0] [1 0 1 0 1 1] [1 0 1 1 1 1] [0 0 0 0 0 1] [0 1 0 1 0 1] - >>> from sage.all import * >>> A = J0(Integer(43)) >>> t2 = A.hecke_operator(Integer(2)); t2 Hecke operator T_2 on Abelian variety J0(43) of dimension 3 >>> h2 = t2.action_on_homology(); h2 Hecke operator T_2 on Integral Homology of Abelian variety J0(43) of dimension 3 >>> h2.matrix() [-2 1 0 0 0 0] [-1 1 1 0 -1 0] [-1 0 -1 2 -1 1] [-1 0 1 1 -1 1] [ 0 -2 0 2 -2 1] [ 0 -1 0 1 0 -1] >>> h2 = t2.action_on_homology(GF(Integer(2))); h2 Hecke operator T_2 on Homology with coefficients in Finite Field of size 2 of Abelian variety J0(43) of dimension 3 >>> h2.matrix() [0 1 0 0 0 0] [1 1 1 0 1 0] [1 0 1 0 1 1] [1 0 1 1 1 1] [0 0 0 0 0 1] [0 1 0 1 0 1] 
 - characteristic_polynomial(var='x')[source]¶
- Return the characteristic polynomial of this Hecke operator in the given variable. - INPUT: - var– string (default:- 'x')
 - OUTPUT: a polynomial in var over the rational numbers - EXAMPLES: - sage: A = J0(43)[1]; A Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43) sage: t2 = A.hecke_operator(2); t2 Hecke operator T_2 on Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43) sage: f = t2.characteristic_polynomial(); f x^2 - 2 sage: f.parent() Univariate Polynomial Ring in x over Integer Ring sage: f.factor() x^2 - 2 sage: t2.characteristic_polynomial('y') y^2 - 2 - >>> from sage.all import * >>> A = J0(Integer(43))[Integer(1)]; A Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43) >>> t2 = A.hecke_operator(Integer(2)); t2 Hecke operator T_2 on Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43) >>> f = t2.characteristic_polynomial(); f x^2 - 2 >>> f.parent() Univariate Polynomial Ring in x over Integer Ring >>> f.factor() x^2 - 2 >>> t2.characteristic_polynomial('y') y^2 - 2 
 - charpoly(var='x')[source]¶
- Synonym for - self.characteristic_polynomial(var).- INPUT: - var– string (default:- 'x')
 - EXAMPLES: - sage: A = J1(13) sage: t2 = A.hecke_operator(2); t2 Hecke operator T_2 on Abelian variety J1(13) of dimension 2 sage: f = t2.charpoly(); f x^2 + 3*x + 3 sage: f.factor() x^2 + 3*x + 3 sage: t2.charpoly('y') y^2 + 3*y + 3 - >>> from sage.all import * >>> A = J1(Integer(13)) >>> t2 = A.hecke_operator(Integer(2)); t2 Hecke operator T_2 on Abelian variety J1(13) of dimension 2 >>> f = t2.charpoly(); f x^2 + 3*x + 3 >>> f.factor() x^2 + 3*x + 3 >>> t2.charpoly('y') y^2 + 3*y + 3 
 - fcp(var='x')[source]¶
- Return the factorization of the characteristic polynomial. - EXAMPLES: - sage: t2 = J0(33).hecke_operator(2) sage: t2.charpoly() x^3 + 3*x^2 - 4 sage: t2.fcp() (x - 1) * (x + 2)^2 - >>> from sage.all import * >>> t2 = J0(Integer(33)).hecke_operator(Integer(2)) >>> t2.charpoly() x^3 + 3*x^2 - 4 >>> t2.fcp() (x - 1) * (x + 2)^2 
 - index()[source]¶
- Return the index of this Hecke operator. (For example, if this is the operator \(T_n\), then the index is the integer \(n\).) - OUTPUT: - n– a (Sage) Integer
 - EXAMPLES: - sage: J = J0(15) sage: t = J.hecke_operator(53) sage: t Hecke operator T_53 on Abelian variety J0(15) of dimension 1 sage: t.index() 53 sage: t = J.hecke_operator(54) sage: t Hecke operator T_54 on Abelian variety J0(15) of dimension 1 sage: t.index() 54 - >>> from sage.all import * >>> J = J0(Integer(15)) >>> t = J.hecke_operator(Integer(53)) >>> t Hecke operator T_53 on Abelian variety J0(15) of dimension 1 >>> t.index() 53 >>> t = J.hecke_operator(Integer(54)) >>> t Hecke operator T_54 on Abelian variety J0(15) of dimension 1 >>> t.index() 54 - sage: J = J1(12345) sage: t = J.hecke_operator(997) ; t Hecke operator T_997 on Abelian variety J1(12345) of dimension 5405473 sage: t.index() 997 sage: type(t.index()) <class 'sage.rings.integer.Integer'> - >>> from sage.all import * >>> J = J1(Integer(12345)) >>> t = J.hecke_operator(Integer(997)) ; t Hecke operator T_997 on Abelian variety J1(12345) of dimension 5405473 >>> t.index() 997 >>> type(t.index()) <class 'sage.rings.integer.Integer'> 
 - matrix()[source]¶
- Return the matrix of - selfacting on the homology \(H_1(A, ZZ)\) of this abelian variety with coefficients in \(\ZZ\).- EXAMPLES: - sage: J0(47).hecke_operator(3).matrix() [ 0 0 1 -2 1 0 -1 0] [ 0 0 1 0 -1 0 0 0] [-1 2 0 0 2 -2 1 -1] [-2 1 1 -1 3 -1 -1 0] [-1 -1 1 0 1 0 -1 1] [-1 0 0 -1 2 0 -1 0] [-1 -1 2 -2 2 0 -1 0] [ 0 -1 0 0 1 0 -1 1] - >>> from sage.all import * >>> J0(Integer(47)).hecke_operator(Integer(3)).matrix() [ 0 0 1 -2 1 0 -1 0] [ 0 0 1 0 -1 0 0 0] [-1 2 0 0 2 -2 1 -1] [-2 1 1 -1 3 -1 -1 0] [-1 -1 1 0 1 0 -1 1] [-1 0 0 -1 2 0 -1 0] [-1 -1 2 -2 2 0 -1 0] [ 0 -1 0 0 1 0 -1 1] - sage: J0(11).hecke_operator(7).matrix() [-2 0] [ 0 -2] sage: (J0(11) * J0(33)).hecke_operator(7).matrix() [-2 0 0 0 0 0 0 0] [ 0 -2 0 0 0 0 0 0] [ 0 0 0 0 2 -2 2 -2] [ 0 0 0 -2 2 0 2 -2] [ 0 0 0 0 2 0 4 -4] [ 0 0 -4 0 2 2 2 -2] [ 0 0 -2 0 2 2 0 -2] [ 0 0 -2 0 0 2 0 -2] - >>> from sage.all import * >>> J0(Integer(11)).hecke_operator(Integer(7)).matrix() [-2 0] [ 0 -2] >>> (J0(Integer(11)) * J0(Integer(33))).hecke_operator(Integer(7)).matrix() [-2 0 0 0 0 0 0 0] [ 0 -2 0 0 0 0 0 0] [ 0 0 0 0 2 -2 2 -2] [ 0 0 0 -2 2 0 2 -2] [ 0 0 0 0 2 0 4 -4] [ 0 0 -4 0 2 2 2 -2] [ 0 0 -2 0 2 2 0 -2] [ 0 0 -2 0 0 2 0 -2] - sage: J0(23).hecke_operator(2).matrix() [ 0 1 -1 0] [ 0 1 -1 1] [-1 2 -2 1] [-1 1 0 -1] - >>> from sage.all import * >>> J0(Integer(23)).hecke_operator(Integer(2)).matrix() [ 0 1 -1 0] [ 0 1 -1 1] [-1 2 -2 1] [-1 1 0 -1] 
 
- class sage.modular.abvar.morphism.Morphism(parent, A, copy_matrix=True, side='left')[source]¶
- Bases: - Morphism_abstract,- MatrixMorphism- restrict_domain(sub)[source]¶
- Restrict - selfto the subvariety sub of- self.domain().- EXAMPLES: - sage: J = J0(37) ; A, B = J.decomposition() sage: A.lattice().matrix() [ 1 -1 1 0] [ 0 0 2 -1] sage: B.lattice().matrix() [1 1 1 0] [0 0 0 1] sage: T = J.hecke_operator(2) ; T.matrix() [-1 1 1 -1] [ 1 -1 1 0] [ 0 0 -2 1] [ 0 0 0 0] sage: T.restrict_domain(A) Abelian variety morphism: From: Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37) To: Abelian variety J0(37) of dimension 2 sage: T.restrict_domain(A).matrix() [-2 2 -2 0] [ 0 0 -4 2] sage: T.restrict_domain(B) Abelian variety morphism: From: Simple abelian subvariety 37b(1,37) of dimension 1 of J0(37) To: Abelian variety J0(37) of dimension 2 sage: T.restrict_domain(B).matrix() [0 0 0 0] [0 0 0 0] - >>> from sage.all import * >>> J = J0(Integer(37)) ; A, B = J.decomposition() >>> A.lattice().matrix() [ 1 -1 1 0] [ 0 0 2 -1] >>> B.lattice().matrix() [1 1 1 0] [0 0 0 1] >>> T = J.hecke_operator(Integer(2)) ; T.matrix() [-1 1 1 -1] [ 1 -1 1 0] [ 0 0 -2 1] [ 0 0 0 0] >>> T.restrict_domain(A) Abelian variety morphism: From: Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37) To: Abelian variety J0(37) of dimension 2 >>> T.restrict_domain(A).matrix() [-2 2 -2 0] [ 0 0 -4 2] >>> T.restrict_domain(B) Abelian variety morphism: From: Simple abelian subvariety 37b(1,37) of dimension 1 of J0(37) To: Abelian variety J0(37) of dimension 2 >>> T.restrict_domain(B).matrix() [0 0 0 0] [0 0 0 0] 
 
- class sage.modular.abvar.morphism.Morphism_abstract(parent, side='left')[source]¶
- Bases: - MatrixMorphism_abstract- A morphism between modular abelian varieties. - EXAMPLES: - sage: t = J0(11).hecke_operator(2) sage: from sage.modular.abvar.morphism import Morphism sage: isinstance(t, Morphism) True - >>> from sage.all import * >>> t = J0(Integer(11)).hecke_operator(Integer(2)) >>> from sage.modular.abvar.morphism import Morphism >>> isinstance(t, Morphism) True - cokernel()[source]¶
- Return the cokernel of - self.- OUTPUT: - A– an abelian variety (the cokernel)
- phi– a quotient map from- self.codomain()to the cokernel of self
 - EXAMPLES: - sage: t = J0(33).hecke_operator(2) sage: (t-1).cokernel() (Abelian subvariety of dimension 1 of J0(33), Abelian variety morphism: From: Abelian variety J0(33) of dimension 3 To: Abelian subvariety of dimension 1 of J0(33)) - >>> from sage.all import * >>> t = J0(Integer(33)).hecke_operator(Integer(2)) >>> (t-Integer(1)).cokernel() (Abelian subvariety of dimension 1 of J0(33), Abelian variety morphism: From: Abelian variety J0(33) of dimension 3 To: Abelian subvariety of dimension 1 of J0(33)) - Projection will always have cokernel zero. - sage: J0(37).projection(J0(37)[0]).cokernel() (Simple abelian subvariety of dimension 0 of J0(37), Abelian variety morphism: From: Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37) To: Simple abelian subvariety of dimension 0 of J0(37)) - >>> from sage.all import * >>> J0(Integer(37)).projection(J0(Integer(37))[Integer(0)]).cokernel() (Simple abelian subvariety of dimension 0 of J0(37), Abelian variety morphism: From: Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37) To: Simple abelian subvariety of dimension 0 of J0(37)) - Here we have a nontrivial cokernel of a Hecke operator, as the T_2-eigenvalue for the newform 37b is 0. - sage: J0(37).hecke_operator(2).cokernel() (Abelian subvariety of dimension 1 of J0(37), Abelian variety morphism: From: Abelian variety J0(37) of dimension 2 To: Abelian subvariety of dimension 1 of J0(37)) sage: AbelianVariety('37b').newform().q_expansion(5) q + q^3 - 2*q^4 + O(q^5) - >>> from sage.all import * >>> J0(Integer(37)).hecke_operator(Integer(2)).cokernel() (Abelian subvariety of dimension 1 of J0(37), Abelian variety morphism: From: Abelian variety J0(37) of dimension 2 To: Abelian subvariety of dimension 1 of J0(37)) >>> AbelianVariety('37b').newform().q_expansion(Integer(5)) q + q^3 - 2*q^4 + O(q^5) 
 - complementary_isogeny()[source]¶
- Return the complementary isogeny of - self.- EXAMPLES: - sage: J = J0(43) sage: A = J[1] sage: T5 = A.hecke_operator(5) sage: T5.is_isogeny() True sage: T5.complementary_isogeny() Abelian variety endomorphism of Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43) sage: (T5.complementary_isogeny() * T5).matrix() [2 0 0 0] [0 2 0 0] [0 0 2 0] [0 0 0 2] - >>> from sage.all import * >>> J = J0(Integer(43)) >>> A = J[Integer(1)] >>> T5 = A.hecke_operator(Integer(5)) >>> T5.is_isogeny() True >>> T5.complementary_isogeny() Abelian variety endomorphism of Simple abelian subvariety 43b(1,43) of dimension 2 of J0(43) >>> (T5.complementary_isogeny() * T5).matrix() [2 0 0 0] [0 2 0 0] [0 0 2 0] [0 0 0 2] 
 - factor_out_component_group()[source]¶
- View - selfas a morphism \(f:A \to B\). Then \(\ker(f)\) is an extension of an abelian variety \(C\) by a finite component group \(G\). This function constructs a morphism \(g\) with domain \(A\) and codomain Q isogenous to \(C\) such that \(\ker(g)\) is equal to \(C\).- OUTPUT: a morphism - EXAMPLES: - sage: A,B,C = J0(33) sage: pi = J0(33).projection(A) sage: pi.kernel() (Finite subgroup with invariants [5] over QQbar of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 2 of J0(33)) sage: psi = pi.factor_out_component_group() sage: psi.kernel() (Finite subgroup with invariants [] over QQbar of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 2 of J0(33)) - >>> from sage.all import * >>> A,B,C = J0(Integer(33)) >>> pi = J0(Integer(33)).projection(A) >>> pi.kernel() (Finite subgroup with invariants [5] over QQbar of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 2 of J0(33)) >>> psi = pi.factor_out_component_group() >>> psi.kernel() (Finite subgroup with invariants [] over QQbar of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 2 of J0(33)) - ALGORITHM: We compute a subgroup \(G\) of \(B\) so that the composition \(h: A\to B \to B/G\) has kernel that contains \(A[n]\) and component group isomorphic to \((\ZZ/n\ZZ)^{2d}\), where \(d\) is the dimension of \(A\). Then \(h\) factors through multiplication by \(n\), so there is a morphism \(g: A\to B/G\) such that \(g \circ [n] = h\). Then \(g\) is the desired morphism. We give more details below about how to transform this into linear algebra. 
 - image()[source]¶
- Return the image of this morphism. - OUTPUT: an abelian variety - EXAMPLES: We compute the image of projection onto a factor of \(J_0(33)\): - sage: A,B,C = J0(33) sage: A Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33) sage: f = J0(33).projection(A) sage: f.image() Abelian subvariety of dimension 1 of J0(33) sage: f.image() == A True - >>> from sage.all import * >>> A,B,C = J0(Integer(33)) >>> A Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33) >>> f = J0(Integer(33)).projection(A) >>> f.image() Abelian subvariety of dimension 1 of J0(33) >>> f.image() == A True - We compute the image of a Hecke operator: - sage: t2 = J0(33).hecke_operator(2); t2.fcp() (x - 1) * (x + 2)^2 sage: phi = t2 + 2 sage: phi.image() Abelian subvariety of dimension 1 of J0(33) - >>> from sage.all import * >>> t2 = J0(Integer(33)).hecke_operator(Integer(2)); t2.fcp() (x - 1) * (x + 2)^2 >>> phi = t2 + Integer(2) >>> phi.image() Abelian subvariety of dimension 1 of J0(33) - The sum of the image and the kernel is the whole space: - sage: phi.kernel()[1] + phi.image() == J0(33) True - >>> from sage.all import * >>> phi.kernel()[Integer(1)] + phi.image() == J0(Integer(33)) True 
 - is_isogeny()[source]¶
- Return - Trueif this morphism is an isogeny of abelian varieties.- EXAMPLES: - sage: J = J0(39) sage: Id = J.hecke_operator(1) sage: Id.is_isogeny() True sage: J.hecke_operator(19).is_isogeny() False - >>> from sage.all import * >>> J = J0(Integer(39)) >>> Id = J.hecke_operator(Integer(1)) >>> Id.is_isogeny() True >>> J.hecke_operator(Integer(19)).is_isogeny() False 
 - kernel()[source]¶
- Return the kernel of this morphism. - OUTPUT: - G– a finite group
- A– an abelian variety (identity component of the kernel)
 - EXAMPLES: We compute the kernel of a projection map. Notice that the kernel has a nontrivial abelian variety part. - sage: A, B, C = J0(33) sage: pi = J0(33).projection(B) sage: pi.kernel() (Finite subgroup with invariants [20] over QQbar of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 2 of J0(33)) - >>> from sage.all import * >>> A, B, C = J0(Integer(33)) >>> pi = J0(Integer(33)).projection(B) >>> pi.kernel() (Finite subgroup with invariants [20] over QQbar of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 2 of J0(33)) - We compute the kernels of some Hecke operators: - sage: t2 = J0(33).hecke_operator(2) sage: t2 Hecke operator T_2 on Abelian variety J0(33) of dimension 3 sage: t2.kernel() (Finite subgroup with invariants [2, 2, 2, 2] over QQ of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 0 of J0(33)) sage: t3 = J0(33).hecke_operator(3) sage: t3.kernel() (Finite subgroup with invariants [3, 3] over QQ of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 0 of J0(33)) - >>> from sage.all import * >>> t2 = J0(Integer(33)).hecke_operator(Integer(2)) >>> t2 Hecke operator T_2 on Abelian variety J0(33) of dimension 3 >>> t2.kernel() (Finite subgroup with invariants [2, 2, 2, 2] over QQ of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 0 of J0(33)) >>> t3 = J0(Integer(33)).hecke_operator(Integer(3)) >>> t3.kernel() (Finite subgroup with invariants [3, 3] over QQ of Abelian variety J0(33) of dimension 3, Abelian subvariety of dimension 0 of J0(33))