#SageMath code for the experiments of the genus 2 JS surface in Section 3.3.3 of the arXiv version. #Importing RiemannTheta package, see https://github.com/nbruin/RiemannTheta for the installation. from riemann_theta.riemann_theta import RiemannTheta #Complex field with 53 bits of precision. CC=ComplexField(prec=53) #The discrete Riemann matrix of level 7 in Table 4 of the arXiv version. JSg2=matrix(CC,[[-0.183404164493890 + 0.965148269314525*I, 0.183404164493890 + 0.034851730685474*I], [0.183404164493890 + 0.034851730685475*I, -0.183404164493890 + 0.965148269314525*I]]) #Riemann theta function in JSg2. RT=RiemannTheta(JSg2) #The list of odd characteristics. oddChar=[v for v in GF(2)^4 if v[:2]*v[2:] == 1] #The list of theta constants in odd characteristics. oddDeriv=[vector(RT(char=c,derivs=[[0],[1]])) for c in oddChar] #The list of 6 branch points of the underlying algebraic curve. BP=[-v[0]/v[1] for v in oddDeriv] #They are pairwise reciprocal as follows. BP[0]*BP[2] #1.00000000000000 + 2.77555756156289e-16*I BP[1]*BP[3] #0.999999999999999 - 1.38777878078145e-16*I BP[4]*BP[5] #1.00000000000000 + 3.88578058618805e-16*I