Elliptic and Modular Invariants

Binary quadratic forms of negative discriminant describe positive definite lattices in the complex plane, with integral-valued inner product. As such, it is possible to apply modular and elliptic functions to the form, interpreting this as an element of the upper half plane.

Lattice(f) : QuadBinElt -> Lat
Given a binary quadratic form f = ax2 + bxy + cy2 of negative discriminant, returns the rank two lattice of f having Gram matrix

(( a b/2atop b/2 c )).

Note that the lattice L is the half-integral lattice such that integral representations f(x, y) = n are in bijection with vectors (x, y) of norm n, which will be a rational number.

GramMatrix(f) : QuadBinElt -> AlgMatElt
Returns the Gram matrix of the binary quadratic form f, which need not be of negative discriminant. The matrix will be half-integral and defined over the rationals.
ThetaSeries(f, n) : QuadBinElt, RngIntElt -> RngSerElt
The integral theta series of the binary quadratic form f to precision n.
RepresentationNumber(f, n) : QuadBinElt, RngIntElt -> RngIntElt
The nth representation number of the form f of negative discriminant.
jInvariant(f) : QuadBinElt -> RngSerElt
For a binary quadratic form f = ax2 + bxy + cy2 with negative discriminant, return the j--invariant of f, equal to the j--invariant of τ = ( - b + Sqrt(b2 - 4ac))/2a.
Eisenstein(k, f) : RngIntElt, QuadBinElt -> RngSerElt
Given a positive even integer k = 2n and a binary quadratic form f = ax2 + bxy + cy2, return the value of the Eisenstein series Ek(L) at the complex lattice L = < a, ( - b + Sqrt(b2 - 4ac)) /2 >.
WeierstrassSeries(z, f) : RngSerElt, QuadBinElt -> RngSerElt
Given a complex power series z with positive valuation and a binary quadratic form f = ax2 + bxy + cy2, returns the q--expansion of the Weierstrass wp-function at the complex lattice L = < a, ( - b + Sqrt(b2 - 4ac) )/2 >.

Example QuadBin_ell_mod (H35E2)

> Q := QuadraticForms(-163);
> f := PrimeForm(Q,41);
> CC<i> := ComplexField();
> PC<z> := LaurentSeriesRing(CC);
> x := WeierstrassSeries(z,f);
> y := -Derivative(x)/2;
> A := -Eisenstein(4,f)/48;
> B := Eisenstein(6,f)/864;
> Evaluate(y^2 - (x^3 + A*x + B),1/2);
1.384608660824596881000000000 E-26 - 1.305091481190174818000000000 E-26*i
V2.28, 13 July 2023