Siegel reduction of period and Riemann matrices

We consider \(g\times 2g\) complex matrices partitioned as \((\Omega_1 | \Omega_2)\) such that the associated \(g\times g\) Riemann matrix \(\Omega=\Omega_1^{-1}\Omega_2\) satisfies:

  • \(\Omega\) is symmetric,

  • the imaginary part of \(\Omega\) is positive-definite.

This property is preserved under the right-action of \(Sp(2g,\ZZ)\). The notion of being Siegel reduced for Riemann matrices (see [DHBvHS2004]) can be extended to period matrices by defining a period matrix to be Siegel reduced if the associated Riemann matrix is.

This module implements a routine to compute a Siegel reduced form, together with the transformation matrix.

EXAMPLES:

sage: from riemann_theta.siegel_reduction import siegel_reduction
sage: from sage.schemes.riemann_surfaces.riemann_surface import numerical_inverse
sage: CC = ComplexField(20)
sage: P = matrix(CC,2,4,[1,3,1+5*I,12+10*I,0,1,I,4+3*I])
sage: Phat, Gamma = siegel_reduction(P)
sage: Phat
[  1.0000   3.0000 5.0000*I 10.000*I]
[ 0.00000   1.0000 1.0000*I 3.0000*I]
sage: Gamma
[ 1  0 -1  0]
[ 0  1  0 -4]
[ 0  0  1  0]
[ 0  0  0  1]
sage: numerical_inverse(Phat[:,:2])*Phat[:,2:]
[2.0000*I 1.0000*I]
[1.0000*I 3.0000*I]

We can also pass in a Riemann matrix:

sage: Omega = numerical_inverse(P[:,:2])*P[:,2:]
sage: Omega_hat , Gamma2 = siegel_reduction(Omega)
sage: Phat[:,:2]^(-1)*Phat[:,2:] == Omega_hat
True
sage: Gamma == Gamma2
True

AUTHORS:

  • Nils Bruin, Sohrab Ganjian (2021-09-08): initial version

riemann_theta.siegel_reduction.siegel_reduction(M)

Return a Siegel reduced matrix, together with the transformation matrix.

INPUT:

The input can be either a gxg Riemman matrix or a gx2g period matrix of a Riemann surface.

  • M – gxg Riemann matrix or gx2g period matrix

OUTPUT:

The outputs are matrices omega_hat and gamma_matrix. Depedning on the size of the input, omega_hat can either be a gxg Siegel reduced Riemann Matrix or a gx2g Siegel reduced period matrix of a Riemann Surface. The former happens when the input matrix is gxg, and the latter occurs when the input is gx2g.

  • omega_hat – gxg Siegel reduced Riemann matrix or gx2g Siegel reduced period matrix of a Riemann Surface

  • gamma_matrix – 2gx2g transformation matrix

EXAMPLES:

sage: from riemann_theta.siegel_reduction import siegel_reduction
sage: omega = (-1/(2*CC.pi()*CC.gen())) * Matrix(CC, [[111.207, 96.616],[96.616, 83.943]])
sage: M, G = siegel_reduction(omega)

An example from a genus 5 curve:

sage: R.<X,Y>=QQ[]
sage: C = Curve(Y^2-(X^10+3))
sage: RS = C.riemann_surface()
sage: RM = RS.riemann_matrix()
sage: M, G = siegel_reduction(RM)

REFERENCES:

AUTHORS:

  • Nils Bruin, Sohrab Ganjian (2021-08-19): initial verision