### Navigation

- index
- modules |
- next |
- previous |
- Modular Abelian Varieties »

# Cuspidal subgroups of modular abelian varieties

AUTHORS:

- William Stein (2007-03, 2008-02)

EXAMPLES: We compute the cuspidal subgroup of \(J_1(13)\):

    sage: A = J1(13)
    sage: C = A.cuspidal_subgroup(); C
    Finite subgroup with invariants [19, 19] over QQ of Abelian variety J1(13) of dimension 2
    sage: C.gens()
    [[(1/19, 0, 0, 9/19)], [(0, 1/19, 1/19, 18/19)]]
    sage: C.order()
    361
    sage: C.invariants()
    [19, 19]

We compute the cuspidal subgroup of \(J_0(54)\):

    sage: A = J0(54)
    sage: C = A.cuspidal_subgroup(); C
    Finite subgroup with invariants [3, 3, 3, 3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
    sage: C.gens()
    [[(1/3, 0, 0, 0, 0, 1/3, 0, 2/3)], [(0, 1/3, 0, 0, 0, 2/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 1/9, 1/9, 1/9, 2/9)], [(0, 0, 0, 1/3, 0, 1/3, 0, 0)], [(0, 0, 0, 0, 1/3, 1/3, 0, 1/3)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)]]
    sage: C.order()
    2187
    sage: C.invariants()
    [3, 3, 3, 3, 3, 9]

We compute the subgroup of the cuspidal subgroup generated by rational cusps.

    sage: C = J0(54).rational_cusp_subgroup(); C
    Finite subgroup with invariants [3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
    sage: C.gens()
    [[(1/3, 0, 0, 1/3, 2/3, 1/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 7/9, 7/9, 1/9, 8/9)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)]]
    sage: C.order()
    81
    sage: C.invariants()
    [3, 3, 9]

This might not give us the exact rational torsion subgroup, since it might be bigger than order \(81\):

    sage: J0(54).rational_torsion_subgroup().multiple_of_order()
    243

TESTS:

    sage: C = J0(54).cuspidal_subgroup()
    sage: loads(dumps(C)) == C
    True
    sage: D = J0(54).rational_cusp_subgroup()
    sage: loads(dumps(D)) == D
    True

class `sage.modular.abvar.cuspidal_subgroup.``CuspidalSubgroup`(abvar, field_of_definition=Rational Field)

  Bases: `sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup_generic`

  EXAMPLES:

      sage: a = J0(65)[2]
      sage: t = a.cuspidal_subgroup()
      sage: t.order()
      6

  `lattice`()

    Returned cached tuple of vectors that define elements of the rational homology that generate this finite subgroup.

    OUTPUT:

    - `tuple` - cached

    EXAMPLES:

        sage: J = J0(27)
        sage: G = J.cuspidal_subgroup()
        sage: G.lattice()
        Free module of degree 2 and rank 2 over Integer Ring
        Echelon basis matrix:
        [1/3   0]
        [  0 1/3]

    Test that the result is cached:

        sage: G.lattice() is G.lattice()
        True

class `sage.modular.abvar.cuspidal_subgroup.``CuspidalSubgroup_generic`(abvar, field_of_definition=Rational Field)

  Bases: `sage.modular.abvar.finite_subgroup.FiniteSubgroup`

  A finite subgroup of a modular abelian variety.

  INPUT:

  - `abvar` - a modular abelian variety
  - `field_of_definition` - a field over which this group is defined.

  EXAMPLES: This is an abstract base class, so there are no instances of this class itself.

      sage: A = J0(37)
      sage: G = A.torsion_subgroup(3); G
      Finite subgroup with invariants [3, 3, 3, 3] over QQ of Abelian variety J0(37) of dimension 2
      sage: type(G)
      <class 'sage.modular.abvar.finite_subgroup.FiniteSubgroup_lattice'>
      sage: from sage.modular.abvar.finite_subgroup import FiniteSubgroup
      sage: isinstance(G, FiniteSubgroup)
      True

class `sage.modular.abvar.cuspidal_subgroup.``RationalCuspSubgroup`(abvar, field_of_definition=Rational Field)

  Bases: `sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup_generic`

  EXAMPLES:

      sage: a = J0(65)[2]
      sage: t = a.rational_cusp_subgroup()
      sage: t.order()
      6

  `lattice`()

    Return lattice that defines this group.

    OUTPUT: lattice

    EXAMPLES:

        sage: G = J0(27).rational_cusp_subgroup()
        sage: G.lattice()
        Free module of degree 2 and rank 2 over Integer Ring
        Echelon basis matrix:
        [1/3   0]
        [  0   1]

    Test that the result is cached.

        sage: G.lattice() is G.lattice()
        True

class `sage.modular.abvar.cuspidal_subgroup.``RationalCuspidalSubgroup`(abvar, field_of_definition=Rational Field)

  Bases: `sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup_generic`

  EXAMPLES:

      sage: a = J0(65)[2]
      sage: t = a.rational_cuspidal_subgroup()
      sage: t.order()
      6

  `lattice`()

    Return lattice that defines this group.

    OUTPUT: lattice

    EXAMPLES:

        sage: G = J0(27).rational_cuspidal_subgroup()
        sage: G.lattice()
        Free module of degree 2 and rank 2 over Integer Ring
        Echelon basis matrix:
        [1/3   0]
        [  0   1]

    Test that the result is cached.

        sage: G.lattice() is G.lattice()
        True

`sage.modular.abvar.cuspidal_subgroup.``is_rational_cusp_gamma0`(c, N, data)

  Return True if the rational number c is a rational cusp of level N. This uses remarks in Glenn Steven’s Ph.D. thesis.

  INPUT:

  - `c` - a cusp
  - `N` - a positive integer
  - `data` - the list [n for n in range(2,N) if gcd(n,N) == 1], which is passed in as a parameter purely for efficiency reasons.

  EXAMPLES:

      sage: from sage.modular.abvar.cuspidal_subgroup import is_rational_cusp_gamma0
      sage: N = 27
      sage: data = [n for n in range(2,N) if gcd(n,N) == 1]
      sage: is_rational_cusp_gamma0(Cusp(1/3), N, data)
      False
      sage: is_rational_cusp_gamma0(Cusp(1), N, data)
      True
      sage: is_rational_cusp_gamma0(Cusp(oo), N, data)
      True
      sage: is_rational_cusp_gamma0(Cusp(2/9), N, data)
      False

### Navigation

- index
- modules |
- next |
- previous |
- Modular Abelian Varieties »