Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
""" Ambient Jacobian Abelian Variety
TESTS::
sage: loads(dumps(J0(37))) == J0(37) True sage: loads(dumps(J1(13))) == J1(13) True """
simple_factorization_of_modsym_space, modsym_lattices, ModularAbelianVariety_modsym)
""" Return the ambient Jacobian attached to a given congruence subgroup.
The result is cached using a weakref. This function is called internally by modular abelian variety constructors.
INPUT:
- ``group`` - a congruence subgroup.
OUTPUT: a modular abelian variety attached
EXAMPLES::
sage: import sage.modular.abvar.abvar_ambient_jacobian as abvar_ambient_jacobian sage: A = abvar_ambient_jacobian.ModAbVar_ambient_jacobian(Gamma0(11)) sage: A Abelian variety J0(11) of dimension 1 sage: B = abvar_ambient_jacobian.ModAbVar_ambient_jacobian(Gamma0(11)) sage: A is B True
You can get access to and/or clear the cache as follows::
sage: abvar_ambient_jacobian._cache = {} sage: B = abvar_ambient_jacobian.ModAbVar_ambient_jacobian(Gamma0(11)) sage: A is B False """
""" An ambient Jacobian modular abelian variety attached to a congruence subgroup. """ """ Create an ambient Jacobian modular abelian variety.
EXAMPLES::
sage: A = J0(37); A Abelian variety J0(37) of dimension 2 sage: type(A) <class 'sage.modular.abvar.abvar_ambient_jacobian.ModAbVar_ambient_jacobian_class_with_category'> sage: A.group() Congruence Subgroup Gamma0(37) """
""" Return the modular symbols space associated to this ambient Jacobian.
OUTPUT: modular symbols space
EXAMPLES::
sage: M = J0(33)._modular_symbols(); M 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(33)._modular_symbols() is M True """
""" Return string representation of this Jacobian modular abelian variety.
EXAMPLES::
sage: A = J0(11); A Abelian variety J0(11) of dimension 1 sage: A._repr_() 'Abelian variety J0(11) of dimension 1' sage: A.rename("J_0(11)") sage: A J_0(11)
We now clear the cache to get rid of our renamed `J_0(11)`.
::
sage: import sage.modular.abvar.abvar_ambient_jacobian as abvar_ambient_jacobian sage: abvar_ambient_jacobian._cache = {} """ '' if self.base_field() == QQ else ' over %s'%self.base_field())
""" Return Latex representation of self.
EXAMPLES::
sage: latex(J0(37)) J_0(37) sage: J1(13)._latex_() 'J_1(13)' sage: latex(JH(389,[16])) J_H(389,[16]) """
""" Return the ambient modular abelian variety that contains self. Since self is a Jacobian modular abelian variety, this is just self.
OUTPUT: abelian variety
EXAMPLES::
sage: A = J0(17) sage: A.ambient_variety() Abelian variety J0(17) of dimension 1 sage: A is A.ambient_variety() True """
""" Return the group that this Jacobian modular abelian variety is attached to.
EXAMPLES::
sage: J1(37).group() Congruence Subgroup Gamma1(37) sage: J0(5077).group() Congruence Subgroup Gamma0(5077) sage: J = GammaH(11,[3]).modular_abelian_variety(); J Abelian variety JH(11,[3]) of dimension 1 sage: J.group() Congruence Subgroup Gamma_H(11) with H generated by [3] """
""" Return the tuple of congruence subgroups attached to this ambient Jacobian. This is always a tuple of length 1.
OUTPUT: tuple
EXAMPLES::
sage: J0(37).groups() (Congruence Subgroup Gamma0(37),) """
""" Calculate generators for the endomorphism ring of self.
EXAMPLES::
sage: J0(11)._calculate_endomorphism_generators() [Abelian variety endomorphism of Abelian variety J0(11) of dimension 1] sage: ls = J0(46)._calculate_endomorphism_generators() ; ls [Abelian variety endomorphism of Abelian variety J0(46) of dimension 5, Abelian variety endomorphism of Abelian variety J0(46) of dimension 5, Abelian variety endomorphism of Abelian variety J0(46) of dimension 5, Abelian variety endomorphism of Abelian variety J0(46) of dimension 5, Abelian variety endomorphism of Abelian variety J0(46) of dimension 5] sage: len(ls) == J0(46).dimension() True """
""" Return the t-th degeneracy map from self to J(level). Here t must be a divisor of either level/self.level() or self.level()/level.
INPUT:
- ``level`` - integer (multiple or divisor of level of self)
- ``t`` - divisor of quotient of level of self and level
- ``check`` - bool (default: True); if True do some checks on the input
OUTPUT: a morphism
EXAMPLES::
sage: J0(11).degeneracy_map(33) Degeneracy map from Abelian variety J0(11) of dimension 1 to Abelian variety J0(33) of dimension 3 defined by [1] sage: J0(11).degeneracy_map(33).matrix() [ 0 -3 2 1 -2 0] [ 1 -2 0 1 0 -1] sage: J0(11).degeneracy_map(33,3).matrix() [-1 0 0 0 1 -2] [-1 -1 1 -1 1 0] sage: J0(33).degeneracy_map(11,1).matrix() [ 0 1] [ 0 -1] [ 1 -1] [ 0 1] [-1 1] [ 0 0] sage: J0(11).degeneracy_map(33,1).matrix() * J0(33).degeneracy_map(11,1).matrix() [4 0] [0 4] """ raise ValueError("level must be divisible by level of self") raise ValueError("t must divide the quotient of the two levels")
#Jdest = Mself.ambient_module().modular_symbols_of_level(level).cuspidal_subspace().abelian_variety()
""" Return the dimension of this modular abelian variety.
EXAMPLES::
sage: J0(2007).dimension() 221 sage: J1(13).dimension() 2 sage: J1(997).dimension() 40920 sage: J0(389).dimension() 32 sage: JH(389,[4]).dimension() 64 sage: J1(389).dimension() 6112 """
""" Decompose this ambient Jacobian as a product of abelian subvarieties, up to isogeny.
EXAMPLES::
sage: J0(33).decomposition(simple=False) [ Abelian subvariety of dimension 2 of J0(33), Abelian subvariety of dimension 1 of J0(33) ] sage: J0(33).decomposition(simple=False)[1].is_simple() True sage: J0(33).decomposition(simple=False)[0].is_simple() False sage: J0(33).decomposition(simple=False) [ Abelian subvariety of dimension 2 of J0(33), Simple abelian subvariety 33a(None,33) of dimension 1 of J0(33) ] sage: J0(33).decomposition(simple=True) [ 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) ] """
else: newform_level = (newform_level, group), is_simple=is_simple, isogeny_number=isogeny_number, number=(number, level), check=False)
# This line below could be safely deleted. It basically creates a circular # reference so that say J0(389)[0] + J0(389)[1] doesn't do two separate # decompositions. Memory will be freed though, at least if you do # import gc; gc.collect().
""" Return the newforms of the simple subvarieties in the decomposition of self as a product of simple subvarieties, up to isogeny.
OUTPUT:
- an array of newforms
EXAMPLES::
sage: J0(81).newform_decomposition('a') [q - 2*q^4 + O(q^6), q - 2*q^4 + O(q^6), q + a0*q^2 + q^4 - a0*q^5 + O(q^6)]
sage: J1(19).newform_decomposition('a') [q - 2*q^3 - 2*q^4 + 3*q^5 + O(q^6), q + a1*q^2 + (-1/9*a1^5 - 1/3*a1^4 - 1/3*a1^3 + 1/3*a1^2 - a1 - 1)*q^3 + (4/9*a1^5 + 2*a1^4 + 14/3*a1^3 + 17/3*a1^2 + 6*a1 + 2)*q^4 + (-2/3*a1^5 - 11/3*a1^4 - 10*a1^3 - 14*a1^2 - 15*a1 - 9)*q^5 + O(q^6)] """ return [] len(Integer(N/d).divisors()) for d in N.divisors()] |