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 Surfacegamma_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