Documentation#

Abelian variety constructor#

Constructor for abelian varieties with extra structure.

AUTHORS:

  • Anna Somoza (2021-22): initial implementation

thetAV.constructor.AbelianVariety(*data, **kwargs)#

Create the abelian variety corresponding to the given defining data.

INPUT:

An integer, string, newform, modsym space, congruence subgroup or tuple of congruence subgroups (see AbelianVariety() in SageMath) or a theta structure (see AbelianVariety_ThetaStructure).

OUTPUT: a modular abelian variety with extra structure.

EXAMPLES:

Giving the data of the theta structure associated to an Abelian Variety we can create an instance of AbelianVariety_ThetaStructure:

sage: from thetAV import AbelianVariety
sage: AbelianVariety(GF(331), 4, 1, [328,213,75,1])
Abelian variety of dimension 1 with theta null point (328 : 213 : 75 : 1) defined over Finite Field of size 331

If the level of the abelian variety is 2, it correctly returns an instance of KummerVariety_ThetaStructure:

sage: from thetAV import AbelianVariety
sage: AbelianVariety(GF(331), 2, 2, [328,213,75,1])
Kummer variety of dimension 2 with theta null point (328 : 213 : 75 : 1) defined over Finite Field of size 331

But the function is also compatible with the functionality currently available in SageMath:

sage: AbelianVariety(Gamma0(37))
Abelian variety J0(37) of dimension 2
sage: AbelianVariety('37a')
Newform abelian subvariety 37a of dimension 1 of J0(37)
sage: AbelianVariety(Newform('37a'))
Newform abelian subvariety 37a of dimension 1 of J0(37)
sage: AbelianVariety(ModularSymbols(37).cuspidal_submodule())
Abelian variety J0(37) of dimension 2
sage: AbelianVariety((Gamma0(37), Gamma0(11)))
Abelian variety J0(37) x J0(11) of dimension 3
sage: AbelianVariety(37)
Abelian variety J0(37) of dimension 2
sage: AbelianVariety([1,2,3])
Traceback (most recent call last):
...
TypeError: X must be an integer, string, newform, modsym space, congruence subgroup or tuple of congruence subgroups

TEST:

The constructor should also pass the named parameters:

sage: from thetAV import *
sage: F.<z> = GF(83^2)
sage: T = [68, z + 33, 46, z + 33, 2*z + 29, 77*z + 58, 81*z + 31, 38*z + 16, 8, 67*z + 53, 48, 67*z + 53, 2*z + 29, 38*z + 16, 81*z + 31, 77*z + 58]
sage: A = AbelianVariety(F, 4, 2, T, check=True)
thetAV.constructor._with_theta_basis(label: str, *data, **kwargs)#
thetAV.constructor._from_curve(C, level=4)#

Given a hyperelliptic curve of genus 2, returns the analytic theta null point of level 4 (default) or 2.

This function is accessible via AbelianVariety.from_curve or KummerVariety.from_curve

EXAMPLES

sage: from thetAV import AbelianVariety
sage: F = GF(83^2); Fx.<X> = PolynomialRing(F)
sage: a = [0, 1, 3, 15, 20]
sage: C = HyperellipticCurve(prod(X - al for al in a)); C
Hyperelliptic Curve over Finite Field in z2 of size 83^2 defined by y^2 = x^5 + 44*x^4 + 28*x^3 + 23*x^2 + 70*x
sage: th = AbelianVariety.from_curve(C); th.with_theta_basis('F(2,2)')
(1 : 37 : 56 : 57 : 34*z2 + 43 : 0 : 50*z2 + 73 : 0 : 30 : 2*z2 + 82 : 0 : 0 : 16*z2 + 37 : 0 : 0 : 61*z2 + 21)

TODO :: Can we generalize to more curves: Genus 1? Genus >2?