### Navigation

- index
- modules |
- next |
- previous |
- Miscellaneous Modular-Form-Related Modules »

# Type spaces of newforms

Let \(f\) be a new modular eigenform of level \(\Gamma_1(N)\), and \(p\) a prime dividing \(N\), with \(N = Mp^r\) (\(M\) coprime to \(p\)). Suppose the power of \(p\) dividing the conductor of the character of \(f\) is \(p^c\) (so \(c \le r\)).

Then there is an integer \(u\), which is \(\operatorname{min}([r/2], r-c)\), such that any twist of \(f\) by a character mod \(p^u\) also has level \(N\). The type space of \(f\) is the span of the modular eigensymbols corresponding to all of these twists, which lie in a space of modular symbols for a suitable \(\Gamma_H\) subgroup. This space is the key to computing the isomorphism class of the local component of the newform at \(p\).

class `sage.modular.local_comp.type_space.``TypeSpace`(f, p, base_extend=True)

  Bases: `sage.structure.sage_object.SageObject`

  The modular symbol type space associated to a newform, at a prime dividing the level.

  `character_conductor`()

    Exponent of \(p\) dividing the conductor of the character of the form.

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().character_conductor()
        0

  `conductor`()

    Exponent of \(p\) dividing the level of the form.

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().conductor()
        2

  `eigensymbol_subspace`()

    Return the subspace of self corresponding to the plus eigensymbols of \(f\) and its Galois conjugates (as a subspace of the vector space returned by `free_module()`).

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: T = example_type_space(); T.eigensymbol_subspace()
        Vector space of degree 6 and dimension 1 over Number Field in a1 with defining polynomial ...
        Basis matrix:
        [...]
        sage: T.eigensymbol_subspace().is_submodule(T.free_module())
        True

  `form`()

    The newform of which this is the type space.

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().form()
        q + q^2 + (-1/2*a1 + 1/2)*q^3 + q^4 + (a1 - 1)*q^5 + O(q^6)

  `free_module`()

    Return the underlying vector space of this type space.

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().free_module()
        Vector space of dimension 6 over Number Field in a1 with defining polynomial ...

  `group`()

    Return a \(\Gamma_H\) group which is the level of all of the relevant twists of \(f\).

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().group()
        Congruence Subgroup Gamma_H(98) with H generated by [57]

  `is_minimal`()

    Return True if there exists a newform \(g\) of level strictly smaller than \(N\), and a Dirichlet character \(\chi\) of \(p\)-power conductor, such that \(f = g \otimes \chi\) where \(f\) is the form of which this is the type space. To find such a form, use `minimal_twist()`.

    The result is cached.

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().is_minimal()
        True
        sage: example_type_space(1).is_minimal()
        False

  `minimal_twist`()

    Return a newform (not necessarily unique) which is a twist of the original form \(f\) by a Dirichlet character of \(p\)-power conductor, and which has minimal level among such twists of \(f\).

    An error will be raised if \(f\) is already minimal.

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import TypeSpace, example_type_space
        sage: T = example_type_space(1)
        sage: T.form().q_expansion(12)
        q - q^2 + 2*q^3 + q^4 - 2*q^6 - q^8 + q^9 + O(q^12)
        sage: g = T.minimal_twist()
        sage: g.q_expansion(12)
        q - q^2 - 2*q^3 + q^4 + 2*q^6 + q^7 - q^8 + q^9 + O(q^12)
        sage: g.level()
        14
        sage: TypeSpace(g, 7).is_minimal()
        True

  `prime`()

    Return the prime \(p\).

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().prime()
        7

  `rho`(g)

    Calculate the action of the group element \(g\) on the type space.

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: T = example_type_space(2)
        sage: m = T.rho([2,0,0,1]); m
        [ 1 -2  1  0]
        [ 1 -1  0  1]
        [ 1  0 -1  1]
        [ 0  1 -2  1]
        sage: v = T.eigensymbol_subspace().basis()[0]
        sage: m * v == v
        True

    We test that it is a left action:

        sage: T = example_type_space(0)
        sage: a = [0,5,4,3]; b = [0,2,3,5]; ab = [1,4,2,2]
        sage: T.rho(ab) == T.rho(a) * T.rho(b)
        True

    An odd level example:

        sage: from sage.modular.local_comp.type_space import TypeSpace
        sage: T = TypeSpace(Newform('54a'), 3)
        sage: a = [0,1,3,0]; b = [2,1,0,1]; ab = [0,1,6,3]
        sage: T.rho(ab) == T.rho(a) * T.rho(b)
        True

  `tame_level`()

    The level away from \(p\).

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().tame_level()
        2

  `u`()

    Largest integer \(u\) such that level of \(f_\chi\) = level of \(f\) for all Dirichlet characters \(\chi\) modulo \(p^u\).

    EXAMPLE:

        sage: from sage.modular.local_comp.type_space import example_type_space
        sage: example_type_space().u()
        1
        sage: from sage.modular.local_comp.type_space import TypeSpace
        sage: f = Newforms(Gamma1(5), 5, names='a')[0]
        sage: TypeSpace(f, 5).u()
        0

`sage.modular.local_comp.type_space.``example_type_space`(example_no=0)

  Quickly return an example of a type space. Used mainly to speed up doctesting.

  EXAMPLE:

      sage: from sage.modular.local_comp.type_space import example_type_space
      sage: example_type_space()  # takes a while but caches stuff (21s on sage.math, 2012)
      6-dimensional type space at prime 7 of form q + q^2 + (-1/2*a1 + 1/2)*q^3 + q^4 + (a1 - 1)*q^5 + O(q^6)

  The above test takes a long time, but it precomputes and caches various things such that subsequent doctests can be very quick. So we don’t want to mark it `# long time`.

`sage.modular.local_comp.type_space.``find_in_space`(f, A, base_extend=False)

  Given a Newform object \(f\), and a space \(A\) of modular symbols of the same weight and level, find the subspace of \(A\) which corresponds to the Hecke eigenvalues of \(f\).

  If `base_extend = True`, this will return a 2-dimensional space generated by the plus and minus eigensymbols of \(f\). If `base_extend = False` it will return a larger space spanned by the eigensymbols of \(f\) and its Galois conjugates.

  (NB: “Galois conjugates” needs to be interpreted carefully – see the last example below.)

  \(A\) should be an ambient space (because non-ambient spaces don’t implement `base_extend`).

  EXAMPLES:

      sage: from sage.modular.local_comp.type_space import find_in_space

  Easy case (\(f\) has rational coefficients):

      sage: f = Newform('99a'); f
      q - q^2 - q^4 - 4*q^5 + O(q^6)
      sage: A = ModularSymbols(GammaH(99, [13]))
      sage: find_in_space(f, A)
      Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 25 for Congruence Subgroup Gamma_H(99) with H generated by [13] of weight 2 with sign 0 and over Rational Field

  Harder case:

      sage: f = Newforms(23, names='a')[0]
      sage: A = ModularSymbols(Gamma1(23))
      sage: find_in_space(f, A, base_extend=True)
      Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 45 for Gamma_1(23) of weight 2 with sign 0 and over Number Field in a0 with defining polynomial x^2 + x - 1
      sage: find_in_space(f, A, base_extend=False)
      Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 45 for Gamma_1(23) of weight 2 with sign 0 and over Rational Field

  An example with character, indicating the rather subtle behaviour of `base_extend`:

      sage: chi = DirichletGroup(5).0
      sage: f = Newforms(chi, 7, names='c')[0]; f  # long time (4s on sage.math, 2012)
      q + c0*q^2 + (zeta4*c0 - 5*zeta4 + 5)*q^3 + ((-5*zeta4 - 5)*c0 + 24*zeta4)*q^4 + ((10*zeta4 - 5)*c0 - 40*zeta4 - 55)*q^5 + O(q^6)
      sage: find_in_space(f, ModularSymbols(Gamma1(5), 7), base_extend=True)  # long time
      Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 12 for Gamma_1(5) of weight 7 with sign 0 and over Number Field in c0 with defining polynomial x^2 + (5*zeta4 + 5)*x - 88*zeta4 over its base field
      sage: find_in_space(f, ModularSymbols(Gamma1(5), 7), base_extend=False)  # long time (27s on sage.math, 2012)
      Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 12 for Gamma_1(5) of weight 7 with sign 0 and over Cyclotomic Field of order 4 and degree 2

  Note that the base ring in the second example is \(\QQ(\zeta_4)\) (the base ring of the character of \(f\)), not \(\QQ\).

### Navigation

- index
- modules |
- next |
- previous |
- Miscellaneous Modular-Form-Related Modules »