QEtaAuxiliaryPackage¶
qetaaux.spad line 109 [edit on github]
QEtaAuxiliaryPackage helps to do computations with eta-quotients that are modular functions.
- dedekindSum: (Integer, Integer) -> Fraction Integer
dedekindSum(p,q)
returns for two relatively prime integersp
andq
the Dedekind sum as defined by dedekindSum(p
,q
)=sum(sawTooth(1/q)*sawTooth(p*i/q),i=1
..q
-1).
- fractionalBernoulli1: Fraction Integer -> Fraction Integer
fractionalBernoulli1(x)
computest
- 1/2 wheret
is the fractional part ofx
, i.e.t
=x
- floor(x
)
- fractionalBernoulli2: Fraction Integer -> Fraction Integer
fractionalBernoulli2(x)
computest^2
-t
+ 1/6 wheret
is the fractional part ofx
, i.e.t
=x
- floor(x
)
- fractionalPart: Fraction Integer -> Fraction Integer
fractionalPart(x)
returnsx
- floor(x
)::Fraction(Integer).
- generalizedDedekindSum: (PositiveInteger, Integer, Integer, Integer, Integer) -> Fraction Integer
generalizedDedekindSum(nn,g,h,p,q)
returns the generalized Dedekind sum as defined in cite[p~673
]{Yang:GeneralizedDedekindEtaFunctions} by generalizedDedekindSum(nn
,g
,h
,p
,q
) = sum(sawTooth((g+i*nn)/(q*nn))*sawTooth((g’+p*i*nn)/(q*nn)),i=1
..q
-1). Condition: one?gcd
(p
,q
).
- 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
- kappaSchoeneberg: (PositiveInteger, Integer, Integer, Integer, Integer, Integer, Integer) -> Fraction Integer
kappaSchoeneberg(nn, g, h, a, b, c, d)
returns a valuex
such that eta_{g
,h
}(mat*tau) = exp(2*%pi*%i*x) * eta_{g'
,h'
}(tau) as given at the top of page 673 of cite{Yang_GeneralizedDedekindEtaFunctions_2004
} where mat=matrix[[a,b
],[c
,d
]]. See also eqref{eq:kappa_g-h
-N
-gamma-Schoeneberg}.
- kappaSchoeneberg: (PositiveInteger, Integer, Integer, Matrix Integer) -> Fraction Integer
kappaSchoeneberg(nn, g, h, mat)
returns a valuex
such that eta_{g
,h
}(mat*tau) = exp(2*%pi*%i*x) * eta_{g'
,h'
}(tau) as given at the top of page 673 of cite{Yang_GeneralizedDedekindEtaFunctions_2004
}. See also eqref{eq:kappa_g-h
-N
-gamma-Schoeneberg}.
- kappaYang: (PositiveInteger, Integer, Integer, Integer, Integer, Integer, Integer) -> Fraction Integer
kappaYang(nn, g, h, a, b, c, d)
returns a valuex
such that E_{g
,h
}(mat*tau) = exp(2*%pi*%i*x) * E_{g'
,h'
}(tau) as given in cite[Theorem~1
]{Yang_GeneralizedDedekindEtaFunctions_2004
} where mat = matrix [[a,b
],[c
,d
]]. Condition: not zero?c
.
- kappaYang: (PositiveInteger, Integer, Integer, Matrix Integer) -> Fraction Integer
kappaYang(nn, g, h, mat)
returns a valuex
such that E_{g
,h
}(mat*tau) = exp(2*%pi*%i*x) * E_{g'
,h'
}(tau) as given in cite[Theorem~1
]{Yang_GeneralizedDedekindEtaFunctions_2004
}. Condition: not zero? mat(2,1).
- 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
}.
- 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.
- minimizeVector: (Vector Integer, List Vector Integer) -> Vector Integer
minizeVector(
v
, basis) computesvps
:=
concat [w
forb
in bas | (w:=v+b; dot(w
,w
)<dot(v
,v
)]vms
:=
concat [w
forb
in bas | (w:=v-b
; dot(w
,w
)<dot(v
,v
)] From these vectors it takes the one with minimal length as the newv
and iterates as long as concat(vps
,vms
) is not empty. This minimal vector is eventually returned.
- modularGamma0?: (PositiveInteger, List Integer) -> Boolean
modularGamma0
(nn
,r
) returnstrue
iff the eta-quotient corresponding tor
is a modular function forGamma_0
(nn
). It is equivalent to zero?(modularGamma0
(nn
,r
)).
- modularGamma0: (PositiveInteger, List Integer) -> Integer
modularGamma0(nn, r)
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. This corresponds to the conditions given forR
(N
,i
,j
,k
,l
) on page 226 of cite{Radu_RamanujanKolberg_2015
} and to the conditions eqref{eq:sum=0
}, eqref{eq:pure-rhoinfinity}, eqref{eq:pure-rho0
}, and eqref{eq:productsquare} in qeta.tex. It is equivalent to check whether there is an extensionv
ofr
such that matrixModular(nn
)*v
is 0.
- 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
- sawTooth: Fraction Integer -> Fraction Integer
sawTooth(x)
is 0 ifx
is an integer andfractionalBernoulli1
(x
) otherwise.
- 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 qeta.tex, 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) -> Integer
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
(ZZ
). A definition can be found in cite[Lemma~2
.27]{Radu_PhD_2010
}.