The congruence subgroup .
TESTS:
sage: Gamma0(11).dimension_cusp_forms(2)
1
sage: a = Gamma0(1).dimension_cusp_forms(2); a
0
sage: type(a)
<type 'sage.rings.integer.Integer'>
sage: Gamma0(5).dimension_cusp_forms(0)
0
sage: Gamma0(20).dimension_cusp_forms(1)
0
sage: Gamma0(20).dimension_cusp_forms(4)
6
sage: Gamma0(23).dimension_cusp_forms(2)
2
sage: Gamma0(1).dimension_cusp_forms(24)
2
sage: Gamma0(3).dimension_cusp_forms(3)
0
sage: Gamma0(11).dimension_cusp_forms(-1)
0
sage: Gamma0(22).dimension_new_cusp_forms()
0
sage: Gamma0(100).dimension_new_cusp_forms(2, 5)
5
Independently compute the dimension 5 above:
sage: m = ModularSymbols(100, 2,sign=1).cuspidal_subspace()
sage: m.new_subspace(5)
Modular Symbols subspace of dimension 5 of Modular Symbols space of dimension 18 for Gamma_0(100) of weight 2 with sign 1 over Rational Field
Create an element of this congruence subgroup from x.
If the optional flag check is True (default), check whether x actually gives an element of self.
EXAMPLES:
sage: G = Gamma0(12)
sage: G([1, 0, 24, 1])
[ 1 0]
[24 1]
sage: G(matrix(ZZ, 2, [1, 1, -12, -11]))
[ 1 1]
[-12 -11]
sage: G([1, 0, 23, 1])
...
TypeError: matrix must have lower left entry (=23) divisible by 12
Compare self to other.
The ordering on congruence subgroups of the form GammaH(N) for some H is first by level and then by the subgroup H. In particular, this means that we have Gamma1(N) < GammaH(N) < Gamma0(N) for every nontrivial subgroup H.
EXAMPLES:
sage: G = Gamma0(86)
sage: G.__cmp__(G)
0
sage: G.__cmp__(GammaH(86, [11])) is not 0
True
sage: Gamma1(17) < Gamma0(17)
True
sage: Gamma0(1) == SL2Z
True
sage: Gamma0(11) == GammaH(11, [2])
True
sage: Gamma0(2) == Gamma1(2)
True
The congruence subgroup .
EXAMPLES:
sage: G = Gamma0(11); G
Congruence Subgroup Gamma0(11)
sage: loads(G.dumps()) == G
True
TESTS:
sage: g = Gamma0(5)([1,1,0,1])
sage: g in Gamma0(7)
True
sage: g = Gamma0(5)([1,0,5,1])
sage: g in Gamma0(7)
False
sage: g = Gamma0(2)([1,0,0,1])
sage: g in SL2Z
True
Used for pickling self.
EXAMPLES:
sage: Gamma0(22).__reduce__()
(<function Gamma0_constructor at ...>, (22,))
Return an ordered list of inequivalent cusps for self, i.e. a
set of representatives for the orbits of self on
. These are returned in a reduced
form; see self.reduce_cusp for the definition of reduced.
EXAMPLES:
sage: Gamma0(90)._find_cusps()
[0, 1/45, 1/30, 1/18, 1/15, 1/10, 1/9, 2/15, 1/6, 1/5, 1/3, 11/30, 1/2, 2/3, 5/6, Infinity]
sage: Gamma0(1).cusps()
[Infinity]
sage: Gamma0(180).cusps() == Gamma0(180).cusps(algorithm='modsym')
True
Return generators for the subgroup H of the units mod self.level() that defines self.
EXAMPLES:
sage: Gamma0(15)._generators_for_H()
[11, 7]
Return the LaTeX representation of self.
EXAMPLES:
sage: Gamma0(20)._latex_()
'\\Gamma_0(20)'
sage: latex(Gamma0(20))
\Gamma_0(20)
Returns a sorted list of Python ints that are representatives between 0 and N-1 of the elements of H.
EXAMPLES:
sage: G = Gamma0(11)
sage: G._list_of_elements_in_H()
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sage: G = Gamma0(6)
sage: G._list_of_elements_in_H()
[1, 5]
sage: G = Gamma0(1)
sage: G._list_of_elements_in_H()
[1]
Return the string representation of self.
EXAMPLES:
sage: Gamma0(98)._repr_()
'Congruence Subgroup Gamma0(98)'
Return representatives for the right cosets of this congruence
subgroup in as a generator object.
Use list(self.coset_reps()) to obtain coset reps as a list.
EXAMPLES:
sage: list(Gamma0(5).coset_reps())
[[1 0]
[0 1], [ 0 -1]
[ 1 0], [1 0]
[1 1], [ 0 -1]
[ 1 2], [ 0 -1]
[ 1 3], [ 0 -1]
[ 1 4]]
sage: list(Gamma0(4).coset_reps())
[[1 0] [0 1],
[ 0 -1] [ 1 0],
[1 0] [1 1],
[ 0 -1] [ 1 2],
[ 0 -1] [ 1 3],
[1 0] [2 1]]
sage: list(Gamma0(1).coset_reps())
[[1 0] [0 1]]
Return the subgroups of SL2Z of the form Gamma0(M) that contain this subgroup, i.e. those for M a divisor of N.
EXAMPLE:
sage: Gamma0(24).divisor_subgroups()
[Modular Group SL(2,Z),
Congruence Subgroup Gamma0(2),
Congruence Subgroup Gamma0(3),
Congruence Subgroup Gamma0(4),
Congruence Subgroup Gamma0(6),
Congruence Subgroup Gamma0(8),
Congruence Subgroup Gamma0(12),
Congruence Subgroup Gamma0(24)]
Return the subgroups of the form contained
in self, where
is the level of self.
EXAMPLES:
sage: G = Gamma0(11)
sage: G.gamma_h_subgroups()
[Congruence Subgroup Gamma_H(11) with H generated by [2], Congruence Subgroup Gamma_H(11) with H generated by [4], Congruence Subgroup Gamma_H(11) with H generated by [10], Congruence Subgroup Gamma_H(11) with H generated by []]
sage: G = Gamma0(12)
sage: G.gamma_h_subgroups()
[Congruence Subgroup Gamma_H(12) with H generated by [5, 7], Congruence Subgroup Gamma_H(12) with H generated by [7], Congruence Subgroup Gamma_H(12) with H generated by [11], Congruence Subgroup Gamma_H(12) with H generated by [5], Congruence Subgroup Gamma_H(12) with H generated by []]
Return generators for this congruence subgroup.
The result is cached.
EXAMPLE:
sage: for g in Gamma0(3).generators():
... print g
... print '---'
[1 1]
[0 1]
---
[-1 0]
[ 0 -1]
---
...
---
[ 1 0]
[-3 1]
---
Return the index of self in the full modular group. This is given by
Return True precisely if this subgroup contains the matrix -1.
Since always contains the matrix -1, this always
returns True.
EXAMPLES:
sage: Gamma0(12).is_even()
True
sage: SL2Z.is_even()
True
Return True if self is a subgroup of right.
EXAMPLES:
sage: G = Gamma0(20)
sage: G.is_subgroup(SL2Z)
True
sage: G.is_subgroup(Gamma0(4))
True
sage: G.is_subgroup(Gamma0(20))
True
sage: G.is_subgroup(Gamma0(7))
False
sage: G.is_subgroup(Gamma1(20))
False
sage: G.is_subgroup(GammaH(40, []))
False
sage: Gamma0(80).is_subgroup(GammaH(40, [31, 21, 17]))
True
sage: Gamma0(2).is_subgroup(Gamma1(2))
True
Return the number of cusps of this subgroup .
EXAMPLES:
sage: [Gamma0(n).ncusps() for n in [1..19]]
[1, 2, 2, 3, 2, 4, 2, 4, 4, 4, 2, 6, 2, 4, 4, 6, 2, 8, 2]
sage: [Gamma0(n).ncusps() for n in prime_range(2,100)]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
Return the number of elliptic points of order 2 for this congruence
subgroup . The number of these is given by a standard formula:
0 if
is divisible by 4 or any prime congruent to -1 mod 4, and
otherwise
where d is the number of odd primes dividing
.
EXAMPLE:
sage: Gamma0(2).nu2()
1
sage: Gamma0(4).nu2()
0
sage: Gamma0(21).nu2()
0
sage: Gamma0(1105).nu2()
8
sage: [Gamma0(n).nu2() for n in [1..19]]
[1, 1, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, 0]
Return the number of elliptic points of order 3 for this congruence
subgroup . The number of these is given by a standard formula:
0 if
is divisible by 9 or any prime congruent to -1 mod 3, and
otherwise
where d is the number of primes other than 3 dividing
.
EXAMPLE:
sage: Gamma0(2).nu3()
0
sage: Gamma0(3).nu3()
1
sage: Gamma0(9).nu3()
0
sage: Gamma0(7).nu3()
2
sage: Gamma0(21).nu3()
2
sage: Gamma0(1729).nu3()
8
Return the congruence subgroup Gamma0(N).
EXAMPLES:
sage: G = Gamma0(51) ; G # indirect doctest
Congruence Subgroup Gamma0(51)
sage: G == Gamma0(51)
True
sage: G is Gamma0(51)
True
Return True if x is a congruence subgroup of type Gamma0.
EXAMPLES:
sage: from sage.modular.arithgroup.all import is_Gamma0
sage: is_Gamma0(SL2Z)
True
sage: is_Gamma0(Gamma0(13))
True
sage: is_Gamma0(Gamma1(6))
False