Congruence subgroup \(\Gamma_0(N)\)#
- class sage.modular.arithgroup.congroup_gamma0.Gamma0_class(level)#
Bases:
GammaH_class
The congruence subgroup \(\Gamma_0(N)\).
- coset_reps()#
Return representatives for the right cosets of this congruence subgroup in \(\SL_2(\ZZ)\) 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] [1 0] [ 0 -1] [ 0 -1] [ 0 -1] [0 1], [ 1 0], [1 1], [ 1 2], [ 1 3], [ 1 4] ] sage: list(Gamma0(4).coset_reps()) [ [1 0] [ 0 -1] [1 0] [ 0 -1] [ 0 -1] [1 0] [0 1], [ 1 0], [1 1], [ 1 2], [ 1 3], [2 1] ] sage: list(Gamma0(1).coset_reps()) [ [1 0] [0 1] ]
- dimension_new_cusp_forms(k=2, p=0)#
Return the dimension of the space of new (or \(p\)-new) weight \(k\) cusp forms for this congruence subgroup.
INPUT:
\(k\) – an integer (default: 2), the weight. Not fully implemented for \(k = 1\).
\(p\) – integer (default: 0); if nonzero, compute the \(p\)-new subspace.
OUTPUT: Integer
ALGORITHM:
This comes from the formula given in Theorem 1 of http://www.math.ubc.ca/~gerg/papers/downloads/DSCFN.pdf
EXAMPLES:
sage: Gamma0(11000).dimension_new_cusp_forms() 240 sage: Gamma0(11000).dimension_new_cusp_forms(k=1) 0 sage: Gamma0(22).dimension_new_cusp_forms(k=4) 3 sage: Gamma0(389).dimension_new_cusp_forms(k=2,p=17) 32
- divisor_subgroups()#
Return the subgroups of SL2Z of the form Gamma0(M) that contain this subgroup, i.e. those for M a divisor of N.
EXAMPLES:
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)]
- gamma_h_subgroups()#
Return the subgroups of the form \(\Gamma_H(N)\) contained in self, where \(N\) is the level of self.
EXAMPLES:
sage: G = Gamma0(11) sage: G.gamma_h_subgroups() [Congruence Subgroup Gamma0(11), Congruence Subgroup Gamma_H(11) with H generated by [3], Congruence Subgroup Gamma_H(11) with H generated by [10], Congruence Subgroup Gamma1(11)] sage: G = Gamma0(12) sage: G.gamma_h_subgroups() [Congruence Subgroup Gamma0(12), 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 Gamma1(12)]
- generators(algorithm='farey')#
Return generators for this congruence subgroup.
INPUT:
algorithm
(string): eitherfarey
(default) ortodd-coxeter
.
If
algorithm
is set to"farey"
, then the generators will be calculated using Farey symbols, which will always return a minimal generating set. Seefarey_symbol
for more information.If
algorithm
is set to"todd-coxeter"
, a simpler algorithm based on Todd-Coxeter enumeration will be used. This tends to return far larger sets of generators.EXAMPLES:
sage: Gamma0(3).generators() [ [1 1] [-1 1] [0 1], [-3 2] ] sage: Gamma0(3).generators(algorithm="todd-coxeter") [ [1 1] [-1 0] [ 1 -1] [1 0] [1 1] [-1 0] [ 1 0] [0 1], [ 0 -1], [ 0 1], [3 1], [0 1], [ 3 -1], [-3 1] ] sage: SL2Z.gens() ( [ 0 -1] [1 1] [ 1 0], [0 1] )
- index()#
Return the index of self in the full modular group.
This is given by
\[\begin{split}N \prod_{\substack{p \mid N \\ \text{$p$ prime}}}\left(1 + \frac{1}{p}\right).\end{split}\]EXAMPLES:
sage: [Gamma0(n).index() for n in [1..19]] [1, 3, 4, 6, 6, 12, 8, 12, 12, 18, 12, 24, 14, 24, 24, 24, 18, 36, 20] sage: Gamma0(32041).index() 32220
- is_even()#
Return True precisely if this subgroup contains the matrix -1.
Since \(\Gamma0(N)\) always contains the matrix -1, this always returns True.
EXAMPLES:
sage: Gamma0(12).is_even() True sage: SL2Z.is_even() True
- is_subgroup(right)#
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
- ncusps()#
Return the number of cusps of this subgroup \(\Gamma_0(N)\).
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]
- nu2()#
Return the number of elliptic points of order 2 for this congruence subgroup \(\Gamma_0(N)\).
The number of these is given by a standard formula: 0 if \(N\) is divisible by 4 or any prime congruent to -1 mod 4, and otherwise \(2^d\) where d is the number of odd primes dividing \(N\).
EXAMPLES:
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]
- nu3()#
Return the number of elliptic points of order 3 for this congruence subgroup \(\Gamma_0(N)\). The number of these is given by a standard formula: 0 if \(N\) is divisible by 9 or any prime congruent to -1 mod 3, and otherwise \(2^d\) where d is the number of primes other than 3 dividing \(N\).
EXAMPLES:
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
- sage.modular.arithgroup.congroup_gamma0.Gamma0_constructor(N)#
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
- sage.modular.arithgroup.congroup_gamma0.is_Gamma0(x)#
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