Package sage :: Package modular :: Package abvar :: Module abvar :: Class ModularAbelianVariety_abstract
[hide private]
[frames] | no frames]

Class ModularAbelianVariety_abstract

source code

                      object --+            
                               |            
structure.sage_object.SageObject --+        
                                   |        
             structure.parent.Parent --+    
                                       |    
    structure.parent_base.ParentWithBase --+
                                           |
                                          ModularAbelianVariety_abstract
Known Subclasses:
ModularAbelianVariety_modsym_abstract, ModularAbelianVariety

Instance Methods [hide private]
 
__init__(self, groups, base_field, is_simple=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., newform_level=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., isogeny_number=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., number=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., check=True)
Abstract base class for modular abelian varieties.
source code
 
groups(self)
Return an ordered tuple of the congruence subgroups that the ambient product Jacobian is attached to.
source code
 
lattice(self)
Return lattice in ambient cuspidal modular symbols product that defines this modular abelian variety.
source code
 
free_module(self)
Synonym for \code{self.lattice()}.
source code
 
vector_space(self)
Return vector space corresponding to the modular abelian variety.
source code
 
base_field(self)
Synonym for \code{self.base_ring()}.
source code
 
base_extend(self, K)
EXAMPLES:...
source code
 
__contains__(self, x)
Determine whether or not self contains x.
source code
 
__cmp__(self, other)
Compare two modular abelian varieties.
source code
 
__radd__(self, other)
Return other + self when other is 0.
source code
 
_repr_(self)
Return string representation of this modular abelian variety.
source code
 
label(self)
Return the label associated to this modular abelian variety.
source code
 
newform_label(self)
Return the label [level][isogeny class][group] of the newform $f$ such that this abelian variety is isogenous to the newform abelian variety $A_f$.
source code
 
_isogeny_to_newform_abelian_variety(self)
Return an isogeny from self to an abelian variety $A_f$ attached to a newform.
source code
 
_simple_isogeny(self, other)
Given self and other, if both are simple, and correspond to the same newform with the same congruence subgroup, return an isogeny.
source code
 
_Hom_(self, B, cat=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
INPUT:...
source code
 
in_same_ambient_variety(self, other)
Return True if self and other are abelian subvarieties of the same ambient product Jacobian.
source code
 
modular_kernel(self)
Return the modular kernel of this abelian variety, which is the kernel of the canonical polarization of self.
source code
 
modular_degree(self)
Return the modular degree of this abelian variety, which is the square root of the degree of the modular kernel.
source code
 
intersection(self, other)
Returns the intersection of self and other inside a common ambient Jacobian product.
source code
 
__add__(self, other)
Returns the sum of the \emph{images} of self and other inside the ambient Jacobian product.
source code
 
direct_product(self, other)
Compute the direct product of self and other.
source code
 
__pow__(self, n)
Return $n$th power of self.
source code
 
__mul__(self, other)
Compute the direct product of self and other.
source code
 
quotient(self, other)
Compute the quotient of self and other, where other is either an abelian subvariety of self or a finite subgroup of self.
source code
 
__div__(self, other)
Compute the quotient of self and other, where other is either an abelian subvariety of self or a finite subgroup of self.
source code
 
degeneracy_map(self, M_ls, t_ls)
Return the degeneracy map with domain self and given level/parameter.
source code
 
_quotient_by_finite_subgroup(self, G)
Return the quotient of self by the finite subgroup $G$.
source code
 
_quotient_by_abelian_subvariety(self, B)
Return the quotient of self by the abelian variety $B$.
source code
 
projection(self, A, check=True)
Given an abelian subvariety A of self, return a projection morphism from self to A.
source code
 
project_to_factor(self, n)
If self is an ambient product of Jacobians, return a projection from self to the nth such Jacobian.
source code
 
is_subvariety_of_ambient_jacobian(self)
Return True if self is (presented as) a subvariety of the ambient product Jacobian.
source code
 
ambient_variety(self)
Return the ambient modular abelian variety that contains this abelian variety.
source code
 
ambient_morphism(self)
Return the morphism from self to the ambient variety.
source code
 
is_ambient(self)
Return True if self equals the ambient product Jacobian.
source code
 
dimension(self)
Return the dimension of this abelian variety.
source code
 
rank(self)
Return the rank of the underlying lattice of self.
source code
 
degree(self)
Return the degree of this abelian variety, which is the dimension of the ambient Jacobian product.
source code
 
endomorphism_ring(self)
Return the endomorphism ring of self.
source code
 
sturm_bound(self)
Return a bound $B$ such that all Hecke operators $T_n$ for $n\leq B$ generate the Hecke algebra.
source code
 
is_hecke_stable(self)
Return True if self is stable under the Hecke operators of its ambient Jacobian.
source code
 
is_subvariety(self, other)
Return True if self is a subvariety of other as they sit in a common ambient modular Jacobian.
source code
 
change_ring(self, R)
Change the base ring of this modular abelian variety.
source code
 
category(self)
Return the category of modular abelian varieties that contains this modular abelian variety.
source code
 
level(self)
Return the level of this modular abelian variety, which is an integer N (usually minimal) such that this modular abelian variety is a quotient of $J_1(N)$.
source code
 
newform_level(self, none_if_not_known=False)
Write self as a product (up to isogeny) of newform abelian varieties $A_f$.
source code
 
zero_subvariety(self)
Return the zero subvariety of self.
source code
 
_ambient_repr(self)
OUTPUT:...
source code
 
_ambient_latex_repr(self)
Return Latex representation of the ambient product.
source code
 
_ambient_lattice(self)
Return free lattice of rank twice the degree of self.
source code
 
_ambient_modular_symbols_spaces(self)
Return a tuple of the ambient cuspidal modular symbols spaces that make up the Jacobian product that contains self.
source code
 
_ambient_modular_symbols_abvars(self)
Return a tuple of the ambient modular symbols abelian varieties that make up the Jacobian product that contains self.
source code
 
_ambient_dimension(self)
Return the dimension of the ambient Jacobian product.
source code
 
_ambient_hecke_matrix_on_modular_symbols(self, n)
Return block direct sum of the matrix of the Hecke operator $T_n$ acting on each of the ambient modular symbols spaces.
source code
 
_rational_homology_space(self)
Return the rational homology of this modular abelian variety.
source code
 
homology(self, base_ring=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
Return the homology of this modular abelian variety.
source code
 
integral_homology(self)
Return the integral homology of this modular abelian variety.
source code
 
rational_homology(self)
Return the rational homology of this modular abelian variety.
source code
 
lseries(self)
Return the complex $L$-series of this modular abelian variety.
source code
 
padic_lseries(self, p)
Return the $p$-adic $L$-series of this modular abelian variety.
source code
 
hecke_operator(self, n)
Return the $n$-th Hecke operator on the modular abelian variety, if this makes sense [[elaborate]].
source code
 
hecke_polynomial(self, n, var='x')
Return the characteristic polynomial of the $n$th Hecke operator $T_n$ acting on self.
source code
 
_compute_hecke_polynomial(self, n, var='x')
Return the Hecke polynomial of index $n$ in terms of the given variable.
source code
 
_integral_hecke_matrix(self, n)
Return the matrix of the Hecke operator $T_n$ acting on the integral homology of this modular abelian variety, if the modular abelian variety is stable under $T_n$.
source code
 
_rational_hecke_matrix(self, n)
Return the matrix of the Hecke operator $T_n$ acting on the rational homology $H_1(A,\Q)$ of this modular abelian variety, if this action is defined.
source code
 
qbar_torsion_subgroup(self)
Return the group of all points of finite order in the algebraic closure of this abelian variety.
source code
 
rational_torsion_subgroup(self)
Return the maximal torsion subgroup of self defined over QQ.
source code
 
cuspidal_subgroup(self)
Return the cuspidal subgroup of this modular abelian variety.
source code
 
_ambient_cuspidal_subgroup(self, rational_only=False)
EXAMPLES:...
source code
 
rational_cusp_subgroup(self)
Return the subgroup of this modular abelian variety generated by rational cusps.
source code
 
zero_subgroup(self)
Return the zero subgroup of this modular abelian variety, as a finite group.
source code
 
finite_subgroup(self, X, field_of_definition=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., check=True)
Return a finite subgroup of this modular abelian variety.
source code
 
torsion_subgroup(self, n)
If n is an integer, return the subgroup of points of order n.
source code
 
degen_t(self, none_if_not_known=False)
If this abelian variety is obtained via decomposition then it gets labeled with the newform label along with some information about degeneracy maps.
source code
 
isogeny_number(self, none_if_not_known=False)
Return the number (starting at 0) of the isogeny class of new simple abelian varieties that self is in.
source code
 
is_simple(self, none_if_not_known=False)
Return whether or not this modular abelian variety is simple, i.e., has no proper nonzero abelian subvarieties.
source code
 
decomposition(self, simple=True, bound=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
Return a sequence of abelian subvarieties of self that are all simple, have finite intersection and sum to self.
source code
 
_classify_ambient_factors(self, simple=True, bound=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
This function implements the following algorithm, which produces data useful in finding a decomposition or complement of self.
source code
 
_isogeny_to_product_of_simples(self)
Given an abelian variety $A$, return an isogeny $\phi: A \rightarrow B_1 \times \cdots \times B_n$, where each $B_i$ is simple.
source code
 
_isogeny_to_product_of_powers(self)
Given an abelian variety $A$, return an isogeny $\phi: A \rightarrow B_1 \times \cdots \times B_n$, where each $B_i$ is a power of a simple abelian variety.
source code
 
complement(self, A=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
Return a complement of this abelian variety.
source code
 
dual(self)
Return the dual of this abelian variety.
source code
 
_factors_with_same_label(self, other)
Given two modular abelian varieties self and other, this function returns a list of simple abelian subvarieties appearing in the decomposition of self that have the same newform labels.
source code
 
_complement_shares_no_factors_with_same_label(self)
Return True if no simple factor of self has the same newform_label as any factor in a Poincare complement of self in the ambient product Jacobian.
source code
 
__getitem__(self, i)
Return the i-th decomposition factor of self.
source code
 
__getslice__(self, i, j)
The slice i:j of decompositions of self.
source code

Inherited from structure.parent_base.ParentWithBase: Hom, __new__, base, base_extend_canonical, base_extend_canonical_sym, base_extend_recursive, base_ring

Inherited from structure.parent.Parent: _coerce_, coerce_map_from, coerce_map_from_impl, construction, get_action, get_action_impl, has_coerce_map_from, has_coerce_map_from_impl, init_coerce

Inherited from structure.sage_object.SageObject: __hash__, __repr__, _axiom_, _axiom_init_, _gap_, _gap_init_, _gp_, _gp_init_, _interface_, _interface_init_, _interface_is_cached_, _kash_, _kash_init_, _macaulay2_, _macaulay2_init_, _magma_, _magma_init_, _maple_, _maple_init_, _mathematica_, _mathematica_init_, _maxima_, _maxima_init_, _octave_, _octave_init_, _pari_, _pari_init_, _r_init_, _sage_, _singular_, _singular_init_, db, dump, dumps, plot, rename, reset_name, save, version

Inherited from object: __delattr__, __getattribute__, __reduce__, __reduce_ex__, __setattr__, __str__

Properties [hide private]

Inherited from structure.parent.Parent (private): _has_coerce_map_from

Inherited from object: __class__

Method Details [hide private]

__init__(self, groups, base_field, is_simple=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., newform_level=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., isogeny_number=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., number=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., check=True)
(Constructor)

source code 

Abstract base class for modular abelian varieties.

INPUT:
    groups -- a tuple of congruence subgroups
    base_field -- a field
    is_simple  -- bool; whether or not self is simple
    newform_level -- if self is isogeneous to a newform
              abelian variety, returns the level of that
              abelian variety
    isogeny_number -- which isogeny class the corresponding
              newform is in; this corresponds to the Cremona
              letter code
    number -- the t number of the degeneracy map that this
              abelian variety is the image under
    check -- whether to do some type checking on the defining
              data

EXAMPLES:
One should not create an instance of this class, but we do so
anyways here as an example.
    sage: A = sage.modular.abvar.abvar.ModularAbelianVariety_abstract((Gamma0(37),), QQ)
    sage: type(A)
    <class 'sage.modular.abvar.abvar.ModularAbelianVariety_abstract'>

All hell breaks loose if you try to do anything with $A$:
    sage: A
    Traceback (most recent call last):
    ...
    NotImplementedError: BUG -- lattice method must be defined in derived class

Overrides: structure.parent_base.ParentWithBase.__init__

groups(self)

source code 

Return an ordered tuple of the congruence subgroups that the
ambient product Jacobian is attached to.

Every modular abelian variety is a finite quotient of an
abelian subvariety of a product of modular Jacobians
$J_\Gamma$.  This function returns a tuple containing the
groups $\Gamma$.

EXAMPLES:
    sage: A = (J0(37) * J1(13))[0]; A
    Simple abelian subvariety 13aG1(1,13) of dimension 2 of J0(37) x J1(13)
    sage: A.groups()
    (Congruence Subgroup Gamma0(37), Congruence Subgroup Gamma1(13))

lattice(self)

source code 

Return lattice in ambient cuspidal modular symbols product
that defines this modular abelian variety.

This must be defined in each derived class.

OUTPUT:
    a free module over $\ZZ$

EXAMPLES:
    sage: A = sage.modular.abvar.abvar.ModularAbelianVariety_abstract((Gamma0(37),), QQ)
    sage: A
    Traceback (most recent call last):
    ...
    NotImplementedError: BUG -- lattice method must be defined in derived class

free_module(self)

source code 

Synonym for \code{self.lattice()}.

OUTPUT:
    a free module over $\ZZ$

EXAMPLES:
    sage: J0(37).free_module()
    Ambient free module of rank 4 over the principal ideal domain Integer Ring
    sage: J0(37)[0].free_module()
    Free module of degree 4 and rank 2 over Integer Ring
    Echelon basis matrix:
    [ 1 -1  1  0]
    [ 0  0  2 -1]

vector_space(self)

source code 

Return vector space corresponding to the modular abelian
variety.

This is the lattice tensored with $\QQ$.

EXAMPLES:
    sage: J0(37).vector_space()
    Vector space of dimension 4 over Rational Field
    sage: J0(37)[0].vector_space()
    Vector space of degree 4 and dimension 2 over Rational Field
    Basis matrix:
    [   1   -1    0  1/2]
    [   0    0    1 -1/2]

base_field(self)

source code 

Synonym for \code{self.base_ring()}.

EXAMPLES:
    sage: J0(11).base_field()
    Rational Field

base_extend(self, K)

source code 

EXAMPLES:
    sage: A = J0(37); A
    Abelian variety J0(37) of dimension 2
    sage: A.base_extend(QQbar)
    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 

Overrides: structure.parent_base.ParentWithBase.base_extend

__contains__(self, x)
(In operator)

source code 

Determine whether or not self contains x.

EXAMPLES:
    sage: J = J0(67); G = (J[0] + J[1]).intersection(J[1] + J[2])
    sage: G[0]
    Finite subgroup with invariants [5, 10] over QQbar of Abelian subvariety of dimension 3 of J0(67)
    sage: a = G[0].0; a
    [(1/10, 1/10, 3/10, 1/2, 1, -2, -3, 33/10, 0, -1/2)]
    sage: a in J[0]
    False
    sage: a in (J[0]+J[1])
    True
    sage: a in (J[1]+J[2])
    True
    sage: C = G[1]   # abelian variety in kernel
    sage: G[0].0
    [(1/10, 1/10, 3/10, 1/2, 1, -2, -3, 33/10, 0, -1/2)]
    sage: 5*G[0].0
    [(1/2, 1/2, 3/2, 5/2, 5, -10, -15, 33/2, 0, -5/2)]
    sage: 5*G[0].0 in C
    True

Overrides: structure.parent.Parent.__contains__

__cmp__(self, other)
(Comparison operator)

source code 

Compare two modular abelian varieties.

If other is not a modular abelian variety, compares the types
of self and other.  If other is a modular abelian variety,
compares the groups, then if those are the same, compares the
newform level and isogeny class number and degeneracy map
numbers.  If those are not defined or matched up, compare the
underlying lattices.

EXAMPLES:
    sage: cmp(J0(37)[0], J0(37)[1])
    -1
    sage: cmp(J0(33)[0], J0(33)[1])
    -1
    sage: cmp(J0(37), 5) #random
    1

__radd__(self, other)
(Right-side addition operator)

source code 

Return other + self when other is 0.  Otherwise raise a
TypeError.

EXAMPLES:
    sage: int(0) + J0(37)
    Abelian variety J0(37) of dimension 2

_repr_(self)

source code 

Return string representation of this modular abelian variety.

This is just the generic base class, so it's unlikely to be
called in practice.

EXAMPLES:
    sage: A = J0(23)
    sage: import sage.modular.abvar.abvar as abvar
    sage: abvar.ModularAbelianVariety_abstract._repr_(A)
    'Abelian variety J0(23) of dimension 2'
    
    sage: (J0(11) * J0(33))._repr_()
    'Abelian variety J0(11) x J0(33) of dimension 4'

label(self)

source code 

Return the label associated to this modular abelian variety.

The format of the label is
       [level][isogeny class][group](t, ambient level)

If this abelian variety $B$ has the above label, this implies
only that $B$ is isogenous to the newform abelan variety $A_f$
associated to the newform with label [level][isogeny
class][group].  The [group] is empty for $\Gamma_0(N)$, is G1
for $\Gamma_1(N)$ and is GH[...] for $\Gamma_H(N)$.

WARNING: The sum of $\delta_s(A_f)$ for all $s\mid t$ contains
$A$, but no sum for a proper divisor of $t$ contains $A$.  It
need \emph{not} be the case that $B$ is equal to
$\delta_t(A_f)$!!!

OUTPUT:
    string

EXAMPLES:
    sage: J0(11).label()
    '11a(1,11)'
    sage: J0(11)[0].label()
    '11a(1,11)'
    sage: J0(33)[2].label()
    '33a(1,33)'
    sage: J0(22).label()
    Traceback (most recent call last):
    ...
    ValueError: self must be simple

We illustrate that self need not equal $\delta_t(A_f)$:
    sage: J = J0(11); phi = J.degeneracy_map(33, 1) + J.degeneracy_map(33,3)
    sage: B = phi.image(); B
    Abelian subvariety of dimension 1 of J0(33)
    sage: B.decomposition()
    [
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33)
    ]
    sage: C = J.degeneracy_map(33,3).image(); C
    Abelian subvariety of dimension 1 of J0(33)
    sage: C == B
    False        

newform_label(self)

source code 

Return the label [level][isogeny class][group] of the newform
$f$ such that this abelian variety is isogenous to the newform
abelian variety $A_f$.  If this abelian variety is not simple,
raise a ValueError.

OUTPUT:
    string

EXAMPLES:
    sage: J0(11).newform_label()
    '11a'
    sage: J0(33)[2].newform_label()
    '33a'

The following fails since $J_0(33)$ is not simple:
    sage: J0(33).newform_label()
    Traceback (most recent call last):
    ...
    ValueError: self must be simple

_isogeny_to_newform_abelian_variety(self)

source code 

Return an isogeny from self to an abelian variety $A_f$
attached to a newform.  If self is not simple (so that no such
isogeny exists), raise a ValueError.

EXAMPLES:
    sage: J0(22)[0]._isogeny_to_newform_abelian_variety()
    Abelian variety morphism:
      From: Simple abelian subvariety 11a(1,22) of dimension 1 of J0(22)
      To:   Newform abelian subvariety 11a of dimension 1 of J0(11)
    sage: J = J0(11); phi = J.degeneracy_map(33, 1) + J.degeneracy_map(33,3)
    sage: A = phi.image()
    sage: A._isogeny_to_newform_abelian_variety().matrix()
    [-3  3]
    [ 0 -3]        

_simple_isogeny(self, other)

source code 

Given self and other, if both are simple, and correspond to
the same newform with the same congruence subgroup, return an
isogeny. Otherwise, raise a ValueError.

INPUT:
    self, other -- modular abelian varieties
OUTPUT:
    an isogeny

EXAMPLES:
    sage: J = J0(33); J
    Abelian variety J0(33) of dimension 3
    sage: J[0]._simple_isogeny(J[1])
    Abelian variety morphism:
      From: Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
      To:   Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33)

The following illustrates how simple isogeny is only implemented when the
ambients are the same:
    sage: J[0]._simple_isogeny(J1(11))
    Traceback (most recent call last):
    ...
    NotImplementedError: _simple_isogeny only implemented when both abelian variety have the same ambient product Jacobian        

_Hom_(self, B, cat=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)

source code 

INPUT:
    B -- modular abelian varieties
    cat -- category
    
EXAMPLES:
    sage: J0(37)._Hom_(J1(37))
    Space of homomorphisms from Abelian variety J0(37) of dimension 2 to Abelian variety J1(37) of dimension 40

in_same_ambient_variety(self, other)

source code 

Return True if self and other are abelian subvarieties of the
same ambient product Jacobian.

EXAMPLES:
    sage: A,B,C = J0(33)
    sage: A.in_same_ambient_variety(B)
    True
    sage: A.in_same_ambient_variety(J0(11))
    False

modular_kernel(self)

source code 

Return the modular kernel of this abelian variety, which is
the kernel of the canonical polarization of self.

EXAMPLES:
    sage: A = AbelianVariety('33a'); A
    Newform abelian subvariety 33a of dimension 1 of J0(33)
    sage: A.modular_kernel()
    Finite subgroup with invariants [3, 3] over QQ of Newform abelian subvariety 33a of dimension 1 of J0(33)            

modular_degree(self)

source code 

Return the modular degree of this abelian variety, which is
the square root of the degree of the modular kernel.

EXAMPLES:
    sage: A = AbelianVariety('37a')
    sage: A.modular_degree()
    2

intersection(self, other)

source code 

Returns the intersection of self and other inside a common
ambient Jacobian product.

INPUT:
    other -- a modular abelian variety or a finite group
OUTPUT:
If other is a modular abelian variety:
    G -- finite subgroup of self
    A -- abelian variety (identity component of intersection)
If other is a finite group:
    G -- a finite group

EXAMPLES:
We intersect some abelian varieties with finite intersection.
    sage: J = J0(37)
    sage: J[0].intersection(J[1])
    (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))
     
    sage: D = list(J0(65)); D
    [Simple abelian subvariety 65a(1,65) of dimension 1 of J0(65), Simple abelian subvariety 65b(1,65) of dimension 2 of J0(65), Simple abelian subvariety 65c(1,65) of dimension 2 of J0(65)]
    sage: D[0].intersection(D[1])
    (Finite subgroup with invariants [2] over QQ of Simple abelian subvariety 65a(1,65) of dimension 1 of J0(65), Simple abelian subvariety of dimension 0 of J0(65))            
    sage: (D[0]+D[1]).intersection(D[1]+D[2])
    (Finite subgroup with invariants [2] over QQbar of Abelian subvariety of dimension 3 of J0(65), Abelian subvariety of dimension 2 of J0(65))

    sage: J = J0(33)
    sage: J[0].intersection(J[1])
    (Finite subgroup with invariants [5] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33), Simple abelian subvariety of dimension 0 of J0(33))            

Next we intersect two abelian varieties with non-finite
intersection:
    sage: J = J0(67); D = J.decomposition(); D
    [
    Simple abelian subvariety 67a(1,67) of dimension 1 of J0(67),
    Simple abelian subvariety 67b(1,67) of dimension 2 of J0(67),
    Simple abelian subvariety 67c(1,67) of dimension 2 of J0(67)
    ]
    sage: (D[0] + D[1]).intersection(D[1] + D[2])
    (Finite subgroup with invariants [5, 10] over QQbar of Abelian subvariety of dimension 3 of J0(67), Abelian subvariety of dimension 2 of J0(67))
    

__add__(self, other)
(Addition operator)

source code 

Returns the sum of the \emph{images} of self and other inside
the ambient Jacobian product.  self and other must be abelian
subvarieties of the ambient Jacobian product.

WARNING: The sum of course only makes sense in some ambient
variety, and by definition this function takes the sum of the
images of both self and other in the ambient product Jacobian.


EXAMPLES:
We compute the sum of two abelian varieties of $J_0(33)$:
    sage: J = J0(33)
    sage: J[0] + J[1]
    Abelian subvariety of dimension 2 of J0(33)

We sum all three and get the full $J_0(33)$:
    sage: (J[0] + J[1]) + (J[1] + J[2])
    Abelian variety J0(33) of dimension 3

Adding to zero works:
    sage: J[0] + 0
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)

Hence the sum command works:
    sage: sum([J[0], J[2]])
    Abelian subvariety of dimension 2 of J0(33)        

We try to add something in $J_0(33)$ to something in
$J_0(11)$; this shouldn't and doesn't work.
    sage: J[0] + J0(11)
    Traceback (most recent call last):
    ...
    TypeError: sum not defined since ambient spaces different

We compute the diagonal image of $J_0(11)$ in $J_0(33)$, then
add the result to the new elliptic curve of level $33$. 
    sage: A = J0(11)
    sage: B = (A.degeneracy_map(33,1) + A.degeneracy_map(33,3)).image()
    sage: B + J0(33)[2]
    Abelian subvariety of dimension 2 of J0(33)        

direct_product(self, other)

source code 

Compute the direct product of self and other.

INPUT:
    self, other -- modular abelian varieties

OUTPUT:
    abelian variety

EXAMPLES:
    sage: J0(11).direct_product(J1(13))
    Abelian variety J0(11) x J1(13) of dimension 3
    sage: A = J0(33)[0].direct_product(J0(33)[1]); A
    Abelian subvariety of dimension 2 of J0(33) x J0(33)
    sage: A.lattice()
    Free module of degree 12 and rank 4 over Integer Ring
    Echelon basis matrix:
    [ 1  1 -2  0  2 -1  0  0  0  0  0  0]
    [ 0  3 -2 -1  2  0  0  0  0  0  0  0]
    [ 0  0  0  0  0  0  1  0  0  0 -1  2]
    [ 0  0  0  0  0  0  0  1 -1  1  0 -2]        

__pow__(self, n)

source code 

Return $n$th power of self.

INPUT:
    n -- a nonnegative integer
OUTPUT:
    an abelian variety

EXAMPLES:
    sage: J = J0(37)
    sage: J^0
    Simple abelian subvariety of dimension 0 of J0(37)
    sage: J^1
    Abelian variety J0(37) of dimension 2
    sage: J^1 is J
    True

__mul__(self, other)

source code 

Compute the direct product of self and other. 

EXAMPLES:
Some modular Jacobians:
    sage: J0(11) * J0(33)
    Abelian variety J0(11) x J0(33) of dimension 4
    sage: J0(11) * J0(33) * J0(11)
    Abelian variety J0(11) x J0(33) x J0(11) of dimension 5

We multiply some factors of $J_0(65)$:
    sage: d = J0(65).decomposition()
    sage: d[0] * d[1] * J0(11)
    Abelian subvariety of dimension 4 of J0(65) x J0(65) x J0(11)

quotient(self, other)

source code 

Compute the quotient of self and other, where other is either
an abelian subvariety of self or a finite subgroup of self.

INPUT:
    other -- a finite subgroup or subvariety

OUTPUT:
    a pair (A, phi) with phi the quotient map from self to A

EXAMPLES:
We quotient $J_0(33)$ out by an abelian subvariety:
    sage: Q, f = J0(33).quotient(J0(33)[0])
    sage: Q
    Abelian variety factor of dimension 2 of J0(33)
    sage: f
    Abelian variety morphism:
      From: Abelian variety J0(33) of dimension 3
      To:   Abelian variety factor of dimension 2 of J0(33)

We quotient $J_0(33)$ by the cuspidal subgroup:
    sage: C = J0(33).cuspidal_subgroup()
    sage: Q, f = J0(33).quotient(C)
    sage: Q
    Abelian variety factor of dimension 3 of J0(33)
    sage: f.kernel()[0]
    Finite subgroup with invariants [10, 10] over QQ of Abelian variety J0(33) of dimension 3
    sage: C
    Finite subgroup with invariants [10, 10] over QQ of Abelian variety J0(33) of dimension 3
    sage: J0(11).direct_product(J1(13))
    Abelian variety J0(11) x J1(13) of dimension 3            

__div__(self, other)

source code 

Compute the quotient of self and other, where other is either
an abelian subvariety of self or a finite subgroup of self.

INPUT:
    other -- a finite subgroup or subvariety

EXAMPLES:
Quotient out by a finite group:
    sage: J = J0(67); G = (J[0] + J[1]).intersection(J[1] + J[2])
    sage: Q, _ = J/G[0]; Q
    Abelian variety factor of dimension 5 of J0(67) over Algebraic Field
    sage: Q.base_field()
    Algebraic Field
    sage: Q.lattice()
    Free module of degree 10 and rank 10 over Integer Ring
    Echelon basis matrix:
    [1/10 1/10 3/10  1/2    0    0    0 3/10    0  1/2]
    [   0  1/5  4/5  4/5    0    0    0    0    0  3/5]
    ...

Quotient out by an abelian subvariety:
    sage: A, B, C = J0(33)
    sage: Q, phi = J0(33)/A
    sage: Q
    Abelian variety factor of dimension 2 of J0(33)
    sage: phi.domain()
    Abelian variety J0(33) of dimension 3
    sage: phi.codomain()
    Abelian variety factor of dimension 2 of J0(33)
    sage: phi.kernel()
    (Finite subgroup with invariants [2] over QQbar of Abelian variety J0(33) of dimension 3,
     Abelian subvariety of dimension 1 of J0(33))
    sage: phi.kernel()[1] == A
    True

The abelian variety we quotient out by must be an abelian
subvariety.
    sage: Q = (A + B)/C; Q
    Traceback (most recent call last):
    ...
    TypeError: other must be a subgroup or abelian subvariety

degeneracy_map(self, M_ls, t_ls)

source code 

Return the degeneracy map with domain self and given
level/parameter. If self.ambient_variety() is a product of
Jacobians (as opposed to a single Jacobian), then one can
provide a list of new levels and parameters, corresponding to
the ambient Jacobians in order. (See the examples below.)

INPUT:
    M, t --  integers level and $t$, or
    Mlist, tlist -- if self is in a nontrivial product ambient
                    Jacobian, input consists of a list of
                    levels and corresponding list of $t$'s.

OUTPUT:
    a degeneracy map

EXAMPLES:
We make several degenerancy maps related to $J_0(11)$ and $J_0(33)$
and compute their matrices.
    sage: d1 = J0(11).degeneracy_map(33, 1); d1
    Degeneracy map from Abelian variety J0(11) of dimension 1 to Abelian variety J0(33) of dimension 3 defined by [1]
    sage: d1.matrix()
    [ 0 -3  2  1 -2  0]
    [ 1 -2  0  1  0 -1]
    sage: d2 = J0(11).degeneracy_map(33, 3); d2
    Degeneracy map from Abelian variety J0(11) of dimension 1 to Abelian variety J0(33) of dimension 3 defined by [3]
    sage: d2.matrix()
    [-1  0  0  0  1 -2]
    [-1 -1  1 -1  1  0]
    sage: d3 = J0(33).degeneracy_map(11, 1); d3
    Degeneracy map from Abelian variety J0(33) of dimension 3 to Abelian variety J0(11) of dimension 1 defined by [1]

He we verify that first mapping from level $11$ to level $33$, then
back is multiplication by $4$:
    sage: d1.matrix() * d3.matrix()
    [4 0]
    [0 4]

We compute a more complciated degeneracy map involving
nontrivial product ambient Jacobians; note that this is just
the block direct sum of the two matrices at the beginning of
this example:
    sage: d = (J0(11)*J0(11)).degeneracy_map([33,33], [1,3]); d
    Degeneracy map from Abelian variety J0(11) x J0(11) of dimension 2 to Abelian variety J0(33) x J0(33) of dimension 6 defined by [1, 3]
    sage: d.matrix()
    [ 0 -3  2  1 -2  0  0  0  0  0  0  0]
    [ 1 -2  0  1  0 -1  0  0  0  0  0  0]
    [ 0  0  0  0  0  0 -1  0  0  0  1 -2]
    [ 0  0  0  0  0  0 -1 -1  1 -1  1  0]

_quotient_by_finite_subgroup(self, G)

source code 

Return the quotient of self by the finite subgroup $G$.  This
is used internally by the quotient and __div__ commmands.

INPUT:
    G -- a finite subgroup of self
    
OUTPUT:
    abelian variety - the quotient $Q$ of self by $G$
    morphism -- from self to the quotient $Q$

EXAMPLES:
We quotient the elliptic curve $J_0(11)$ out by its cuspidal
subgroup.
    sage: A = J0(11)
    sage: G = A.cuspidal_subgroup(); G
    Finite subgroup with invariants [5] over QQ of Abelian variety J0(11) of dimension 1
    sage: Q, f = A._quotient_by_finite_subgroup(G)
    sage: Q
    Abelian variety factor of dimension 1 of J0(11)
    sage: f
    Abelian variety morphism:
      From: Abelian variety J0(11) of dimension 1
      To:   Abelian variety factor of dimension 1 of J0(11)

We compute the finite kernel of $f$ (hence the [0]) and note
that it equals the subgroup $G$ that we quotiented out by:
    sage: f.kernel()[0] == G
    True        

_quotient_by_abelian_subvariety(self, B)

source code 

Return the quotient of self by the abelian variety $B$.  This
is used internally by the quotient and __div__ commmands.

INPUT:
    B -- an abelian subvariety of self
OUTPUT:
    abelian variety -- quotient $Q$ of self by B
    morphism -- from self to the quotient $Q$
    
EXAMPLES:
We compute the new quotient of $J_0(33)$.
    sage: A = J0(33); B = A.old_subvariety()
    sage: Q, f = A._quotient_by_abelian_subvariety(B)

Note that the quotient happens to also be an abelian subvariety:
    sage: Q
    Abelian subvariety of dimension 1 of J0(33)
    sage: Q.lattice()
    Free module of degree 6 and rank 2 over Integer Ring
    Echelon basis matrix:
    [ 1  0  0 -1  0  0]
    [ 0  0  1  0  1 -1]            
    sage: f
    Abelian variety morphism:
      From: Abelian variety J0(33) of dimension 3
      To:   Abelian subvariety of dimension 1 of J0(33)

We verify that $B$ is equal to the kernel of the quotient map.
    sage: f.kernel()[1] == B
    True

Next we quotient $J_0(33)$ out by $Q$ itself:
    sage: C, g = A._quotient_by_abelian_subvariety(Q)

The result is not a subvariety:
    sage: C
    Abelian variety factor of dimension 2 of J0(33)
    sage: C.lattice()
    Free module of degree 6 and rank 4 over Integer Ring
    Echelon basis matrix:
    [ 1/3    0    0  2/3   -1    0]
    [   0    1    0    0   -1    1]
    [   0    0  1/3    0 -2/3  2/3]
    [   0    0    0    1   -1   -1]            

projection(self, A, check=True)

source code 

Given an abelian subvariety A of self, return a projection
morphism from self to A.  Note that this morphism need not be
unique.

INPUT:
    A -- an abelian variety
OUTPUT:
    a morphism

EXAMPLES:
    sage: a,b,c = J0(33)
    sage: pi = J0(33).projection(a); pi.matrix()
    [ 3 -2]
    [-5  5]
    [-4  1]
    [ 3 -2]
    [ 5  0]
    [ 1  1]
    sage: pi = (a+b).projection(a); pi.matrix()
    [ 0  0]
    [-3  2]
    [-4  1]
    [-1 -1]
    sage: pi = a.projection(a); pi.matrix()
    [1 0]
    [0 1]

We project onto a factor in a product of two Jacobians:
    sage: A = J0(11)*J0(11); A
    Abelian variety J0(11) x J0(11) of dimension 2
    sage: A[0]
    Simple abelian subvariety 11a(1,11) of dimension 1 of J0(11) x J0(11)
    sage: A.projection(A[0])
    Abelian variety morphism:
      From: Abelian variety J0(11) x J0(11) of dimension 2
      To:   Simple abelian subvariety 11a(1,11) of dimension 1 of J0(11) x J0(11)
    sage: A.projection(A[0]).matrix()
    [0 0]
    [0 0]
    [1 0]
    [0 1]
    sage: A.projection(A[1]).matrix()
    [1 0]
    [0 1]
    [0 0]
    [0 0]

project_to_factor(self, n)

source code 

If self is an ambient product of Jacobians, return a
projection from self to the nth such Jacobian.

EXAMPLES:
    sage: J = J0(33)
    sage: J.project_to_factor(0)
    Abelian variety endomorphism of Abelian variety J0(33) of dimension 3

    sage: J = J0(33) * J0(37) * J0(11)
    sage: J.project_to_factor(2)
    Abelian variety morphism:
      From: Abelian variety J0(33) x J0(37) x J0(11) of dimension 6
      To:   Abelian variety J0(11) of dimension 1
    sage: J.project_to_factor(2).matrix()
    [0 0]
    [0 0]
    [0 0]
    [0 0]
    [0 0]
    [0 0]
    [0 0]
    [0 0]
    [0 0]
    [0 0]
    [1 0]
    [0 1]

is_subvariety_of_ambient_jacobian(self)

source code 

Return True if self is (presented as) a subvariety of the
ambient product Jacobian.

Every abelian variety in Sage is a quotient of a subvariety of
an ambient Jacobian product by a finite subgroup.

EXAMPLES:
    sage: J0(33).is_subvariety_of_ambient_jacobian()
    True
    sage: A = J0(33)[0]; A
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
    sage: A.is_subvariety_of_ambient_jacobian()
    True
    sage: B, phi = A / A.torsion_subgroup(2)
    sage: B
    Abelian variety factor of dimension 1 of J0(33)
    sage: phi.matrix()
    [2 0]
    [0 2]
    sage: B.is_subvariety_of_ambient_jacobian()
    False

ambient_variety(self)

source code 

Return the ambient modular abelian variety that contains this
abelian variety.  The ambient variety is always a product of
Jacobians of modular curves.

OUTPUT:
    abelian variety

EXAMPLES:
    sage: A = J0(33)[0]; A
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
    sage: A.ambient_variety()
    Abelian variety J0(33) of dimension 3

ambient_morphism(self)

source code 

Return the morphism from self to the ambient variety.  This is
injective if self is natural a subvariety of the ambient
product Jacobian.

OUTPUT:
    morphism

The output is cached. 

EXAMPLES:
We compute the ambient structure morphism for an abelian
subvariety of $J_0(33)$:
    sage: A,B,C = J0(33)
    sage: phi = A.ambient_morphism()
    sage: phi.domain()
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)
    sage: phi.codomain()
    Abelian variety J0(33) of dimension 3
    sage: phi.matrix()
    [ 1  1 -2  0  2 -1]
    [ 0  3 -2 -1  2  0]

phi is of course injective
    sage: phi.kernel()
    (Finite subgroup with invariants [] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33),
     Abelian subvariety of dimension 0 of J0(33))

This is the same as the basis matrix for the lattice corresponding
to self:
    sage: A.lattice()
    Free module of degree 6 and rank 2 over Integer Ring
    Echelon basis matrix:
    [ 1  1 -2  0  2 -1]
    [ 0  3 -2 -1  2  0]

We compute a non-injecture map to an ambient space:
    sage: Q,pi = J0(33)/A
    sage: phi = Q.ambient_morphism()
    sage: phi.matrix()
    [  1   4   1   9  -1  -1]
    [  0  15   0   0  30 -75]
    [  0   0   5  10  -5  15]
    [  0   0   0  15 -15  30]
    sage: phi.kernel()[0]
    Finite subgroup with invariants [5, 15, 15] over QQ of Abelian variety factor of dimension 2 of J0(33)        

is_ambient(self)

source code 

Return True if self equals the ambient product Jacobian.

OUTPUT:
    bool 

EXAMPLES:
    sage: A,B,C = J0(33)
    sage: A.is_ambient()
    False
    sage: J0(33).is_ambient()
    True
    sage: (A+B).is_ambient()
    False
    sage: (A+B+C).is_ambient()
    True

dimension(self)

source code 

Return the dimension of this abelian variety.

EXAMPLES:
    sage: A = J0(23)
    sage: A.dimension()
    2

rank(self)

source code 

Return the rank of the underlying lattice of self.

EXAMPLES:
    sage: J = J0(33)
    sage: J.rank()
    6
    sage: J[1]
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33)
    sage: (J[1] * J[1]).rank()
    4

degree(self)

source code 

Return the degree of this abelian variety, which is the
dimension of the ambient Jacobian product.

EXAMPLES:
    sage: A = J0(23)
    sage: A.dimension()
    2

endomorphism_ring(self)

source code 

Return the endomorphism ring of self.

OUTPUT:
b = self.sturm_bound()
EXAMPLES:
We compute a few endomorphism rings:
    sage: J0(11).endomorphism_ring()
    Endomorphism ring of Abelian variety J0(11) of dimension 1
    sage: J0(37).endomorphism_ring()
    Endomorphism ring of Abelian variety J0(37) of dimension 2
    sage: J0(33)[2].endomorphism_ring()
    Endomorphism ring of Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)

No real computation is done:
    sage: J1(123456).endomorphism_ring()
    Endomorphism ring of Abelian variety J1(123456) of dimension 423185857

sturm_bound(self)

source code 

Return a bound $B$ such that all Hecke operators $T_n$ for
$n\leq B$ generate the Hecke algebra.

OUTPUT:
    integer

EXAMPLES:
    sage: J0(11).sturm_bound()
    2
    sage: J0(33).sturm_bound()
    8
    sage: J1(17).sturm_bound()
    48
    sage: J1(123456).sturm_bound()
    1693483008
    sage: JH(37,[2,3]).sturm_bound()
    7
    sage: J1(37).sturm_bound()
    252        

is_hecke_stable(self)

source code 

Return True if self is stable under the Hecke operators of its
ambient Jacobian.

OUTPUT:
    bool

EXAMPLES:
    sage: J0(11).is_hecke_stable()
    True
    sage: J0(33)[2].is_hecke_stable()
    True
    sage: J0(33)[0].is_hecke_stable()
    False
    sage: (J0(33)[0] + J0(33)[1]).is_hecke_stable()
    True        

is_subvariety(self, other)

source code 

Return True if self is a subvariety of other as they sit in a
common ambient modular Jacobian.  In particular, this function
will only return True if self and other have exactly the same
ambient Jacobians.

EXAMPLES:
    sage: J = J0(37); J
    Abelian variety J0(37) of dimension 2
    sage: A = J[0]; A
    Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37)
    sage: A.is_subvariety(A)
    True
    sage: A.is_subvariety(J)
    True

change_ring(self, R)

source code 

Change the base ring of this modular abelian variety.

EXAMPLES:
    sage: A = J0(23)
    sage: A.change_ring(QQ)
    Abelian variety J0(23) of dimension 2

category(self)

source code 

Return the category of modular abelian varieties that contains
this modular abelian variety.

EXAMPLES:
    sage: J0(23).category()
    Category of modular abelian varieties over Rational Field

Overrides: structure.sage_object.SageObject.category

level(self)

source code 

Return the level of this modular abelian variety, which is an
integer N (usually minimal) such that this modular abelian
variety is a quotient of $J_1(N)$. In the case that the
ambient variety of self is a product of Jacobians, return the
LCM of their levels.

EXAMPLES:
    sage: J1(5077).level()
    5077
    sage: JH(389,[4]).level()
    389
    sage: (J0(11)*J0(17)).level()
    187

newform_level(self, none_if_not_known=False)

source code 

Write self as a product (up to isogeny) of newform abelian
varieties $A_f$.  Then this function return the least common
multiple of the levels of the newforms $f$, along with the
corresponding group or list of groups (the groups do not
appear with multiplicity).

INPUT:

    none_if_not_known -- (default: False) if True, return None
        instead of attempting to compute the newform level, if
        it isn't already known.  This None result is not
        cached.

OUTPUT:
    integer
    group or list of distinct groups

EXAMPLES:
    sage: J0(33)[0].newform_level()
    (11, Congruence Subgroup Gamma0(33))
    sage: J0(33)[0].newform_level(none_if_not_known=True)
    (11, Congruence Subgroup Gamma0(33))

Here there are multiple groups since there are in fact multiple newforms:
    sage: (J0(11) * J1(13)).newform_level()
    (143, [Congruence Subgroup Gamma0(11), Congruence Subgroup Gamma1(13)])

zero_subvariety(self)

source code 

Return the zero subvariety of self.

EXAMPLES:
    sage: J = J0(37)
    sage: J.zero_subvariety()
    Simple abelian subvariety of dimension 0 of J0(37)
    sage: J.zero_subvariety().level()
    37
    sage: J.zero_subvariety().newform_level()
    (1, [])

_ambient_repr(self)

source code 

OUTPUT:
    string

EXAMPLES:
    sage: (J0(33)*J1(11))._ambient_repr()
    'J0(33) x J1(11)'        

_ambient_latex_repr(self)

source code 

Return Latex representation of the ambient product.

OUTPUT:
    string

EXAMPLES:
    sage: (J0(11) * J0(33))._ambient_latex_repr()
    'J_0(11) \cross J_0(33)'

_ambient_lattice(self)

source code 

Return free lattice of rank twice the degree of self.  This is
the lattice corresponding to the ambient product Jacobian.

OUTPUT:
    lattice

EXAMPLES:
We compute the ambient lattice of a product:
    sage: (J0(33)*J1(11))._ambient_lattice()
    Ambient free module of rank 8 over the principal ideal domain Integer Ring

We compute the ambient lattice of an abelian subvariety
$J_0(33)$, which is the same as the lattice for the $J_0(33)$
itself:
    sage: A = J0(33)[0]; A._ambient_lattice()
    Ambient free module of rank 6 over the principal ideal domain Integer Ring
    sage: J0(33)._ambient_lattice()
    Ambient free module of rank 6 over the principal ideal domain Integer Ring

_ambient_modular_symbols_spaces(self)

source code 

Return a tuple of the ambient cuspidal modular symbols spaces
that make up the Jacobian product that contains self.

OUTPUT:
    tuple of cuspidal modular symbols spaces

EXAMPLES:
    sage: (J0(11) * J0(33))._ambient_modular_symbols_spaces()
    (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field,
     Modular Symbols subspace of dimension 6 of Modular Symbols space of dimension 9 for Gamma_0(33) of weight 2 with sign 0 over Rational Field)
    sage: (J0(11) * J0(33)[0])._ambient_modular_symbols_spaces()
    (Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field,
     Modular Symbols subspace of dimension 6 of Modular Symbols space of dimension 9 for Gamma_0(33) of weight 2 with sign 0 over Rational Field)

_ambient_modular_symbols_abvars(self)

source code 

Return a tuple of the ambient modular symbols abelian
varieties that make up the Jacobian product that contains
self.

OUTPUT:
    tuple of modular symbols abelian varieties

EXAMPLES:
    sage: (J0(11) * J0(33))._ambient_modular_symbols_abvars()
    (Abelian variety J0(11) of dimension 1, Abelian variety J0(33) of dimension 3)

_ambient_dimension(self)

source code 

Return the dimension of the ambient Jacobian product.

EXAMPLES:
    sage: A = J0(37) * J1(13); A
    Abelian variety J0(37) x J1(13) of dimension 4
    sage: A._ambient_dimension()
    4
    sage: B = A[0]; B
    Simple abelian subvariety 13aG1(1,13) of dimension 2 of J0(37) x J1(13)
    sage: B._ambient_dimension()
    4

This example is fast because it implicitly calls _ambient_dimension.
    sage: J0(902834082394)
    Abelian variety J0(902834082394) of dimension 113064825881

_ambient_hecke_matrix_on_modular_symbols(self, n)

source code 

Return block direct sum of the matrix of the Hecke operator
$T_n$ acting on each of the ambient modular symbols spaces.

INPUT:
    n -- an integer $\geq 1$.

OUTPUT:
    a matrix

EXAMPLES:
    sage: (J0(11) * J1(13))._ambient_hecke_matrix_on_modular_symbols(2)
    [-2  0  0  0  0  0]
    [ 0 -2  0  0  0  0]
    [ 0  0 -2  0 -1  1]
    [ 0  0  1 -1  0 -1]
    [ 0  0  1  1 -2  0]
    [ 0  0  0  1 -1 -1]

_rational_homology_space(self)

source code 

Return the rational homology of this modular abelian variety.

EXAMPLES:
    sage: J = J0(11)
    sage: J._rational_homology_space()
    Vector space of dimension 2 over Rational Field

The result is cached:
    sage: J._rational_homology_space() is J._rational_homology_space()
    True

homology(self, base_ring=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)

source code 

Return the homology of this modular abelian variety.

WARNING: For efficiency reasons the basis of the integral
homology need not be the same as the basis for the rational
homology.

EXAMPLES:
    sage: J0(389).homology(GF(7))
    Homology with coefficients in Finite Field of size 7 of Abelian variety J0(389) of dimension 32
    sage: J0(389).homology(QQ)
    Rational Homology of Abelian variety J0(389) of dimension 32
    sage: J0(389).homology(ZZ)
    Integral Homology of Abelian variety J0(389) of dimension 32

integral_homology(self)

source code 

Return the integral homology of this modular abelian variety.

EXAMPLES:
    sage: H = J0(43).integral_homology(); H
    Integral Homology of Abelian variety J0(43) of dimension 3
    sage: H.rank()
    6
    sage: H = J1(17).integral_homology(); H
    Integral Homology of Abelian variety J1(17) of dimension 5
    sage: H.rank()
    10

If you just ask for the rank of the homology, no serious
calculations are done, so the following is fast:
    sage: H = J0(50000).integral_homology(); H
    Integral Homology of Abelian variety J0(50000) of dimension 7351
    sage: H.rank()
    14702

A product:
    sage: H = (J0(11) * J1(13)).integral_homology()
    sage: H.hecke_operator(2)
    Hecke operator T_2 on Integral Homology of Abelian variety J0(11) x J1(13) of dimension 3
    sage: H.hecke_operator(2).matrix()
    [-2  0  0  0  0  0]
    [ 0 -2  0  0  0  0]
    [ 0  0 -2  0 -1  1]
    [ 0  0  1 -1  0 -1]
    [ 0  0  1  1 -2  0]
    [ 0  0  0  1 -1 -1]

rational_homology(self)

source code 

Return the rational homology of this modular abelian variety.

EXAMPLES:
    sage: H = J0(37).rational_homology(); H
    Rational Homology of Abelian variety J0(37) of dimension 2
    sage: H.rank()
    4
    sage: H.base_ring()
    Rational Field
    sage: H = J1(17).rational_homology(); H
    Rational Homology of Abelian variety J1(17) of dimension 5
    sage: H.rank()
    10
    sage: H.base_ring()
    Rational Field        

lseries(self)

source code 

Return the complex $L$-series of this modular abelian variety.

EXAMPLES:
    sage: A = J0(37)
    sage: A.lseries()
    Complex L-series attached to Abelian variety J0(37) of dimension 2

padic_lseries(self, p)

source code 

Return the $p$-adic $L$-series of this modular abelian
variety.

EXAMPLES:
    sage: A = J0(37)
    sage: A.padic_lseries(7)
    7-adic L-series attached to Abelian variety J0(37) of dimension 2

hecke_operator(self, n)

source code 

Return the $n$-th Hecke operator on the modular abelian
variety, if this makes sense [[elaborate]].  Otherwise raise a
ValueError.

EXAMPLES:
We compute $T_2$ on $J_0(37)$.
    sage: t2 = J0(37).hecke_operator(2); t2
    Hecke operator T_2 on Abelian variety J0(37) of dimension 2
    sage: t2.charpoly().factor()
    x * (x + 2)
    sage: t2.index()
    2
    
Note that there is no matrix associated to Hecke operators on
modular abelian varieties.  For a matrix, instead consider,
e.g., the Hecke operator on integral or rational homology.
    sage: t2.action_on_homology().matrix()
    [-1  1  1 -1]
    [ 1 -1  1  0]
    [ 0  0 -2  1]
    [ 0  0  0  0]        

hecke_polynomial(self, n, var='x')

source code 

Return the characteristic polynomial of the $n$th Hecke
operator $T_n$ acting on self.  Raises an ArithmeticError if
self is not Hecke equivariant.

INPUT:
    n -- integer $\geq 1$
    var -- string (default: 'x'); valid variable name
    
EXAMPLES:
    sage: J0(33).hecke_polynomial(2)
    x^3 + 3*x^2 - 4
    sage: f = J0(33).hecke_polynomial(2, 'y'); f
    y^3 + 3*y^2 - 4
    sage: f.parent()
    Univariate Polynomial Ring in y over Rational Field
    sage: J0(33)[2].hecke_polynomial(3)
    x + 1
    sage: J0(33)[0].hecke_polynomial(5)
    x - 1
    sage: J0(33)[0].hecke_polynomial(11)
    x - 1
    sage: J0(33)[0].hecke_polynomial(3)
    Traceback (most recent call last):
    ...
    ArithmeticError: subspace is not invariant under matrix

_compute_hecke_polynomial(self, n, var='x')

source code 

Return the Hecke polynomial of index $n$ in terms of the given
variable.

INPUT:
    n -- positive integer
    var -- string (default: 'x')

EXAMPLES:
    sage: A = J0(33)*J0(11)
    sage: A._compute_hecke_polynomial(2)
    x^4 + 5*x^3 + 6*x^2 - 4*x - 8

_integral_hecke_matrix(self, n)

source code 

Return the matrix of the Hecke operator $T_n$ acting on the
integral homology of this modular abelian variety, if the
modular abelian variety is stable under $T_n$.  Otherwise,
raise an ArithmeticError.

EXAMPLES:
    sage: A = J0(23)
    sage: t = A._integral_hecke_matrix(2); t
    [ 0  1 -1  0]
    [ 0  1 -1  1]
    [-1  2 -2  1]
    [-1  1  0 -1]
    sage: t.parent()
    Full MatrixSpace of 4 by 4 dense matrices over Integer Ring

_rational_hecke_matrix(self, n)

source code 

Return the matrix of the Hecke operator $T_n$ acting on the
rational homology $H_1(A,\Q)$ of this modular abelian variety,
if this action is defined.  Otherwise, raise an
ArithmeticError.

EXAMPLES:
    sage: A = J0(23)
    sage: t = A._rational_hecke_matrix(2); t
    [ 0  1 -1  0]
    [ 0  1 -1  1]
    [-1  2 -2  1]
    [-1  1  0 -1]
    sage: t.parent()
    Full MatrixSpace of 4 by 4 dense matrices over Rational Field

qbar_torsion_subgroup(self)

source code 

Return the group of all points of finite order in the
algebraic closure of this abelian variety.

EXAMPLES:
    sage: T = J0(33).qbar_torsion_subgroup(); T
    Group of all torsion points in QQbar on Abelian variety J0(33) of dimension 3

The field of definition is the same as the base field of the
abelian variety.
    sage: T.field_of_definition()
    Rational Field

On the other hand, T is a module over $\ZZ$.
    sage: T.base_ring()
    Integer Ring

rational_torsion_subgroup(self)

source code 

Return the maximal torsion subgroup of self defined over QQ.

EXAMPLES:
    sage: J = J0(33)
    sage: A = J.new_subvariety()
    sage: A
    Abelian subvariety of dimension 1 of J0(33)
    sage: t = A.rational_torsion_subgroup()
    sage: t.multiple_of_order()
    4
    sage: t.divisor_of_order()
    4
    sage: t.order()
    4
    sage: t.gens()
    [[(1/2, 0, 0, -1/2, 0, 0)], [(0, 0, 1/2, 0, 1/2, -1/2)]]
    sage: t
    Torsion subgroup of Abelian subvariety of dimension 1 of J0(33)

cuspidal_subgroup(self)

source code 

Return the cuspidal subgroup of this modular abelian variety.
This is the subgroup generated by rational cusps.

EXAMPLES:
    sage: J = J0(54)
    sage: C = J.cuspidal_subgroup()
    sage: C.gens()
    [[(1/3, 0, 0, 0, 0, 1/3, 0, 2/3)], [(0, 1/3, 0, 0, 0, 2/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 1/9, 1/9, 1/9, 2/9)], [(0, 0, 0, 1/3, 0, 1/3, 0, 0)], [(0, 0, 0, 0, 1/3, 1/3, 0, 1/3)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)]]
    sage: C.invariants()
    [3, 3, 3, 3, 3, 9]
    sage: J1(13).cuspidal_subgroup()
    Finite subgroup with invariants [19, 19] over QQ of Abelian variety J1(13) of dimension 2
    sage: A = J0(33)[0]
    sage: A.cuspidal_subgroup()
    Finite subgroup with invariants [5] over QQ of Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)

_ambient_cuspidal_subgroup(self, rational_only=False)

source code 

EXAMPLES:
    sage: (J1(13)*J0(11))._ambient_cuspidal_subgroup()
    Finite subgroup with invariants [19, 95] over QQ of Abelian variety J1(13) x J0(11) of dimension 3
    sage: (J0(33))._ambient_cuspidal_subgroup()
    Finite subgroup with invariants [10, 10] over QQ of Abelian variety J0(33) of dimension 3
    sage: (J0(33)*J0(33))._ambient_cuspidal_subgroup()
    Finite subgroup with invariants [10, 10, 10, 10] over QQ of Abelian variety J0(33) x J0(33) of dimension 6

rational_cusp_subgroup(self)

source code 

Return the subgroup of this modular abelian variety generated
by rational cusps.

This is a subgroup of the group of rational points in the
cuspidal subgroup.

WARNING: This is only currently implemented for $\Gamma_0(N)$.

EXAMPLES:
    sage: J = J0(54)
    sage: CQ = J.rational_cusp_subgroup(); CQ
    Finite subgroup with invariants [3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
    sage: CQ.gens()
    [[(1/3, 0, 0, 1/3, 2/3, 1/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 7/9, 7/9, 1/9, 8/9)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)]]
    sage: factor(CQ.order())
    3^4
    sage: CQ.invariants()
    [3, 3, 9]

In this example the rational cuspidal subgroup and the
cuspidal subgroup differ by a lot.
    sage: J = J0(49)
    sage: J.cuspidal_subgroup()
    Finite subgroup with invariants [2, 14] over QQ of Abelian variety J0(49) of dimension 1
    sage: J.rational_cusp_subgroup()
    Finite subgroup with invariants [2] over QQ of Abelian variety J0(49) of dimension 1

Note that computation of the rational cusp subgroup isn't
implemented for $\Gamma_1$.
    sage: J = J1(13)
    sage: J.cuspidal_subgroup()
    Finite subgroup with invariants [19, 19] over QQ of Abelian variety J1(13) of dimension 2
    sage: J.rational_cusp_subgroup()
    Traceback (most recent call last):
    ...
    NotImplementedError: computation of rational cusps only implemented in Gamma0 case.

zero_subgroup(self)

source code 

Return the zero subgroup of this modular abelian variety, as a
finite group.

EXAMPLES:
    sage: A =J0(54); G = A.zero_subgroup(); G
    Finite subgroup with invariants [] over QQ of Abelian variety J0(54) of dimension 4
    sage: G.is_subgroup(A)   
    True

finite_subgroup(self, X, field_of_definition=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a..., check=True)

source code 

Return a finite subgroup of this modular abelian variety.

INPUT:
    X -- list of elements of other finite subgroups of
         this modular abelian variety or elements that 
         coerce into the rational homology (viewed as
         a rational vector space); also X could be
         a finite subgroup itself that is contained
         in this abelian variety.
         
    field_of_definition -- (default: None) field over which
         this group is defined.  If None try to figure out the
         best base field.

OUTPUT:
    a finite subgroup of a modular abelian variety

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

    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)
    sage: J.finite_subgroup([[0,0,0,0,0,1/6]])
    Finite subgroup with invariants [6] over QQbar of Abelian variety J0(33) of dimension 3
    sage: J.finite_subgroup(C)
    Finite subgroup with invariants [5] over QQ of Abelian variety J0(33) of dimension 3
    

torsion_subgroup(self, n)

source code 

If n is an integer, return the subgroup of points of order n.
Return the $n$-torsion subgroup of elements of order dividing
$n$ of this modular abelian variety $A$, i.e., the group
$A[n]$.

EXAMPLES:
    sage: J1(13).torsion_subgroup(19)
    Finite subgroup with invariants [19, 19, 19, 19] over QQ of Abelian variety J1(13) of dimension 2

    sage: A = J0(23)
    sage: G = A.torsion_subgroup(5); G
    Finite subgroup with invariants [5, 5, 5, 5] over QQ of Abelian variety J0(23) of dimension 2
    sage: G.order()
    625
    sage: G.gens()
    [[(1/5, 0, 0, 0)], [(0, 1/5, 0, 0)], [(0, 0, 1/5, 0)], [(0, 0, 0, 1/5)]]
    sage: A = J0(23)
    sage: A.torsion_subgroup(2).order()
    16

degen_t(self, none_if_not_known=False)

source code 

If this abelian variety is obtained via decomposition then it
gets labeled with the newform label along with some
information about degeneracy maps.  In particular, the label
ends in a pair $(t,N)$, where $N$ is the ambient level and $t$
is an integer that divides the quotient of $N$ by the newform
level.  This function returns the tuple $(t,N)$, or raises a
ValueError if self isn't simple.

NOTE: It need not be the case that self is literally equal to
the image of the newform abelian variety under the $t$th
degeneracy map.  See the documentation for the label method
for more details.

INPUT:
    none_if_not_known -- (default: False) -- if True, return
       None instead of attempting to compute the degen map's
       $t$, if it isn't known.  This None result is not
       cached.
                         
OUTPUT:
    a pair (integer, integer)
    
EXAMPLES:
    sage: D = J0(33).decomposition(); D
    [
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33),
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33),
    Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)
    ]
    sage: D[0].degen_t()
    (1, 33)
    sage: D[1].degen_t()
    (3, 33)
    sage: D[2].degen_t()
    (1, 33)
    sage: J0(33).degen_t()
    Traceback (most recent call last):
    ...
    ValueError: self must be simple            

isogeny_number(self, none_if_not_known=False)

source code 

Return the number (starting at 0) of the isogeny class of new
simple abelian varieties that self is in.  If self is not
simple, raises a ValueError exception.

INPUT:
    none_if_not_known -- bool (default: False); if True then
        this function may return None instead of True of False
        if we don't already know the isogeny number of self.

EXAMPLES:
We test the none_if_not_known flag first:
    sage: J0(33).isogeny_number(none_if_not_known=True) is None
    True

Of course, $J_0(33)$ is not simple, so this function raises a
ValueError:
    sage: J0(33).isogeny_number()
    Traceback (most recent call last):
    ...
    ValueError: self must be simple

Each simple factor has isogeny number 1, since that's the
number at which the factor is new.
    sage: J0(33)[1].isogeny_number()
    0
    sage: J0(33)[2].isogeny_number()
    0

Next consider $J_0(37)$ where there are two distinct newform
factors:
    sage: J0(37)[1].isogeny_number()
    1        

is_simple(self, none_if_not_known=False)

source code 

Return whether or not this modular abelian variety is simple,
i.e., has no proper nonzero abelian subvarieties.

INPUT:
    none_if_not_known -- bool (default: False); if True then
        this function may return None instead of True of False
        if we don't already know whether or not self is
        simple.

EXAMPLES:
    sage: J0(5).is_simple(none_if_not_known=True) is None  # this may fail if J0(5) comes up elsewhere...
    True
    sage: J0(33).is_simple()
    False
    sage: J0(33).is_simple(none_if_not_known=True)
    False
    sage: J0(33)[1].is_simple()
    True
    sage: J1(17).is_simple()
    False            

decomposition(self, simple=True, bound=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)

source code 

Return a sequence of abelian subvarieties of self that are all
simple, have finite intersection and sum to self.

INPUT:
    simple-- bool (default: True) if True, all factors are
         simple. If False, each factor returned is isogenous
         to a power of a simple and the simples in each factor
         are distinct.
    bound -- int (default: None) if given, only use Hecke
         operators up to this bound when decomposing.  This
         can give wrong answers, so use with caution!

EXAMPLES:
    sage: m = ModularSymbols(11).cuspidal_submodule()
    sage: d1 = m.degeneracy_map(33,1).matrix(); d3=m.degeneracy_map(33,3).matrix()
    sage: w = ModularSymbols(33).submodule((d1 + d3).image(), check=False)
    sage: A = w.abelian_variety(); A
    Abelian subvariety of dimension 1 of J0(33)
    sage: D = A.decomposition(); D
    [
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33)
    ]
    sage: D[0] == A
    True
    sage: B = A + J0(33)[0]; B
    Abelian subvariety of dimension 2 of J0(33)
    sage: dd = B.decomposition(simple=False); dd
    [
    Abelian subvariety of dimension 2 of J0(33)
    ]
    sage: dd[0] == B
    True
    sage: dd = B.decomposition(); dd
    [
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33),
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33)
    ]
    sage: sum(dd) == B
    True

We decompose a product of two Jacobians:
    sage: (J0(33) * J0(11)).decomposition()
    [
    Simple abelian subvariety 11a(1,11) of dimension 1 of J0(33) x J0(11),
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33) x J0(11),
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33) x J0(11),
    Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33) x J0(11)
    ]

_classify_ambient_factors(self, simple=True, bound=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)

source code 

This function implements the following algorithm, which
produces data useful in finding a decomposition or complement
of self.

\begin{enumerate}
    \item Suppose $A_1 + \cdots + A_n$ is a simple decomposition of
          the ambient space.
    \item For each $i$, let $B_i = A_1 + \cdots + A_i$.
    \item For each $i$, compute the intersection $C_i$ of $B_i$
          and self.
    \item For each $i$, if the dimension of $C_i$ is bigger than
          $C_{i-1}$ put $i$ in the ``in'' list; otherwise put $i$
          in the ``out'' list. 
\end{enumerate}

Then one can show that self is isogenous to the sum of the
$A_i$ with $i$ in the ``in'' list.  Moreover, the sum of the
$A_j$ with $i$ in the ``out'' list is a complement of self in
the ambient space.

INPUT:
    simple -- bool (default: True)
    bound -- integer (default: None); if given, passed
          onto decomposition function

OUTPUT:
    IN list
    OUT list
    simple (or power of simple) factors

EXAMPLES:
    sage: d1 = J0(11).degeneracy_map(33, 1); d1
    Degeneracy map from Abelian variety J0(11) of dimension 1 to Abelian variety J0(33) of dimension 3 defined by [1]
    sage: d2 = J0(11).degeneracy_map(33, 3); d2
    Degeneracy map from Abelian variety J0(11) of dimension 1 to Abelian variety J0(33) of dimension 3 defined by [3]
    sage: A = (d1 + d2).image(); A
    Abelian subvariety of dimension 1 of J0(33)
    sage: A._classify_ambient_factors()
    ([1], [0, 2], [
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33),
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33),
    Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)
    ])        

_isogeny_to_product_of_simples(self)

source code 

Given an abelian variety $A$, return an isogeny
$\phi: A \rightarrow B_1 \times \cdots \times B_n$,
where each $B_i$ is simple. Note that this isogeny is
not unique.

EXAMPLES:
    sage: J = J0(37) ; J.decomposition()
    [
    Simple abelian subvariety 37a(1,37) of dimension 1 of J0(37),
    Simple abelian subvariety 37b(1,37) of dimension 1 of J0(37)
    ]
    sage: phi = J._isogeny_to_product_of_simples() ; phi
    Abelian variety morphism:
      From: Abelian variety J0(37) of dimension 2
      To:   Abelian subvariety of dimension 2 of J0(37) x J0(37)
    sage: J[0].intersection(J[1]) == phi.kernel()
    True

    sage: J = J0(22) * J0(37)
    sage: J._isogeny_to_product_of_simples()
    Abelian variety morphism:
      From: Abelian variety J0(22) x J0(37) of dimension 4
      To:   Abelian subvariety of dimension 4 of J0(11) x J0(11) x J0(37) x J0(37)

_isogeny_to_product_of_powers(self)

source code 

Given an abelian variety $A$, return an isogeny
$\phi: A \rightarrow B_1 \times \cdots \times B_n$, where
each $B_i$ is a power of a simple abelian variety.  These
factors will be exactly those returned by
self.decomposition(simple=False).Note that this isogeny is not
unique.

EXAMPLES:
    sage: J = J0(33) ; D = J.decomposition(simple=False) ; len(D)
    2
    sage: phi = J._isogeny_to_product_of_powers() ; phi
    Abelian variety morphism:
      From: Abelian variety J0(33) of dimension 3
      To:   Abelian subvariety of dimension 3 of J0(33) x J0(33)
      
    sage: J = J0(22) * J0(37)
    sage: J._isogeny_to_product_of_powers()
    Abelian variety morphism:
      From: Abelian variety J0(22) x J0(37) of dimension 4
      To:   Abelian subvariety of dimension 4 of J0(22) x J0(37) x J0(22) x J0(37) x J0(22) x J0(37)

complement(self, A=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)

source code 

Return a complement of this abelian variety.

INPUT:
    A -- (default: None); if given, A must be an abelian
         variety that contains self, in which case the
         complement of self is taken inside A.  Otherwise the
         complement is taken in the ambient product Jacobian.
OUTPUT:
    abelian variety
    
EXAMPLES:
    sage: a,b,c = J0(33)
    sage: (a+b).complement()
    Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)
    sage: (a+b).complement() == c
    True
    sage: a.complement(a+b)
    Abelian subvariety of dimension 1 of J0(33)

dual(self)

source code 

Return the dual of this abelian variety.

OUTPUT:
    abelian variety

WARNING: This is currently only implemented when self is an
abelian subvariety of the ambient Jacobian product, and the
complement of self in the ambient product Jacobian share no
common factors.  A more general implementation will require
implementing computation of the intersection pairing on
integral homology and the resulting Weil pairing on torsion.

EXAMPLES:
We compute the dual of the elliptic curve newform abelian
variety of level $33$, and find the kernel of the modular map,
which has structure $(\ZZ/3)^2$.

    sage: A,B,C = J0(33)
    sage: C
    Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)
    sage: Cd, f = C.dual()
    sage: f.matrix()
    [3 0]
    [0 3]
    sage: f.kernel()[0]
    Finite subgroup with invariants [3, 3] over QQ of Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)

By a theorem the modular degree must thus be $3$:
    sage: E = EllipticCurve('33a')
    sage: E.modular_degree()
    3

Next we compute the dual of a $2$-dimensional new simple
abelian subvariety of $J_0(43)$.
    sage: A = AbelianVariety('43b'); A
    Newform abelian subvariety 43b of dimension 2 of J0(43)
    sage: Ad, f = A.dual()

The kernel shows that the modular degree is $2$:
    sage: f.kernel()[0]
    Finite subgroup with invariants [2, 2] over QQ of Newform abelian subvariety 43b of dimension 2 of J0(43)

Unfortunately, the dual is not implemented in general:
    sage: A = J0(22)[0]; A
    Simple abelian subvariety 11a(1,22) of dimension 1 of J0(22)
    sage: A.dual()
    Traceback (most recent call last):
    ...
    NotImplementedError: dual not implemented unless complement shares no simple factors with self.

_factors_with_same_label(self, other)

source code 

Given two modular abelian varieties self and other, this
function returns a list of simple abelian subvarieties
appearing in the decomposition of self that have the same
newform labels.  Each simple factor with a given newform label
appears at most one.

INPUT:
    other -- abelian variety
OUTPUT:
    list of simple abelian varieties

EXAMPLES:
    sage: D = J0(33).decomposition(); D
    [
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33),
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33),
    Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)
    ]
    sage: D[0]._factors_with_same_label(D[1])
    [Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)]
    sage: D[0]._factors_with_same_label(D[2])
    []
    sage: (D[0]+D[1])._factors_with_same_label(D[1] + D[2])
    [Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)]

This illustrates that the multiplicities in the returned list
are 1:
    sage: (D[0]+D[1])._factors_with_same_label(J0(33))
    [Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)]

This illustrates that the ambient product Jacobians do not
have to be the same:
    sage: (D[0]+D[1])._factors_with_same_label(J0(22))
    [Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33)]

This illustrates that the actual factor labels are relevant,
not just the isogeny class.
    sage: (D[0]+D[1])._factors_with_same_label(J1(11))
    []
    sage: J1(11)[0].newform_label()
    '11aG1'

_complement_shares_no_factors_with_same_label(self)

source code 

Return True if no simple factor of self has the same
newform_label as any factor in a Poincare complement of self
in the ambient product Jacobian.

EXAMPLES:
$J_0(37)$ is made up of two non-isogenous elliptic curves:
    sage: J0(37)[0]._complement_shares_no_factors_with_same_label()
    True

$J_0(33)$ decomposes as a product of two isogenous elliptic
curves with a third nonisogenous curve:
    sage: D = J0(33).decomposition(); D
    [
    Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33),
    Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33),
    Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)
    ]
    sage: D[0]._complement_shares_no_factors_with_same_label()
    False
    sage: (D[0]+D[1])._complement_shares_no_factors_with_same_label() 
    True
    sage: D[2]._complement_shares_no_factors_with_same_label()
    True

This example illustrates the relevance of the ambient product
Jacobian.
    sage: D = (J0(11) * J0(11)).decomposition(); D
    [
    Simple abelian subvariety 11a(1,11) of dimension 1 of J0(11) x J0(11),
    Simple abelian subvariety 11a(1,11) of dimension 1 of J0(11) x J0(11)
    ]
    sage: D[0]._complement_shares_no_factors_with_same_label()
    False

This example illustrates that it is the newform label, not the isogeny,
class that matters:
    sage: D = (J0(11)*J1(11)).decomposition(); D
    [
    Simple abelian subvariety 11a(1,11) of dimension 1 of J0(11) x J1(11),
    Simple abelian subvariety 11aG1(1,11) of dimension 1 of J0(11) x J1(11)
    ]
    sage: D[0]._complement_shares_no_factors_with_same_label()
    True
    sage: D[0].newform_label()
    '11a'
    sage: D[1].newform_label()
    '11aG1'            

__getitem__(self, i)
(Indexing operator)

source code 

Return the i-th decomposition factor of self.

EXAMPLES:
    sage: J = J0(389)
    sage: J.decomposition()
    [
    Simple abelian subvariety 389a(1,389) of dimension 1 of J0(389),
    Simple abelian subvariety 389b(1,389) of dimension 2 of J0(389),
    Simple abelian subvariety 389c(1,389) of dimension 3 of J0(389),
    Simple abelian subvariety 389d(1,389) of dimension 6 of J0(389),
    Simple abelian subvariety 389e(1,389) of dimension 20 of J0(389)
    ]
    sage: J[2]
    Simple abelian subvariety 389c(1,389) of dimension 3 of J0(389)
    sage: J[-1]
    Simple abelian subvariety 389e(1,389) of dimension 20 of J0(389)

__getslice__(self, i, j)
(Slicling operator)

source code 

The slice i:j of decompositions of self. 

EXAMPLES:
    sage: J = J0(125); J.decomposition()
    [
    Simple abelian subvariety 125a(1,125) of dimension 2 of J0(125),
    Simple abelian subvariety 125b(1,125) of dimension 2 of J0(125),
    Simple abelian subvariety 125c(1,125) of dimension 4 of J0(125)
    ]
    sage: J[:2]
    [
    Simple abelian subvariety 125a(1,125) of dimension 2 of J0(125),
    Simple abelian subvariety 125b(1,125) of dimension 2 of J0(125)
    ]