QEtaModularGammaCategory¶
qetamod.spad line 432 [edit on github]
QEtaModularGammaCategory provides functions to check modularity conditions.
- cusps: () -> List Cusp
cusps()returns representatives for all the (inequivalent) cusps for the congruence subgroup that the respective package represents. They are sorted by their size as rational numbers with infinity being the biggest cusp. Note that cusps()=[cusp(x(1,1),x(2,1)) forxin doubleCosetRepresentatives()] where doupleCosetRepresentatives() is from the respective congruence subgroup that is connected to the package.
- cuspToMatrix: Cusp -> Matrix Integer
For cusp=(a:c), cuspToMatrix(cusp) returns a matrix gamma=[[a,
b],[c,d]] corresponding to the cusp (a:c) of this domain. We assume that a/c is a normalized cusp, i.e. cusp=normalizeCusp(cusp).
- etaCofactorSpace: (List List Integer, QEtaSpecification, PositiveInteger, NonNegativeInteger) -> Record(indices: List List Integer, particular: Union(Vector Integer, failed), basis: List Vector Integer)
etaCofactorSpace(idxs,rspec,m,t)returns a vectorvand the basis of a space such that #v=#idxs and modular?(members(s),rspec,m,t) istruefor anys=v+ reduce(_+, [z.i* basis.iforiin 1..#basis]) and any sufficiently long listzof integers. The function fails, if there is no such solution. The indices part of the result is equal toidxsand corresponds to the entries of the solution vectors.
- etaCofactorSpaceSystem: (List List Integer, QEtaSpecification, PositiveInteger, NonNegativeInteger) -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer, qsgn: List Integer)
etaCofactorSpaceSystem(idxs,rspec,m,t)returns a matrix mat and a vectorvsuch that for the integer solutionssof the equation mat*s=v it holds modular?(sspec,rspec,m,t) where sspec results from the list of the first #idxs entries ofs. Withidxsone can specify what indexes should be allowed in the solution space.
- etaQuotientMonoidInfinitySystem: List List Integer -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer, qsgn: List Integer)
etaQuotientMonoidInfinitySystem(idxs)returns etaQuotientMonoidSystem(idxs,[infinity()$Cusp]).
- etaQuotientMonoidNoPolesSystem: (List List Integer, List Cusp) -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer, qsgn: List Integer)
etaQuotientMonoidNoPolesSystem(idxs,nopolesat)returns etaQuotientMonoid(idxs,[],nopolesat).
- etaQuotientMonoidSystem: (List List Integer, List Cusp) -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer, qsgn: List Integer)
etaQuotientMonoidSystem(idxs,polesat)returns etaQuotientMonoidNoPolesSystem(idxs,nopolesat) = etaQuotientMonoidSystem(idxs,[],nopolesat) for nopolesat:=[cforcin cusps() | not member?(c,polesat)].
- etaQuotientMonoidSystem: (List List Integer, List Cusp, List Cusp) -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer, qsgn: List Integer)
etaQuotientMonoidSystem(idxs,polesat,nopolesat)returns a record that can be given to zsolve$X4ti2in order to find the generators of the monoid of (generalized) eta-quotients that are modularwrt. the group represented by this package and have no poles at the cusps given bynopolesat. Furthermore, setup the system in such a way that at all cusps inpolesatthe expansion order of a solution of the system will be non-positive. The indices of the eta-functions that may appear is given byidxs. Note that the union of poleat andnopolesatcan be a subset of all cusps given by cusps(nn).
- etaQuotientMonoidSystem: (List List Integer, List Cusp, List Integer, List Integer, List Cusp) -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer, qsgn: List Integer)
etaQuotientMonoidSystem(idxs,polesat,rels,ords,nopolesat)returns a record that can be given to zsolve$X4ti2in order to find the generators of the monoid of (generalized) eta-quotients that are modularwrt. the group represented by this package and have no poles at the cusps given bynopolesatand for all cusps inpolesatthe expansion order fulfills the relation at the respective cusp. #polesat>=#rels and #polesat>=#ords. Missing values are assumed to be 0. Entries inrelscan be 1,0,-1and stand for>=, =, and<=, respectively. The indices of the eta-functions that may appear is given byidxs.
- genus: () -> NonNegativeInteger
genus()returns the genus of the congruence subgroup connected to the package (eitherGamma_0(nn) orGamma_1(nn)).
- groupLevel: () -> PositiveInteger
groupLevel()returns the group level of the group represented by the respective domain.
- matrixEtaOrder: (List Cusp, List List Integer) -> Matrix Fraction Integer
matrixEtaOrder(spitzen,idxs)returns the matrix given by [matrixEtaOrderRow(cusp,idxs) for cusp inspitzen] with duplicate rows removed.
- matrixEtaOrderElement: (Cusp, List Integer) -> Fraction Integer
z:=matrixEtaOrderElement(cusp,idx). The parameter corresponds to the index of a (generalized) eta-quotient, i.e. it can be of the form idx=[delta,
g] or of the form idx=[delta] withgin the range 0..delta. Thenzis the coefficient ofr_{delta,g} in cite[Theorem~4]{Robins_GeneralizedDedekindEtaProducts_1994}, except for the casenn=4,gcd(denom(cusp),nn)=2(orGamma1(4)-equivalent) where we return half of this coefficient. If idx=[delta] then z=1/2*matrixEtaOrderElement(cusp,[delta,0])/2. and thus corresponds to the coefficient of $r_delta$ in eqref{eq:order-rbar-non-adjusted} in Theorem~ref{thm:matrixEtaOrderRobins}. Note that Robins refers to an expansion in the uniformizing variableq^(gcd(c,nn)/nn) (where cusp=a/c). That is equal toq^(1/width(c)$CongruenceSubgroupGamma1(nn)) except for the casenn=4andgcd(nn,c)=2. In that case the width of the cusp 1/2 is 1 and not 2=4/gcd(4.2). For this case, we deviate from Robins’ coefficients and adapt to an expansion inqrather than an expansion inq^(1/2).
- matrixEtaOrderFull: (List Cusp, List List Integer) -> Matrix Fraction Integer
matrixEtaOrderFull(spitzen,idxs)returns a matrix given by [matrixEtaOrderRow(cusp,idxs) for cusp inspitzen].
- matrixEtaOrderRow: (Cusp, List List Integer) -> List Fraction Integer
matrixEtaOrderRow(cusp, idxs)returns [matrixEtaOrderElement(cusp,idx) for idx in idxs].
- matrixModular: List List Integer -> Matrix Fraction Integer
matrixModular(idxs)returns a matrix matmat*v=0for an (extended) exponent vector where the exponents correspond toidxs, i.e. #v=#idxs+k wherekcorresponds to additional (slack) variables due to the modularity conditions. The rows corresponding to slack variables have been normalized so that the entry of the slack variable is 1. The first row corresponds to 1/2 of the sum of exponents of pure eta-functions, so that when multiplied by the exponent vectors corresponding toidxsit gives the weight of the eta-quotient. The second row (when multiplied by the exponent vectors corresponding toidxs) gives the expansion order at infinity. The third row (when multiplied by the exponent vectors corresponding toidxs) gives the expansion order at the cusp 0.
- modular?: (QEtaSpecification, QEtaSpecification, PositiveInteger, NonNegativeInteger) -> Boolean
modular?(sspec,rspec,m,t)returnstrueiff (sspec,rspec,m,t) specifies a modular function in levelnnfor the respective group.
- modular?: QEtaSpecification -> Boolean
modular?(rspec)returnstrueiff spec specifies a modular function in levelnnfor the respective group.
- modularOrbit: (QEtaSpecification, PositiveInteger, NonNegativeInteger) -> List NonNegativeInteger
modularOrbit(rspec, m, t)(for $Gamma_0(N) whereNis level(rspec)) computes the elements of $modularOrbit{r,m,t)$ as defined in qeta.tex, cite[Definition~42]{Radu_RamanujanKolberg_2015} and cite[Lemma~4.35]{Radu_PhD_2010} wereris pureExponents(rspec) andrspecis expected to specify a pure eta-quotient. For $Gamma_1(N)$, modularOrbit(rspec,m,t) returns [t].
- modularOrbit: QGeneratingFunctionVariable -> List NonNegativeInteger
modularOrbit(dissect)returns modularOrbit(rspec,m,t) where rspec=definingSpecification(dissect), m=multiplier(dissect), and t=offset(dissect).
- numberOfGapsForSamba: () -> Integer
numberOfGapsForSamba()returns the number of gaps (counted from the elements in the algorithm SAMBA that is sufficient to ensure a module basis, i.e. it is a criterion to avoid needless computation. ForCongruenceSubgroupGamma0this is equal to genus(). If no theorem for another group is known it will return-1, with the meaning that SAMBA must really check all critical element for zero reduction.
- rightCosetRepresentatives: PositiveInteger -> List Matrix Integer
rightCosetRepresentatives(mm)returns representatives of $G(nn) diagdownG(mm)$ for $G$ being the group constructor represented by this domain, i.e. either $Gamma_0$ or $Gamma_1$. groupLevel()$MODG must be a multiple ofmm.
- weaklyModular?: QEtaSpecification -> Boolean
weaklyModular?(spec)returnstrueiffspecspecifies a weakly modular function in levelnn(for the respective group) of some integer weightk.
- width: (PositiveInteger, Matrix Integer) -> PositiveInteger
width(mm, gamma)returns the width of the cusp=(a:c) forG(mm) whereGis the congruence subgroup ofSL_2(ZZ) connected to this package and gamma = matrix [[a,b],[c,d]]. Note thatmmcan be different from groupLevel().
- width: Cusp -> PositiveInteger
width(cusp)returns the width of the cusp=(a:c) forG(nn) whereGis the congruence subgroup ofSL_2(ZZ) connected to this package.
- width: Matrix Integer -> PositiveInteger
width(gamma)returns the width of the cusp=(a:c) forG(nn) whereGis the congruence subgroup ofSL_2(ZZ) connected to this package andgamma= matrix [[a,b],[c,d]].