# 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) splits n into u*v such that gcd(u,c)=1 and returns u. 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 for Gamma_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] with m1*m2 = [[m*a, c], [m*b, d]] and m1 being in SL_2(Z) and m2 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]] with h being an integer.
genusOfGamma0: PositiveInteger -> NonNegativeInteger
genusOfGamma0(level) returns the genus of the congruence subgroup Gamma_0(level). It corresponds to the series https://oeis.org/A001617 .
indexOfGamma0: PositiveInteger -> PositiveInteger
indexOfGamma0(n) computes the index of Gamma_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) with t a Hall divisor (https://en.wikipedia.org/wiki/Hall_subgroup) of m returns the 2x2 matrix with entries [[t, -a], [m, t*b]] such that n=m/t and t*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} where di and dj run over all positive divisors of m. This matrix is A_N as described after Theorem 5.2 in cite{Hemmecke+Radu:EtaRelations:2018}.
minimalSquareRootOfUnity: PositiveInteger -> PositiveInteger
minimalSquareRootOfUnity(p) returns an integer n such that in Z(x) (where x is a primitive n-th root of unity) there exists an element y 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 level m.
numberOfGaps: (PositiveInteger , List PositiveInteger ) -> NonNegativeInteger
numberOfGaps(n, l) computes reduce(+, [floor(x/n) for x in l], 0).
primePower: (PositiveInteger , PositiveInteger ) -> NonNegativeInteger
primePower(d, p) returns e such that gcd(d/p^e, p)=1, i.e. the highest power e such that p^e is a factor of d.
rationalSquareRoot: Fraction Integer -> Record(rat: Fraction Integer , rootOf: PositiveInteger )
if z = rationalSquareRoot(x) then x = (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) and v is such that mat*v=0 then v(1..n) is in R^*(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 matrix B_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 that mat=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 where g = 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) returns z 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]] from SL_2(Z). A definition can be found in cite[Lemma~2.27]{Radu:PhD:2010}.
upsilonExponent: Matrix Integer -> IntegerMod 24
upsilonExponent(m) for a matrix m from SL_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 for Gamma_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}