The space of \(p\)-adic weights¶
A \(p\)-adic weight is a continuous character \(\ZZ_p^\times \to \CC_p^\times\). These are the \(\CC_p\)-points of a rigid space over \(\QQ_p\), which is isomorphic to a disjoint union of copies (indexed by \((\ZZ/p\ZZ)^\times\)) of the open unit \(p\)-adic disc.
Sage supports both “classical points”, which are determined by the data of a Dirichlet character modulo \(p^m\) for some \(m\) and an integer \(k\) (corresponding to the character \(z \mapsto z^k \chi(z)\)) and “non-classical points” which are determined by the data of an element of \((\ZZ/p\ZZ)^\times\) and an element \(w \in \CC_p\) with \(|w - 1| < 1\).
EXAMPLES:
sage: W = pAdicWeightSpace(17)
sage: W
Space of 17-adic weight-characters
 defined over 17-adic Field with capped relative precision 20
sage: R.<x> = QQ[]
sage: L = Qp(17).extension(x^2 - 17, names='a'); L.rename('L')
sage: W.base_extend(L)
Space of 17-adic weight-characters defined over L
>>> from sage.all import *
>>> W = pAdicWeightSpace(Integer(17))
>>> W
Space of 17-adic weight-characters
 defined over 17-adic Field with capped relative precision 20
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> L = Qp(Integer(17)).extension(x**Integer(2) - Integer(17), names='a'); L.rename('L')
>>> W.base_extend(L)
Space of 17-adic weight-characters defined over L
We create a simple element of \(\mathcal{W}\): the algebraic character, \(x \mapsto x^6\):
sage: kappa = W(6)
sage: kappa(5)
15625
sage: kappa(5) == 5^6
True
>>> from sage.all import *
>>> kappa = W(Integer(6))
>>> kappa(Integer(5))
15625
>>> kappa(Integer(5)) == Integer(5)**Integer(6)
True
A locally algebraic character, \(x \mapsto x^6 \chi(x)\) for \(\chi\) a Dirichlet character mod \(p\):
sage: kappa2 = W(6, DirichletGroup(17, Qp(17)).0^8)
sage: kappa2(5) == -5^6
True
sage: kappa2(13) == 13^6
True
>>> from sage.all import *
>>> kappa2 = W(Integer(6), DirichletGroup(Integer(17), Qp(Integer(17))).gen(0)**Integer(8))
>>> kappa2(Integer(5)) == -Integer(5)**Integer(6)
True
>>> kappa2(Integer(13)) == Integer(13)**Integer(6)
True
A non-locally-algebraic character, sending the generator 18 of \(1 + 17 \ZZ_{17}\) to 35 and acting as \(\mu \mapsto \mu^4\) on the group of 16th roots of unity:
sage: kappa3 = W(35 + O(17^20), 4, algebraic=False)
sage: kappa3(2)
16 + 8*17 + ... + O(17^20)
>>> from sage.all import *
>>> kappa3 = W(Integer(35) + O(Integer(17)**Integer(20)), Integer(4), algebraic=False)
>>> kappa3(Integer(2))
16 + 8*17 + ... + O(17^20)
AUTHORS:
- David Loeffler (2008-9) 
- class sage.modular.overconvergent.weightspace.AlgebraicWeight(parent, k, chi=None)[source]¶
- Bases: - WeightCharacter- A point in weight space corresponding to a locally algebraic character, of the form \(x \mapsto \chi(x) x^k\) where \(k\) is an integer and \(\chi\) is a Dirichlet character modulo \(p^n\) for some \(n\). - Lvalue()[source]¶
- Return the value of the \(p\)-adic \(L\)-function of \(\QQ\) evaluated at this weight-character. - If the character is \(x \mapsto x^k \chi(x)\) where \(k > 0\) and \(\chi\) has conductor a power of \(p\), this is an element of the number field generated by the values of \(\chi\), equal to the value of the complex \(L\)-function \(L(1-k, \chi)\). If \(\chi\) is trivial, it is equal to \((1 - p^{k-1})\zeta(1-k)\). - At present this is not implemented in any other cases, except the trivial character (for which the value is \(\infty\)). - Todo - Implement this more generally using the Amice transform machinery in sage/schemes/elliptic_curves/padic_lseries.py, which should clearly be factored out into a separate class. - EXAMPLES: - sage: pAdicWeightSpace(7)(4).Lvalue() == (1 - 7^3)*zeta__exact(-3) True sage: pAdicWeightSpace(7)(5, DirichletGroup(7, Qp(7)).0^4).Lvalue() 0 sage: pAdicWeightSpace(7)(6, DirichletGroup(7, Qp(7)).0^4).Lvalue() 1 + 2*7 + 7^2 + 3*7^3 + 3*7^5 + 4*7^6 + 2*7^7 + 5*7^8 + 2*7^9 + 3*7^10 + 6*7^11 + 2*7^12 + 3*7^13 + 5*7^14 + 6*7^15 + 5*7^16 + 3*7^17 + 6*7^18 + O(7^19) - >>> from sage.all import * >>> pAdicWeightSpace(Integer(7))(Integer(4)).Lvalue() == (Integer(1) - Integer(7)**Integer(3))*zeta__exact(-Integer(3)) True >>> pAdicWeightSpace(Integer(7))(Integer(5), DirichletGroup(Integer(7), Qp(Integer(7))).gen(0)**Integer(4)).Lvalue() 0 >>> pAdicWeightSpace(Integer(7))(Integer(6), DirichletGroup(Integer(7), Qp(Integer(7))).gen(0)**Integer(4)).Lvalue() 1 + 2*7 + 7^2 + 3*7^3 + 3*7^5 + 4*7^6 + 2*7^7 + 5*7^8 + 2*7^9 + 3*7^10 + 6*7^11 + 2*7^12 + 3*7^13 + 5*7^14 + 6*7^15 + 5*7^16 + 3*7^17 + 6*7^18 + O(7^19) 
 - chi()[source]¶
- If this character is \(x \mapsto x^k \chi(x)\) for an integer \(k\) and a Dirichlet character \(\chi\), return \(\chi\). - EXAMPLES: - sage: kappa = pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0^14) sage: kappa.chi() Dirichlet character modulo 29 of conductor 29 mapping 2 |--> 28 + 28*29 + 28*29^2 + ... + O(29^20) - >>> from sage.all import * >>> kappa = pAdicWeightSpace(Integer(29))(Integer(13), DirichletGroup(Integer(29), Qp(Integer(29))).gen(0)**Integer(14)) >>> kappa.chi() Dirichlet character modulo 29 of conductor 29 mapping 2 |--> 28 + 28*29 + 28*29^2 + ... + O(29^20) 
 - k()[source]¶
- If this character is \(x \mapsto x^k \chi(x)\) for an integer \(k\) and a Dirichlet character \(\chi\), return \(k\). - EXAMPLES: - sage: kappa = pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0^14) sage: kappa.k() 13 - >>> from sage.all import * >>> kappa = pAdicWeightSpace(Integer(29))(Integer(13), DirichletGroup(Integer(29), Qp(Integer(29))).gen(0)**Integer(14)) >>> kappa.k() 13 
 - teichmuller_type()[source]¶
- Return the Teichmuller type of this weight-character \(\kappa\). - This is the unique \(t \in \ZZ/(p-1)\ZZ\) such that \(\kappa(\mu) = \mu^t\) for \(\mu\) a \((p-1)\)-st root of 1. - For \(p = 2\) this does not make sense, but we still want the Teichmuller type to correspond to the index of the component of weight space in which \(\kappa\) lies, so we return 1 if \(\kappa\) is odd and 0 otherwise. - EXAMPLES: - sage: pAdicWeightSpace(11)(2, DirichletGroup(11,QQ).0).teichmuller_type() 7 sage: pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0).teichmuller_type() 14 sage: pAdicWeightSpace(2)(3, DirichletGroup(4,QQ).0).teichmuller_type() 0 - >>> from sage.all import * >>> pAdicWeightSpace(Integer(11))(Integer(2), DirichletGroup(Integer(11),QQ).gen(0)).teichmuller_type() 7 >>> pAdicWeightSpace(Integer(29))(Integer(13), DirichletGroup(Integer(29), Qp(Integer(29))).gen(0)).teichmuller_type() 14 >>> pAdicWeightSpace(Integer(2))(Integer(3), DirichletGroup(Integer(4),QQ).gen(0)).teichmuller_type() 0 
 
- class sage.modular.overconvergent.weightspace.ArbitraryWeight(parent, w, t)[source]¶
- Bases: - WeightCharacter- Create the element of \(p\)-adic weight space in the given component mapping 1 + p to w. - Here w must be an element of a \(p\)-adic field, with finite precision. - EXAMPLES: - sage: pAdicWeightSpace(17)(1 + 17^2 + O(17^3), 11, False) [1 + 17^2 + O(17^3), 11] - >>> from sage.all import * >>> pAdicWeightSpace(Integer(17))(Integer(1) + Integer(17)**Integer(2) + O(Integer(17)**Integer(3)), Integer(11), False) [1 + 17^2 + O(17^3), 11] - teichmuller_type()[source]¶
- Return the Teichmuller type of this weight-character \(\kappa\). - This is the unique \(t \in \ZZ/(p-1)\ZZ\) such that \(\kappa(\mu) = \mu^t\) for mu a \((p-1)\)-st root of 1. - For \(p = 2\) this does not make sense, but we still want the Teichmuller type to correspond to the index of the component of weight space in which \(\kappa\) lies, so we return 1 if \(\kappa\) is odd and 0 otherwise. - EXAMPLES: - sage: pAdicWeightSpace(17)(1 + 3*17 + 2*17^2 + O(17^3), 8, False).teichmuller_type() 8 sage: pAdicWeightSpace(2)(1 + 2 + O(2^2), 1, False).teichmuller_type() 1 - >>> from sage.all import * >>> pAdicWeightSpace(Integer(17))(Integer(1) + Integer(3)*Integer(17) + Integer(2)*Integer(17)**Integer(2) + O(Integer(17)**Integer(3)), Integer(8), False).teichmuller_type() 8 >>> pAdicWeightSpace(Integer(2))(Integer(1) + Integer(2) + O(Integer(2)**Integer(2)), Integer(1), False).teichmuller_type() 1 
 
- class sage.modular.overconvergent.weightspace.WeightCharacter(parent)[source]¶
- Bases: - Element- Abstract base class representing an element of the \(p\)-adic weight space \(Hom(\ZZ_p^\times, \CC_p^\times)\). - Lvalue()[source]¶
- Return the value of the \(p\)-adic \(L\)-function of \(\QQ\), which can be regarded as a rigid-analytic function on weight space, evaluated at this character. - EXAMPLES: - sage: W = pAdicWeightSpace(11) sage: sage.modular.overconvergent.weightspace.WeightCharacter(W).Lvalue() Traceback (most recent call last): ... NotImplementedError - >>> from sage.all import * >>> W = pAdicWeightSpace(Integer(11)) >>> sage.modular.overconvergent.weightspace.WeightCharacter(W).Lvalue() Traceback (most recent call last): ... NotImplementedError 
 - base_extend(R)[source]¶
- Extend scalars to the base ring R. - The ring R must have a canonical map from the current base ring. - EXAMPLES: - sage: w = pAdicWeightSpace(17, QQ)(3) sage: w.base_extend(Qp(17)) 3 - >>> from sage.all import * >>> w = pAdicWeightSpace(Integer(17), QQ)(Integer(3)) >>> w.base_extend(Qp(Integer(17))) 3 
 - is_even()[source]¶
- Return - Trueif this weight-character sends -1 to +1.- EXAMPLES: - sage: pAdicWeightSpace(17)(0).is_even() True sage: pAdicWeightSpace(17)(11).is_even() False sage: pAdicWeightSpace(17)(1 + 17 + O(17^20), 3, False).is_even() False sage: pAdicWeightSpace(17)(1 + 17 + O(17^20), 4, False).is_even() True - >>> from sage.all import * >>> pAdicWeightSpace(Integer(17))(Integer(0)).is_even() True >>> pAdicWeightSpace(Integer(17))(Integer(11)).is_even() False >>> pAdicWeightSpace(Integer(17))(Integer(1) + Integer(17) + O(Integer(17)**Integer(20)), Integer(3), False).is_even() False >>> pAdicWeightSpace(Integer(17))(Integer(1) + Integer(17) + O(Integer(17)**Integer(20)), Integer(4), False).is_even() True 
 - is_trivial()[source]¶
- Return - Trueif and only if this is the trivial character.- EXAMPLES: - sage: pAdicWeightSpace(11)(2).is_trivial() False sage: pAdicWeightSpace(11)(2, DirichletGroup(11, QQ).0).is_trivial() False sage: pAdicWeightSpace(11)(0).is_trivial() True - >>> from sage.all import * >>> pAdicWeightSpace(Integer(11))(Integer(2)).is_trivial() False >>> pAdicWeightSpace(Integer(11))(Integer(2), DirichletGroup(Integer(11), QQ).gen(0)).is_trivial() False >>> pAdicWeightSpace(Integer(11))(Integer(0)).is_trivial() True 
 - one_over_Lvalue()[source]¶
- Return the reciprocal of the \(p\)-adic \(L\)-function evaluated at this weight-character. - If the weight-character is odd, then the \(L\)-function is zero, so an error will be raised. - EXAMPLES: - sage: pAdicWeightSpace(11)(4).one_over_Lvalue() -12/133 sage: pAdicWeightSpace(11)(3, DirichletGroup(11, QQ).0).one_over_Lvalue() -1/6 sage: pAdicWeightSpace(11)(3).one_over_Lvalue() Traceback (most recent call last): ... ZeroDivisionError: rational division by zero sage: pAdicWeightSpace(11)(0).one_over_Lvalue() 0 sage: type(_) <class 'sage.rings.integer.Integer'> - >>> from sage.all import * >>> pAdicWeightSpace(Integer(11))(Integer(4)).one_over_Lvalue() -12/133 >>> pAdicWeightSpace(Integer(11))(Integer(3), DirichletGroup(Integer(11), QQ).gen(0)).one_over_Lvalue() -1/6 >>> pAdicWeightSpace(Integer(11))(Integer(3)).one_over_Lvalue() Traceback (most recent call last): ... ZeroDivisionError: rational division by zero >>> pAdicWeightSpace(Integer(11))(Integer(0)).one_over_Lvalue() 0 >>> type(_) <class 'sage.rings.integer.Integer'> 
 - pAdicEisensteinSeries(ring, prec=20)[source]¶
- Calculate the \(q\)-expansion of the \(p\)-adic Eisenstein series of given weight-character, normalised so the constant term is 1. - EXAMPLES: - sage: kappa = pAdicWeightSpace(3)(3, DirichletGroup(3,QQ).0) sage: kappa.pAdicEisensteinSeries(QQ[['q']], 20) 1 - 9*q + 27*q^2 - 9*q^3 - 117*q^4 + 216*q^5 + 27*q^6 - 450*q^7 + 459*q^8 - 9*q^9 - 648*q^10 + 1080*q^11 - 117*q^12 - 1530*q^13 + 1350*q^14 + 216*q^15 - 1845*q^16 + 2592*q^17 + 27*q^18 - 3258*q^19 + O(q^20) - >>> from sage.all import * >>> kappa = pAdicWeightSpace(Integer(3))(Integer(3), DirichletGroup(Integer(3),QQ).gen(0)) >>> kappa.pAdicEisensteinSeries(QQ[['q']], Integer(20)) 1 - 9*q + 27*q^2 - 9*q^3 - 117*q^4 + 216*q^5 + 27*q^6 - 450*q^7 + 459*q^8 - 9*q^9 - 648*q^10 + 1080*q^11 - 117*q^12 - 1530*q^13 + 1350*q^14 + 216*q^15 - 1845*q^16 + 2592*q^17 + 27*q^18 - 3258*q^19 + O(q^20) 
 - values_on_gens()[source]¶
- If \(\kappa\) is this character, calculate the values \((\kappa(r), t)\) where \(r\) is \(1 + p\) (or 5 if \(p = 2\)) and \(t\) is the unique element of \(\ZZ/(p-1)\ZZ\) such that \(\kappa(\mu) = \mu^t\) for \(\mu\) a (p-1)st root of unity. (If \(p = 2\), we take \(t\) to be 0 or 1 according to whether \(\kappa\) is odd or even.) These two values uniquely determine the character \(\kappa\). - EXAMPLES: - sage: W = pAdicWeightSpace(11); W(2).values_on_gens() (1 + 2*11 + 11^2 + O(11^20), 2) sage: W(2, DirichletGroup(11, QQ).0).values_on_gens() (1 + 2*11 + 11^2 + O(11^20), 7) sage: W(1 + 2*11 + O(11^5), 4, algebraic = False).values_on_gens() (1 + 2*11 + O(11^5), 4) - >>> from sage.all import * >>> W = pAdicWeightSpace(Integer(11)); W(Integer(2)).values_on_gens() (1 + 2*11 + 11^2 + O(11^20), 2) >>> W(Integer(2), DirichletGroup(Integer(11), QQ).gen(0)).values_on_gens() (1 + 2*11 + 11^2 + O(11^20), 7) >>> W(Integer(1) + Integer(2)*Integer(11) + O(Integer(11)**Integer(5)), Integer(4), algebraic = False).values_on_gens() (1 + 2*11 + O(11^5), 4) 
 
- class sage.modular.overconvergent.weightspace.WeightSpace_class(p, base_ring)[source]¶
- Bases: - Parent- The space of \(p\)-adic weight-characters \(\mathcal{W} = {\rm Hom}(\ZZ_p^\times, \CC_p^\times)\). - This is isomorphic to a disjoint union of \((p-1)\) open discs of radius 1 (or 2 such discs if \(p = 2\)), with the parameter on the open disc corresponding to the image of \(1 + p\) (or 5 if \(p = 2\)) - base_extend(R)[source]¶
- Extend scalars to the ring R. - There must be a canonical coercion map from the present base ring to R. - EXAMPLES: - sage: W = pAdicWeightSpace(3, QQ) sage: W.base_extend(Qp(3)) Space of 3-adic weight-characters defined over 3-adic Field with capped relative precision 20 sage: W.base_extend(IntegerModRing(12)) Traceback (most recent call last): ... TypeError: No coercion map from 'Rational Field' to 'Ring of integers modulo 12' is defined - >>> from sage.all import * >>> W = pAdicWeightSpace(Integer(3), QQ) >>> W.base_extend(Qp(Integer(3))) Space of 3-adic weight-characters defined over 3-adic Field with capped relative precision 20 >>> W.base_extend(IntegerModRing(Integer(12))) Traceback (most recent call last): ... TypeError: No coercion map from 'Rational Field' to 'Ring of integers modulo 12' is defined 
 
- sage.modular.overconvergent.weightspace.WeightSpace_constructor(p, base_ring=None)[source]¶
- Construct the \(p\)-adic weight space for the given prime p. - A \(p\)-adic weight is a continuous character \(\ZZ_p^\times \to \CC_p^\times\). These are the \(\CC_p\)-points of a rigid space over \(\QQ_p\), which is isomorphic to a disjoint union of copies (indexed by \((\ZZ/p\ZZ)^\times\)) of the open unit \(p\)-adic disc. - Note that the “base ring” of a \(p\)-adic weight is the smallest ring containing the image of \(\ZZ\); in particular, although the default base ring is \(\QQ_p\), base ring \(\QQ\) will also work. - EXAMPLES: - sage: pAdicWeightSpace(3) # indirect doctest Space of 3-adic weight-characters defined over 3-adic Field with capped relative precision 20 sage: pAdicWeightSpace(3, QQ) Space of 3-adic weight-characters defined over Rational Field sage: pAdicWeightSpace(10) Traceback (most recent call last): ... ValueError: p must be prime - >>> from sage.all import * >>> pAdicWeightSpace(Integer(3)) # indirect doctest Space of 3-adic weight-characters defined over 3-adic Field with capped relative precision 20 >>> pAdicWeightSpace(Integer(3), QQ) Space of 3-adic weight-characters defined over Rational Field >>> pAdicWeightSpace(Integer(10)) Traceback (most recent call last): ... ValueError: p must be prime