Elements of arithmetic subgroups

class sage.modular.arithgroup.arithgroup_element.ArithmeticSubgroupElement[source]

Bases: MultiplicativeGroupElement

An element of the group \(\SL_2(\ZZ)\), i.e. a 2x2 integer matrix of determinant 1.

a()[source]

Return the upper left entry of self.

EXAMPLES:

sage: Gamma0(13)([7,1,13,2]).a()
7
>>> from sage.all import *
>>> Gamma0(Integer(13))([Integer(7),Integer(1),Integer(13),Integer(2)]).a()
7
acton(z)[source]

Return the result of the action of self on z as a fractional linear transformation.

EXAMPLES:

sage: G = Gamma0(15)
sage: g = G([1, 2, 15, 31])
>>> from sage.all import *
>>> G = Gamma0(Integer(15))
>>> g = G([Integer(1), Integer(2), Integer(15), Integer(31)])

An example of g acting on a symbolic variable:

sage: z = var('z')                                                          # needs sage.symbolic
sage: g.acton(z)                                                            # needs sage.symbolic
(z + 2)/(15*z + 31)
>>> from sage.all import *
>>> z = var('z')                                                          # needs sage.symbolic
>>> g.acton(z)                                                            # needs sage.symbolic
(z + 2)/(15*z + 31)

An example involving the Gaussian numbers:

sage: # needs sage.rings.number_field
sage: x = polygen(ZZ, 'x')
sage: K.<i> = NumberField(x^2 + 1)
sage: g.acton(i)
1/1186*i + 77/1186
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> x = polygen(ZZ, 'x')
>>> K = NumberField(x**Integer(2) + Integer(1), names=('i',)); (i,) = K._first_ngens(1)
>>> g.acton(i)
1/1186*i + 77/1186

An example with complex numbers:

sage: C.<i> = ComplexField()
sage: g.acton(i)
0.0649241146711636 + 0.000843170320404721*I
>>> from sage.all import *
>>> C = ComplexField(names=('i',)); (i,) = C._first_ngens(1)
>>> g.acton(i)
0.0649241146711636 + 0.000843170320404721*I

An example with the cusp infinity:

sage: g.acton(infinity)
1/15
>>> from sage.all import *
>>> g.acton(infinity)
1/15

An example which maps a finite cusp to infinity:

sage: g.acton(-31/15)
+Infinity
>>> from sage.all import *
>>> g.acton(-Integer(31)/Integer(15))
+Infinity

Note that when acting on instances of cusps the return value is still a rational number or infinity (Note the presence of ‘+’, which does not show up for cusp instances):

sage: g.acton(Cusp(-31/15))
+Infinity
>>> from sage.all import *
>>> g.acton(Cusp(-Integer(31)/Integer(15)))
+Infinity
b()[source]

Return the upper right entry of self.

EXAMPLES:

sage: Gamma0(13)([7,1,13,2]).b()
1
>>> from sage.all import *
>>> Gamma0(Integer(13))([Integer(7),Integer(1),Integer(13),Integer(2)]).b()
1
c()[source]

Return the lower left entry of self.

EXAMPLES:

sage: Gamma0(13)([7,1,13,2]).c()
13
>>> from sage.all import *
>>> Gamma0(Integer(13))([Integer(7),Integer(1),Integer(13),Integer(2)]).c()
13
d()[source]

Return the lower right entry of self.

EXAMPLES:

sage: Gamma0(13)([7,1,13,2]).d()
2
>>> from sage.all import *
>>> Gamma0(Integer(13))([Integer(7),Integer(1),Integer(13),Integer(2)]).d()
2
det()[source]

Return the determinant of self, which is always 1.

EXAMPLES:

sage: Gamma1(11)([12,11,-11,-10]).det()
1
>>> from sage.all import *
>>> Gamma1(Integer(11))([Integer(12),Integer(11),-Integer(11),-Integer(10)]).det()
1
determinant()[source]

Return the determinant of self, which is always 1.

EXAMPLES:

sage: Gamma0(691)([1,0,691,1]).determinant()
1
>>> from sage.all import *
>>> Gamma0(Integer(691))([Integer(1),Integer(0),Integer(691),Integer(1)]).determinant()
1
matrix()[source]

Return the matrix corresponding to self.

EXAMPLES:

sage: x = Gamma1(3)([4,5,3,4]) ; x
[4 5]
[3 4]
sage: x.matrix()
[4 5]
[3 4]
sage: type(x.matrix())
<class 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
>>> from sage.all import *
>>> x = Gamma1(Integer(3))([Integer(4),Integer(5),Integer(3),Integer(4)]) ; x
[4 5]
[3 4]
>>> x.matrix()
[4 5]
[3 4]
>>> type(x.matrix())
<class 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
multiplicative_order()[source]

Return the multiplicative order of this element.

EXAMPLES:

sage: SL2Z.one().multiplicative_order()
1
sage: SL2Z([-1,0,0,-1]).multiplicative_order()
2
sage: s,t = SL2Z.gens()
sage: ((t^3*s*t^2) * s * ~(t^3*s*t^2)).multiplicative_order()
4
sage: (t^3 * s * t * t^-3).multiplicative_order()
6
sage: (t^3 * s * t * s * t^-2).multiplicative_order()
3
sage: SL2Z([2,1,1,1]).multiplicative_order()
+Infinity
sage: SL2Z([-2,1,1,-1]).multiplicative_order()
+Infinity
>>> from sage.all import *
>>> SL2Z.one().multiplicative_order()
1
>>> SL2Z([-Integer(1),Integer(0),Integer(0),-Integer(1)]).multiplicative_order()
2
>>> s,t = SL2Z.gens()
>>> ((t**Integer(3)*s*t**Integer(2)) * s * ~(t**Integer(3)*s*t**Integer(2))).multiplicative_order()
4
>>> (t**Integer(3) * s * t * t**-Integer(3)).multiplicative_order()
6
>>> (t**Integer(3) * s * t * s * t**-Integer(2)).multiplicative_order()
3
>>> SL2Z([Integer(2),Integer(1),Integer(1),Integer(1)]).multiplicative_order()
+Infinity
>>> SL2Z([-Integer(2),Integer(1),Integer(1),-Integer(1)]).multiplicative_order()
+Infinity