..nodoctest
Igusa invariants¶
x.__init__(...) initializes x; see help(type(x)) for signature
-
recip.igusa_invariants.
h6_thesis
()¶ Reconstructs h6 from the formula in the author’s thesis. For verification of the thesis and testing of the code only.
EXAMPLE:
sage: from recip import * sage: h6_thesis() == igusa_modular_forms()[1] True
-
recip.igusa_invariants.
igusa_absolute_to_homogeneous
(i, prime=True)¶ Given a list [h4*h6/h10, h12*h4^2/h10^2, h4^5/h10^2] = [I4*I6’/I10, I2*I4^2/I10, I4^5/I10^2], returns a list [I2, I4, I6’, I10] or [I2, I4, I6, I10] (depending on whether prime is True, and uniquely determined only up to weighted scaling).
-
recip.igusa_invariants.
igusa_homogeneous_to_absolute
(i, prime=True)¶ Given a list a list [I2, I4, I6’, I10] or [I2, I4, I6, I10] (depending on whether prime is True), returns the list [h4*h6/h10, h12*h4^2/h10^2, h4^5/h10^2] = [I4*I6’/I10, I2*I4^2/I10, I4^5/I10^2]
EXAMPLES:
sage: from recip import * sage: k = [1,2,3] sage: j = igusa_absolute_to_homogeneous(k); j [2, 3, 3, 9] sage: igusa_homogeneous_to_absolute(j) [1, 2, 3] sage: j = igusa_absolute_to_homogeneous(k, False); j [2, 3, 0, 9] sage: igusa_homogeneous_to_absolute(j, False) [1, 2, 3] sage: l = [0,1,2] sage: igusa_homogeneous_to_absolute(igusa_absolute_to_homogeneous(l)) [0, 1, 2] sage: l = [1,0,2] sage: igusa_homogeneous_to_absolute(igusa_absolute_to_homogeneous(l)) [1, 0, 2] sage: l = [1,2,0] sage: igusa_homogeneous_to_absolute(igusa_absolute_to_homogeneous(l)) Traceback (most recent call last): ... ValueError: Invalid input: no homogeneous invariants exist for this triple of absolute invariants sage: l = [0,0,1] sage: igusa_homogeneous_to_absolute(igusa_absolute_to_homogeneous(l)) [0, 0, 1]
-
recip.igusa_invariants.
igusa_invariants_absolute
()¶ Returns the absolute Igusa invariants according to the choices made in the author’s thesis.
This is slow, because a they are completely written out as a rational function in theta constants.
When evaluating modular forms, it may be faster to evaluate igusa_modular_forms first, and then apply igusa_modular_forms_to_absolute to the output.
EXAMPLES:
sage: from recip import * sage: invs = igusa_invariants_absolute() # long time sage: len(invs) # long time 3
-
recip.igusa_invariants.
igusa_modular_forms
()¶ Returns the homogeneous Igusa invariants h4=I4, h6=I6’, h10=I10, h12=I10*I2.
EXAMPLES:
Check that the Igusa invariants are indeed sums over orbits of a product of theta series:
sage: from recip import * sage: gens = symplectic_generators(2) sage: th = theta_ring(2,2)[0].gens() sage: h4 = my_sum(ThetaModForm(th[0]**8).orbit(gens)) # long time sage: h6 = my_sum(ThetaModForm((th[0]*th[1]*th[2])**4).orbit(gens)) # long time sage: h10 = my_sum(ThetaModForm((th[0]*th[1]*th[2]*th[3]*th[4]*th[6]*th[8]*th[9]*th[12]*th[15])**2).orbit(gens)) sage: h12 = my_sum(ThetaModForm((th[4]*th[6]*th[8]*th[9]*th[12]*th[15])**4).orbit(gens)) # long time sage: igusa_modular_forms() == [h4, h6, h10, h12] # long time True
-
recip.igusa_invariants.
igusa_modular_forms_to_absolute
(i)¶ Converts igusa modular forms to absolute Igusa invariants.
INPUT:
a list [h4,h6,h10,h12]OUTPUT:
a list [h4*h6/h10, h12*h4^2/h10^2, h4^5/h10^2]See igusa_modular_forms().
EXAMPLES:
sage: from recip import * sage: igusa_modular_forms_to_absolute([1,2,3,4]) [2/3, 4/9, 1/9]
-
recip.igusa_invariants.
rosenhain_invariants
(g)¶ Returns a (2g-1)-tuple of Rosenhain invariants e_1,...,e_{2g-1}.
For g<=2, if the e_i(tau) are distinct from each other and from 0,1,inty, then CC^g / tau*ZZ^g+ZZ^g is the Jacobian of y^2 = x(x-1)*prod_i (x-e_i(tau)).
EXAMPLES:
sage: from recip import * sage: rosenhain_invariants(2) [t0^2*t1^2/(t2^2*t3^2), t1^2*t12^2/(t2^2*t15^2), t0^2*t12^2/(t3^2*t15^2)] sage: rosenhain_invariants(1) Traceback (most recent call last): ... NotImplementedError: Sorry, Rosenhain invariants currently only implemented for g=2