Spaces of Distributions for Pollack-Stevens modular symbols

The Pollack-Stevens version of modular symbols take values on a \(\Sigma_0(N)\)-module which can be either a symmetric power of the standard representation of GL2, or a finite approximation module to the module of overconvergent distributions.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import Symk
sage: S = Symk(6); S
Sym^6 Q^2
sage: v = S(list(range(7))); v
(0, 1, 2, 3, 4, 5, 6)
sage: v.act_right([1,2,3,4])
(18432, 27136, 39936, 58752, 86400, 127008, 186624)

sage: S = Symk(4,Zp(5)); S
Sym^4 Z_5^2
sage: S([1,2,3,4,5])
(1 + O(5^20), 2 + O(5^20), 3 + O(5^20), 4 + O(5^20), 5 + O(5^21))
sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions
sage: D = OverconvergentDistributions(3, 11, 5); D
Space of 11-adic distributions with k=3 action and precision cap 5
sage: D([1,2,3,4,5])
(1 + O(11^5), 2 + O(11^4), 3 + O(11^3), 4 + O(11^2), 5 + O(11))
class sage.modular.pollack_stevens.distributions.OverconvergentDistributions_abstract(k, p=None, prec_cap=None, base=None, character=None, adjuster=None, act_on_left=False, dettwist=None, act_padic=False, implementation=None)

Bases: sage.modules.module.Module

Parent object for distributions. Not to be used directly, see derived classes Symk_class and OverconvergentDistributions_class.

INPUT:

  • k – integer; \(k\) is the usual modular forms weight minus 2
  • p – None or prime
  • prec_cap – None or positive integer
  • base – None or the base ring over which to construct the distributions
  • character – None or Dirichlet character
  • adjuster – None or a way to specify the action among different conventions
  • act_on_left – bool (default: False)
  • dettwist – None or integer (twist by determinant). Ignored for Symk spaces
  • act_padic – bool (default: False) If true, will allow action by \(p\)-adic matrices.
  • implementation – string (default: None) Either automatic (if None), ‘vector’ or ‘long’.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions
sage: OverconvergentDistributions(2, 17, 100)
Space of 17-adic distributions with k=2 action and precision cap 100

sage: D = OverconvergentDistributions(2, 3, 5); D
Space of 3-adic distributions with k=2 action and precision cap 5
sage: type(D)
<class 'sage.modular.pollack_stevens.distributions.OverconvergentDistributions_class_with_category'>
acting_matrix(g, M)

Return the matrix for the action of \(g\) on self, truncated to the first \(M\) moments.

EXAMPLES:

sage: V = Symk(3)
sage: from sage.modular.pollack_stevens.sigma0 import Sigma0
sage: V.acting_matrix(Sigma0(1)([3,4,0,1]), 4)
[27 36 48 64]
[ 0  9 24 48]
[ 0  0  3 12]
[ 0  0  0  1]

sage: from sage.modular.btquotients.pautomorphicform import _btquot_adjuster
sage: V = Symk(3, adjuster = _btquot_adjuster())
sage: from sage.modular.pollack_stevens.sigma0 import Sigma0
sage: V.acting_matrix(Sigma0(1)([3,4,0,1]), 4)
[  1   4  16  64]
[  0   3  24 144]
[  0   0   9 108]
[  0   0   0  27]
approx_module(M=None)

Return the \(M\)-th approximation module, or if \(M\) is not specified, return the largest approximation module.

INPUT:

  • M – None or nonnegative integer that is at most the precision cap

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions
sage: D = OverconvergentDistributions(0, 5, 10)
sage: D.approx_module()
Ambient free module of rank 10 over the principal ideal domain 5-adic Ring with capped absolute precision 10
sage: D.approx_module(1)
Ambient free module of rank 1 over the principal ideal domain 5-adic Ring with capped absolute precision 10
sage: D.approx_module(0)
Ambient free module of rank 0 over the principal ideal domain 5-adic Ring with capped absolute precision 10

Note that M must be at most the precision cap, and must be nonnegative:

sage: D.approx_module(11)
Traceback (most recent call last):
...
ValueError: M (=11) must be less than or equal to the precision cap (=10)
sage: D.approx_module(-1)
Traceback (most recent call last):
...
ValueError: rank (=-1) must be nonnegative
basis(M=None)

Return a basis for this space of distributions.

INPUT:

  • M – (Default: None) If not None, specifies the M-th approximation module, in case that this makes sense.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7, 4); D
Space of 7-adic distributions with k=0 action and precision cap 4
sage: D.basis()
[(1 + O(7^4), O(7^3), O(7^2), O(7)),
 (O(7^4), 1 + O(7^3), O(7^2), O(7)),
 (O(7^4), O(7^3), 1 + O(7^2), O(7)),
 (O(7^4), O(7^3), O(7^2), 1 + O(7))]
sage: D.basis(2)
[(1 + O(7^2), O(7)), (O(7^2), 1 + O(7))]
sage: D = Symk(3, base=QQ); D
Sym^3 Q^2
sage: D.basis()
[(1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)]
sage: D.basis(2)
Traceback (most recent call last):
...
ValueError: Sym^k objects do not support approximation modules
clear_cache()

Clear some caches that are created only for speed purposes.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7, 10)
sage: D.clear_cache()
lift(p=None, M=None, new_base_ring=None)

Return distribution space that contains lifts with given p, precision cap M, and base ring new_base_ring.

INPUT:

  • p – prime or None
  • M – nonnegative integer or None
  • new_base_ring – ring or None

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = Symk(0, Qp(7)); D
Sym^0 Q_7^2
sage: D.lift(M=20)
Space of 7-adic distributions with k=0 action and precision cap 20
sage: D.lift(p=7, M=10)
Space of 7-adic distributions with k=0 action and precision cap 10
sage: D.lift(p=7, M=10, new_base_ring=QpCR(7,15)).base_ring()
7-adic Field with capped relative precision 15
precision_cap()

Return the precision cap on distributions.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7, 10); D
Space of 7-adic distributions with k=0 action and precision cap 10
sage: D.precision_cap()
10
sage: D = Symk(389, base=QQ); D
Sym^389 Q^2
sage: D.precision_cap()
390
prime()

Return prime \(p\) such that this is a space of \(p\)-adic distributions.

In case this space is Symk of a non-padic field, we return 0.

OUTPUT:

  • a prime or 0

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7); D
Space of 7-adic distributions with k=0 action and precision cap 20
sage: D.prime()
7
sage: D = Symk(4, base=GF(7)); D
Sym^4 (Finite Field of size 7)^2
sage: D.prime()
0

But Symk of a \(p\)-adic field does work:

sage: D = Symk(4, base=Qp(7)); D
Sym^4 Q_7^2
sage: D.prime()
7
sage: D.is_symk()
True
random_element(M=None, **args)

Return a random element of the \(M\)-th approximation module with non-negative valuation.

INPUT:

  • M – None or a nonnegative integer

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions
sage: D = OverconvergentDistributions(0, 5, 10)
sage: D.random_element()
(..., ..., ..., ..., ..., ..., ..., ..., ..., ...)
sage: D.random_element(0)
()
sage: D.random_element(5)
(..., ..., ..., ..., ...)
sage: D.random_element(-1)
Traceback (most recent call last):
...
ValueError: rank (=-1) must be nonnegative
sage: D.random_element(11)
Traceback (most recent call last):
...
ValueError: M (=11) must be less than or equal to the precision cap (=10)
weight()

Return the weight of this distribution space. The standard caveat applies, namely that the weight of \(Sym^k\) is defined to be \(k\), not \(k+2\).

OUTPUT:

  • nonnegative integer

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7); D
Space of 7-adic distributions with k=0 action and precision cap 20
sage: D.weight()
0
sage: OverconvergentDistributions(389, 7).weight()
389
class sage.modular.pollack_stevens.distributions.OverconvergentDistributions_class(k, p=None, prec_cap=None, base=None, character=None, adjuster=None, act_on_left=False, dettwist=None, act_padic=False, implementation=None)

Bases: sage.modular.pollack_stevens.distributions.OverconvergentDistributions_abstract

The class of overconvergent distributions

This class represents the module of finite approximation modules, which are finite-dimensional spaces with a \(\Sigma_0(N)\) action which approximate the module of overconvergent distributions. There is a specialization map to the finite-dimensional Symk module as well.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions
sage: D = OverconvergentDistributions(0, 5, 10)
sage: TestSuite(D).run()
change_ring(new_base_ring)

Return space of distributions like this one, but with the base ring changed.

INPUT: a ring over which the distribution can be coerced.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7, 4); D
Space of 7-adic distributions with k=0 action and precision cap 4
sage: D.base_ring()
7-adic Ring with capped absolute precision 4
sage: D2 = D.change_ring(QpCR(7)); D2
Space of 7-adic distributions with k=0 action and precision cap 4
sage: D2.base_ring()
7-adic Field with capped relative precision 20
is_symk()

Whether or not this distributions space is \(Sym^k(R)\) for some ring \(R\).

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(4, 17, 10); D
Space of 17-adic distributions with k=4 action and precision cap 10
sage: D.is_symk()
False
sage: D = Symk(4); D
Sym^4 Q^2
sage: D.is_symk()
True
sage: D = Symk(4, base=GF(7)); D
Sym^4 (Finite Field of size 7)^2
sage: D.is_symk()
True
specialize(new_base_ring=None)

Return distribution space got by specializing to \(Sym^k\), over the new_base_ring. If new_base_ring is not given, use current base_ring.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7, 4); D
Space of 7-adic distributions with k=0 action and precision cap 4
sage: D.is_symk()
False
sage: D2 = D.specialize(); D2
Sym^0 Z_7^2
sage: D2.is_symk()
True
sage: D2 = D.specialize(QQ); D2
Sym^0 Q^2
class sage.modular.pollack_stevens.distributions.OverconvergentDistributions_factory

Bases: sage.structure.factory.UniqueFactory

Create a space of distributions.

INPUT:

  • k – nonnegative integer
  • p – prime number or None
  • prec_cap – positive integer or None
  • base – ring or None
  • character – a dirichlet character or None
  • adjuster – None or callable that turns 2 x 2 matrices into a 4-tuple
  • act_on_left – bool (default: False)
  • dettwist – integer or None (interpreted as 0)
  • act_padic – whether monoid should allow \(p\)-adic coefficients
  • implementation – string (default: None). Either None (for automatic), ‘long’, or ‘vector’

EXAMPLES:

sage: D = OverconvergentDistributions(3, 11, 20)
sage: D
Space of 11-adic distributions with k=3 action and precision cap 20
sage: v = D([1,0,0,0,0])
sage: v.act_right([2,1,0,1])
(8 + O(11^5), 4 + O(11^4), 2 + O(11^3), 1 + O(11^2), 6 + O(11))
sage: D = OverconvergentDistributions(3, 11, 20, dettwist=1)
sage: v = D([1,0,0,0,0])
sage: v.act_right([2,1,0,1])
(5 + 11 + O(11^5), 8 + O(11^4), 4 + O(11^3), 2 + O(11^2), 1 + O(11))
create_key(k, p=None, prec_cap=None, base=None, character=None, adjuster=None, act_on_left=False, dettwist=None, act_padic=False, implementation=None)

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions
sage: OverconvergentDistributions(20, 3, 10)              # indirect doctest
Space of 3-adic distributions with k=20 action and precision cap 10
sage: TestSuite(OverconvergentDistributions).run()
create_object(version, key)

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: OverconvergentDistributions(0, 7, 5)              # indirect doctest
Space of 7-adic distributions with k=0 action and precision cap 5
class sage.modular.pollack_stevens.distributions.Symk_class(k, base, character, adjuster, act_on_left, dettwist, act_padic, implementation)

Bases: sage.modular.pollack_stevens.distributions.OverconvergentDistributions_abstract

EXAMPLES:

sage: D = sage.modular.pollack_stevens.distributions.Symk(4); D
Sym^4 Q^2
sage: TestSuite(D).run() # indirect doctest
base_extend(new_base_ring)

Extend scalars to a new base ring.

EXAMPLES:

sage: Symk(3).base_extend(Qp(3))
Sym^3 Q_3^2
change_ring(new_base_ring)

Return a Symk with the same \(k\) but a different base ring.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(0, 7, 4); D
Space of 7-adic distributions with k=0 action and precision cap 4
sage: D.base_ring()
7-adic Ring with capped absolute precision 4
sage: D2 = D.change_ring(QpCR(7)); D2
Space of 7-adic distributions with k=0 action and precision cap 4
sage: D2.base_ring()
7-adic Field with capped relative precision 20
is_symk()

Whether or not this distributions space is \(Sym^k(R)\) for some ring \(R\).

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import OverconvergentDistributions, Symk
sage: D = OverconvergentDistributions(4, 17, 10); D
Space of 17-adic distributions with k=4 action and precision cap 10
sage: D.is_symk()
False
sage: D = Symk(4); D
Sym^4 Q^2
sage: D.is_symk()
True
sage: D = Symk(4, base=GF(7)); D
Sym^4 (Finite Field of size 7)^2
sage: D.is_symk()
True
class sage.modular.pollack_stevens.distributions.Symk_factory

Bases: sage.structure.factory.UniqueFactory

Create the space of polynomial distributions of degree \(k\) (stored as a sequence of \(k + 1\) moments).

INPUT:

  • k - (integer): the degree (degree \(k\) corresponds to weight \(k + 2\) modular forms)
  • base - (ring, default None): the base ring (None is interpreted as \(\QQ\))
  • character - (Dirichlet character or None, default None) the character
  • adjuster - (None or a callable that turns \(2 \times 2\) matrices into a 4-tuple, default None)
  • act_on_left - (boolean, default False) whether to have the group acting on the left rather than the right.
  • dettwist (integer or None) – power of determinant to twist by

EXAMPLES:

sage: D = Symk(4)
sage: loads(dumps(D)) is D
True
sage: loads(dumps(D)) == D
True
sage: from sage.modular.pollack_stevens.distributions import Symk
sage: Symk(5)
Sym^5 Q^2
sage: Symk(5, RR)
Sym^5 (Real Field with 53 bits of precision)^2
sage: Symk(5, oo.parent()) # don't do this
Sym^5 (The Infinity Ring)^2
sage: Symk(5, act_on_left = True)
Sym^5 Q^2

The dettwist attribute:

sage: V = Symk(6)
sage: v = V([1,0,0,0,0,0,0])
sage: v.act_right([2,1,0,1])
(64, 32, 16, 8, 4, 2, 1)
sage: V = Symk(6, dettwist=-1)
sage: v = V([1,0,0,0,0,0,0])
sage: v.act_right([2,1,0,1])
(32, 16, 8, 4, 2, 1, 1/2)
create_key(k, base=None, character=None, adjuster=None, act_on_left=False, dettwist=None, act_padic=False, implementation=None)

Sanitize input.

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import Symk
sage: Symk(6) # indirect doctest
Sym^6 Q^2

sage: V = Symk(6, Qp(7))
sage: TestSuite(V).run()
create_object(version, key)

EXAMPLES:

sage: from sage.modular.pollack_stevens.distributions import Symk
sage: Symk(6) # indirect doctest
Sym^6 Q^2