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 (seeAbelianVariety_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._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?