The cuspidal subspace#
EXAMPLES:
sage: S = CuspForms(SL2Z,12); S
Cuspidal subspace of dimension 1 of Modular Forms space of dimension 2 for
Modular Group SL(2,Z) of weight 12 over Rational Field
sage: S.basis()
[
q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6)
]
sage: S = CuspForms(Gamma0(33),2); S
Cuspidal subspace of dimension 3 of Modular Forms space of dimension 6 for
Congruence Subgroup Gamma0(33) of weight 2 over Rational Field
sage: S.basis()
[
q - q^5 + O(q^6),
q^2 - q^4 - q^5 + O(q^6),
q^3 + O(q^6)
]
sage: S = CuspForms(Gamma1(3),6); S
Cuspidal subspace of dimension 1 of Modular Forms space of dimension 3 for
Congruence Subgroup Gamma1(3) of weight 6 over Rational Field
sage: S.basis()
[
q - 6*q^2 + 9*q^3 + 4*q^4 + 6*q^5 + O(q^6)
]
>>> from sage.all import *
>>> S = CuspForms(SL2Z,Integer(12)); S
Cuspidal subspace of dimension 1 of Modular Forms space of dimension 2 for
Modular Group SL(2,Z) of weight 12 over Rational Field
>>> S.basis()
[
q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6)
]
>>> S = CuspForms(Gamma0(Integer(33)),Integer(2)); S
Cuspidal subspace of dimension 3 of Modular Forms space of dimension 6 for
Congruence Subgroup Gamma0(33) of weight 2 over Rational Field
>>> S.basis()
[
q - q^5 + O(q^6),
q^2 - q^4 - q^5 + O(q^6),
q^3 + O(q^6)
]
>>> S = CuspForms(Gamma1(Integer(3)),Integer(6)); S
Cuspidal subspace of dimension 1 of Modular Forms space of dimension 3 for
Congruence Subgroup Gamma1(3) of weight 6 over Rational Field
>>> S.basis()
[
q - 6*q^2 + 9*q^3 + 4*q^4 + 6*q^5 + O(q^6)
]
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule(ambient_space)[source]#
Bases:
ModularFormsSubmodule
Base class for cuspidal submodules of ambient spaces of modular forms.
- change_ring(R)[source]#
Change the base ring of
self
toR
, when this makes sense.This differs from
base_extend()
in that there may not be a canonical map fromself
to the new space, as in the first example below. If this space has a character then this may fail when the character cannot be defined overR
, as in the second example.EXAMPLES:
sage: # needs sage.rings.number_field sage: chi = DirichletGroup(109, CyclotomicField(3)).0 sage: S9 = CuspForms(chi, 2, base_ring = CyclotomicField(9)); S9 Cuspidal subspace of dimension 8 of Modular Forms space of dimension 10, character [zeta3 + 1] and weight 2 over Cyclotomic Field of order 9 and degree 6 sage: S9.change_ring(CyclotomicField(3)) Cuspidal subspace of dimension 8 of Modular Forms space of dimension 10, character [zeta3 + 1] and weight 2 over Cyclotomic Field of order 3 and degree 2 sage: S9.change_ring(QQ) Traceback (most recent call last): ... ValueError: Space cannot be defined over Rational Field
>>> from sage.all import * >>> # needs sage.rings.number_field >>> chi = DirichletGroup(Integer(109), CyclotomicField(Integer(3))).gen(0) >>> S9 = CuspForms(chi, Integer(2), base_ring = CyclotomicField(Integer(9))); S9 Cuspidal subspace of dimension 8 of Modular Forms space of dimension 10, character [zeta3 + 1] and weight 2 over Cyclotomic Field of order 9 and degree 6 >>> S9.change_ring(CyclotomicField(Integer(3))) Cuspidal subspace of dimension 8 of Modular Forms space of dimension 10, character [zeta3 + 1] and weight 2 over Cyclotomic Field of order 3 and degree 2 >>> S9.change_ring(QQ) Traceback (most recent call last): ... ValueError: Space cannot be defined over Rational Field
- is_cuspidal()[source]#
Return True since spaces of cusp forms are cuspidal.
EXAMPLES:
sage: CuspForms(4,10).is_cuspidal() True
>>> from sage.all import * >>> CuspForms(Integer(4),Integer(10)).is_cuspidal() True
- modular_symbols(sign=0)[source]#
Return the corresponding space of modular symbols with the given sign.
EXAMPLES:
sage: S = ModularForms(11,2).cuspidal_submodule() sage: S.modular_symbols() 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 sage: S.modular_symbols(sign=-1) Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 1 for Gamma_0(11) of weight 2 with sign -1 over Rational Field sage: M = S.modular_symbols(sign=1); M Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2 for Gamma_0(11) of weight 2 with sign 1 over Rational Field sage: M.sign() 1 sage: S = ModularForms(1,12).cuspidal_submodule() sage: S.modular_symbols() Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 3 for Gamma_0(1) of weight 12 with sign 0 over Rational Field sage: # needs sage.rings.number_field sage: eps = DirichletGroup(13).0 sage: S = CuspForms(eps^2, 2) sage: S.modular_symbols(sign=0) Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6], sign 0, over Cyclotomic Field of order 6 and degree 2 sage: S.modular_symbols(sign=1) Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3 and level 13, weight 2, character [zeta6], sign 1, over Cyclotomic Field of order 6 and degree 2 sage: S.modular_symbols(sign=-1) Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 1 and level 13, weight 2, character [zeta6], sign -1, over Cyclotomic Field of order 6 and degree 2
>>> from sage.all import * >>> S = ModularForms(Integer(11),Integer(2)).cuspidal_submodule() >>> S.modular_symbols() 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 >>> S.modular_symbols(sign=-Integer(1)) Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 1 for Gamma_0(11) of weight 2 with sign -1 over Rational Field >>> M = S.modular_symbols(sign=Integer(1)); M Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2 for Gamma_0(11) of weight 2 with sign 1 over Rational Field >>> M.sign() 1 >>> S = ModularForms(Integer(1),Integer(12)).cuspidal_submodule() >>> S.modular_symbols() Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 3 for Gamma_0(1) of weight 12 with sign 0 over Rational Field >>> # needs sage.rings.number_field >>> eps = DirichletGroup(Integer(13)).gen(0) >>> S = CuspForms(eps**Integer(2), Integer(2)) >>> S.modular_symbols(sign=Integer(0)) Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6], sign 0, over Cyclotomic Field of order 6 and degree 2 >>> S.modular_symbols(sign=Integer(1)) Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3 and level 13, weight 2, character [zeta6], sign 1, over Cyclotomic Field of order 6 and degree 2 >>> S.modular_symbols(sign=-Integer(1)) Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 1 and level 13, weight 2, character [zeta6], sign -1, over Cyclotomic Field of order 6 and degree 2
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_R(ambient_space)[source]#
Bases:
CuspidalSubmodule
Cuspidal submodule over a non-minimal base ring.
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_eps(ambient_space)[source]#
Bases:
CuspidalSubmodule_modsym_qexp
Space of cusp forms with given Dirichlet character.
EXAMPLES:
sage: S = CuspForms(DirichletGroup(5).0,5); S Cuspidal subspace of dimension 1 of Modular Forms space of dimension 3, character [zeta4] and weight 5 over Cyclotomic Field of order 4 and degree 2 sage: S.basis() [ q + (-zeta4 - 1)*q^2 + (6*zeta4 - 6)*q^3 - 14*zeta4*q^4 + (15*zeta4 + 20)*q^5 + O(q^6) ] sage: f = S.0 sage: f.qexp() q + (-zeta4 - 1)*q^2 + (6*zeta4 - 6)*q^3 - 14*zeta4*q^4 + (15*zeta4 + 20)*q^5 + O(q^6) sage: f.qexp(7) q + (-zeta4 - 1)*q^2 + (6*zeta4 - 6)*q^3 - 14*zeta4*q^4 + (15*zeta4 + 20)*q^5 + 12*q^6 + O(q^7) sage: f.qexp(3) q + (-zeta4 - 1)*q^2 + O(q^3) sage: f.qexp(2) q + O(q^2) sage: f.qexp(1) O(q^1)
>>> from sage.all import * >>> S = CuspForms(DirichletGroup(Integer(5)).gen(0),Integer(5)); S Cuspidal subspace of dimension 1 of Modular Forms space of dimension 3, character [zeta4] and weight 5 over Cyclotomic Field of order 4 and degree 2 >>> S.basis() [ q + (-zeta4 - 1)*q^2 + (6*zeta4 - 6)*q^3 - 14*zeta4*q^4 + (15*zeta4 + 20)*q^5 + O(q^6) ] >>> f = S.gen(0) >>> f.qexp() q + (-zeta4 - 1)*q^2 + (6*zeta4 - 6)*q^3 - 14*zeta4*q^4 + (15*zeta4 + 20)*q^5 + O(q^6) >>> f.qexp(Integer(7)) q + (-zeta4 - 1)*q^2 + (6*zeta4 - 6)*q^3 - 14*zeta4*q^4 + (15*zeta4 + 20)*q^5 + 12*q^6 + O(q^7) >>> f.qexp(Integer(3)) q + (-zeta4 - 1)*q^2 + O(q^3) >>> f.qexp(Integer(2)) q + O(q^2) >>> f.qexp(Integer(1)) O(q^1)
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_g0_Q(ambient_space)[source]#
Bases:
CuspidalSubmodule_modsym_qexp
Space of cusp forms for \(\Gamma_0(N)\) over \(\QQ\).
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_g1_Q(ambient_space)[source]#
Bases:
CuspidalSubmodule_gH_Q
Space of cusp forms for \(\Gamma_1(N)\) over \(\QQ\).
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_gH_Q(ambient_space)[source]#
Bases:
CuspidalSubmodule_modsym_qexp
Space of cusp forms for \(\Gamma_H(N)\) over \(\QQ\).
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_level1_Q(ambient_space)[source]#
Bases:
CuspidalSubmodule
Space of cusp forms of level 1 over \(\QQ\).
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_modsym_qexp(ambient_space)[source]#
Bases:
CuspidalSubmodule
Cuspidal submodule with q-expansions calculated via modular symbols.
- hecke_polynomial(n, var='x')[source]#
Return the characteristic polynomial of the Hecke operator T_n on this space. This is computed via modular symbols, and in particular is faster to compute than the matrix itself.
EXAMPLES:
sage: CuspForms(105, 2).hecke_polynomial(2, 'y') y^13 + 5*y^12 - 4*y^11 - 52*y^10 - 34*y^9 + 174*y^8 + 212*y^7 - 196*y^6 - 375*y^5 - 11*y^4 + 200*y^3 + 80*y^2
>>> from sage.all import * >>> CuspForms(Integer(105), Integer(2)).hecke_polynomial(Integer(2), 'y') y^13 + 5*y^12 - 4*y^11 - 52*y^10 - 34*y^9 + 174*y^8 + 212*y^7 - 196*y^6 - 375*y^5 - 11*y^4 + 200*y^3 + 80*y^2
Check that this gives the same answer as computing the Hecke matrix:
sage: CuspForms(105, 2).hecke_matrix(2).charpoly(var='y') y^13 + 5*y^12 - 4*y^11 - 52*y^10 - 34*y^9 + 174*y^8 + 212*y^7 - 196*y^6 - 375*y^5 - 11*y^4 + 200*y^3 + 80*y^2
>>> from sage.all import * >>> CuspForms(Integer(105), Integer(2)).hecke_matrix(Integer(2)).charpoly(var='y') y^13 + 5*y^12 - 4*y^11 - 52*y^10 - 34*y^9 + 174*y^8 + 212*y^7 - 196*y^6 - 375*y^5 - 11*y^4 + 200*y^3 + 80*y^2
Check that Issue #21546 is fixed (this example used to take about 5 hours):
sage: CuspForms(1728, 2).hecke_polynomial(2) # long time (20 sec) x^253 + x^251 - 2*x^249
>>> from sage.all import * >>> CuspForms(Integer(1728), Integer(2)).hecke_polynomial(Integer(2)) # long time (20 sec) x^253 + x^251 - 2*x^249
- new_submodule(p=None)[source]#
Return the new subspace of this space of cusp forms. This is computed using modular symbols.
EXAMPLES:
sage: CuspForms(55).new_submodule() Modular Forms subspace of dimension 3 of Modular Forms space of dimension 8 for Congruence Subgroup Gamma0(55) of weight 2 over Rational Field
>>> from sage.all import * >>> CuspForms(Integer(55)).new_submodule() Modular Forms subspace of dimension 3 of Modular Forms space of dimension 8 for Congruence Subgroup Gamma0(55) of weight 2 over Rational Field
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_wt1_eps(ambient_space)[source]#
Bases:
CuspidalSubmodule
Space of cusp forms of weight 1 with specified character.
- class sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_wt1_gH(ambient_space)[source]#
Bases:
CuspidalSubmodule
Space of cusp forms of weight 1 for a GammaH group.