QAuxiliaryModularEtaQuotientPackage¶
QAuxiliaryModularEtaQuotientPackage helps to do computations with eta quotients that are modular functions.
- aLigozat: (PositiveInteger , Integer , Integer ) -> Integer
aLigozat(m, c, delta)
computes an entry of the matrix of Ligozat corresponding to the index (c
, delta) counted in divisors.
- coprimePart: (Integer , Integer ) -> Integer
- coPrimePart(
n
,c
) splitsn
into u*v such thatgcd
(u
,c
)=1
and returnsu
. We assume that all input numbers are positive.
- cusps2OfGamma0: PositiveInteger -> List Fraction Integer
- Do not use that function! It is just another implementation of
cuspsOfGamma0
.
- cuspsOfGamma0: PositiveInteger -> List Fraction Integer
- According to cite[
Lemma~2
.45]{Radu:PhD:2010
}, there are $eulerphi(gcd(N/c
,c
))$ different cusps $frac{a}{c
}$ of $Gamma_0(N
)$ that correspond to a divisor $c
$ of $N
$. cusps(m
) returns all the cusps forGamma_0
(m
) sorted first by denominator and then (among the cusps with the same denominator) by the numerator of the cusp.
- cuspToMatrix: (PositiveInteger , Fraction Integer ) -> Matrix Integer
cuspToMatrix(m, a/c)
returns a matrix gamma=[[a,b
],[c
,d
]] such that splitMatrix(gamma,m
) returns two matrices [m1
,m2
] withm1*m2
= [[m*a,c
], [m*b
,d
]] andm1
being inSL_2
(Z
) andm2
being a triangular matrix with 0<=
m2
(1,2) <m/c
.
- dedekindPsi: PositiveInteger -> PositiveInteger
dedekindPsi(n)
computes the value of the Dedekind psi function. https://en.wikipedia.org/wiki/Dedekind_psi_function
- doubleCosetRepresentatives: PositiveInteger -> List Matrix Integer
doubleCosetRepresentatives(nn)
returns a list of double coset representatives of $Gamma_0(nn
) backslash Gamma_0(1) /SL_2
(setZ)_infty$ where $SL_2
(setZ)_infty$ are matrices of the form [[1,h
],[0,1]] withh
being an integer.
- genusOfGamma0: PositiveInteger -> NonNegativeInteger
genusOfGamma0(level)
returns the genus of the congruence subgroupGamma_0
(level
). It corresponds to the series https://oeis.org/A001617
.
- indexOfGamma0: PositiveInteger -> PositiveInteger
indexOfGamma0(n)
computes the index ofGamma_0
(n
) in SL2Z.indexOfGamma0
(n
) is equal to dedekindPsi(n
).
- jacobiLowerStar: (Integer , Integer ) -> Integer
- See, for example, Definition 2.26 in the
PhD
thesis of Silviu Radu.http://www3
.risc.jku.at/publications/download/risc_5453/main.pdf
- jacobiUpperStar: (Integer , Integer ) -> Integer
- See, for example, Definition 2.26 in the
PhD
thesis of Silviu Radu.http://www3
.risc.jku.at/publications/download/risc_5453/main.pdf
- matrixAtkinLehner: (PositiveInteger , PositiveInteger ) -> Matrix Integer
matrixAtkinLehner(m, t)
witht
a Hall divisor (https://en.wikipedia.org/wiki/Hall_subgroup) ofm
returns the 2x2 matrix with entries [[t
, -a], [m
,t*b
]] such that n=m/t andt*b
+ n*a = 1, see cite{Kohnen:WeierstrassPointsAtInfinity:2004
}.
- matrixLigozat: PositiveInteger -> Matrix Integer
matrixLigozat(m)
returns the (n
,n
) matrix with entries a_m(di
,dj
) given by Notation 3.2.6 in cite{Ligozat:CourbesModulaires:1975
} wheredi
anddj
run over all positive divisors ofm
. This matrix is A_N as described after Theorem 5.2 in cite{Hemmecke+Radu:EtaRelations:2018
}.
- minimalSquareRootOfUnity: PositiveInteger -> PositiveInteger
minimalSquareRootOfUnity(p)
returns an integern
such that inZ
(x
) (wherex
is a primitiven
-th root of unity) there exists an elementy
such that y^2=p.p
must be a radical integer, i.e. should not contain the square of a prime.
- nu2: PositiveInteger -> Integer
- cite[
p
.~25
]{Shimura:ArithmeticTheory:1994
}
- nu3: PositiveInteger -> Integer
- cite[
p
.~25
]{Shimura:ArithmeticTheory:1994
}
- numberOfCuspsOfGamma0: PositiveInteger -> PositiveInteger
numberOfCuspsOfGamma0(m)
returns the number of cusps of levelm
.
- numberOfGaps: (PositiveInteger , List PositiveInteger ) -> NonNegativeInteger
numberOfGaps(n, l)
computes reduce(+, [floor(x/n
) forx
inl
], 0).
- primePower: (PositiveInteger , PositiveInteger ) -> NonNegativeInteger
primePower(d, p)
returnse
such thatgcd
(d/p^e,p
)=1
, i.e. the highest powere
such that p^e is a factor ofd
.
- rationalSquareRoot: Fraction Integer -> Record(rat: Fraction Integer , rootOf: PositiveInteger )
- if
z
= rationalSquareRoot(x
) thenx
= (z
.rat)^2
*z
.root
- rightCosetRepresentatives: (PositiveInteger , PositiveInteger ) -> List Matrix Integer
rightCosetRepresentatives(nn, mm)
returns a list of right coset representatives of $Gamma_0(mm*nn) backslash Gamma_0(mm
)$.
- rStarConditionMatrix: PositiveInteger -> Matrix Integer
rStarConditionMatrix(nn)
returns a matrix mat such that if n=#divisors(nn
) andv
is such thatmat*v=0
thenv
(1..n
) is inR^*
(nn
), in other words, the nullspace of mat “generates”R^*
(nn
).
- rStarConditions: (PositiveInteger , List Integer ) -> Integer
rStarConditions returns
0 if all conditions are fulfilled. Otherwise it returns a positive number in the range 1 to 4 that corresponds to the condition that is not met.
- rStarNonNegativeMatrix: (PositiveInteger , List Integer ) -> Matrix Integer
rStarNonNegativeMatrix(nn, idivs)
returns a matrix mat which is a vertical concatenation of rStarConditionMatrix(nn
) and (a part of) matrixLigozat(nn
) whose rowindices correspond to idivs. It computes matrixB_N
equation (8) in cite{Hemmecke+Radu:EtaRelations:2018
} (DOI:10
.1016/j.jsc
.2018.10.001) joined with the respective rows of matrix A_N from the same article.
- splitMatrix: (Integer , Integer , Integer , Integer ) -> Record(red: Matrix Integer , triang: Matrix Integer )
splitMatrix(a, b, c, d)
returns a record rec that contains two matrices rec.red=m1
and rec.triang=m2
such thatmat=m1*m2
according to cide[Lemma~4
.8]{Radu:PhD:2010
}, but in a variation as described in qetafun.spad, i.e. such that 0<=m2(1,2)<det(mat)/g
whereg
=gcd
(a,c
) and mat=[[a,b
],[c
,d
]]. Input condition: a*d-b*c>0
.
- splitMatrix: (Matrix Integer , Integer ) -> Record(red: Matrix Integer , triang: Matrix Integer )
splitMatrix(mat, delta)
computes splitMatrix(mat
, delta, 1, 0). Input condition: determinant(mat
)>0
.
- splitMatrix: (Matrix Integer , Integer , PositiveInteger , NonNegativeInteger ) -> Record(red: Matrix Integer , triang: Matrix Integer )
splitMatrix(mat, delta, m, lambda)
computes splitMatrix(a,b
,c
,d
) where the arguments are the matrix entries of matrix [[delta
, delta*lambda], [0,m
]]*mat. Input condition: determinant(mat
)>0
.
- upsilonExponent: (Integer , Integer , Integer , Integer ) -> IntegerMod 24
upsilonExponent(a,b,c,d)
returnsz
in {0..23} such that exp(pi*i*z/12) is a multiplier in the transformation of an eta function by the matrix [[a,b
],[c
,d
]] fromSL_2
(Z
). A definition can be found in cite[Lemma~2
.27]{Radu:PhD:2010
}.
- upsilonExponent: Matrix Integer -> IntegerMod 24
upsilonExponent(m)
for a matrixm
fromSL_2
(Z
) returns upsilonExponent(m
(1,1),m
(1,2),m
(2,1),m
(2,2)).
- width: (PositiveInteger , Integer ) -> Integer
width(m, c)
returns the width of the cusp a/c forGamma_0
(m
) and some a. The width is independent of a and given by m/gcd(c^2
,m
). cite[Lemma~2
.37]{Radu:PhD:2010
}