def test_H2_cylinder_diagram_contributions(): A = AbelianStratum(2).unique_component() c1 = sum(c.volume_contribution() for c in A.cylinder_diagrams(1)).integral_sum_as_mzv() c2 = sum(c.volume_contribution() for c in A.cylinder_diagrams(2)).integral_sum_as_mzv() assert c1 == M(4) / 3 assert c2 == (2 * M(1, 3) + M(2, 2)) / 3 vol = c1 + c2 assert vol == A.masur_veech_volume(rational=True) * M( 2 * A.stratum().genus())
def test_H211_cylinder_diagram_contributions(): A = AbelianStratum(2, 1, 1).unique_component() c1 = sum(c.volume_contribution() for c in A.cylinder_diagrams(1)).integral_sum_as_mzv() c2 = sum(c.volume_contribution() for c in A.cylinder_diagrams(2)).integral_sum_as_mzv() c3 = sum(c.volume_contribution() for c in A.cylinder_diagrams(3)).integral_sum_as_mzv() assert c1 == 7 * M(8) / 180 assert c2 == (1620 * M(1, 7) + 850 * M(2, 6) + 436 * M(3, 5) + 231 * M(4, 4) + 130 * M(5, 3) + 65 * M(6, 2) + 35 * M(7) - 35 * M(8)) / 1260
def test_H4odd_cylinder_diagram_contributions(): A = AbelianStratum(4).odd_component() c1 = sum(c.volume_contribution() for c in A.cylinder_diagrams(1)).integral_sum_as_mzv() c2 = sum(c.volume_contribution() for c in A.cylinder_diagrams(2)).integral_sum_as_mzv() c3 = sum(c.volume_contribution() for c in A.cylinder_diagrams(3)).integral_sum_as_mzv() vol = c1 + c2 + c3 assert vol == A.masur_veech_volume(rational=True) * M( 2 * A.stratum().genus())
def test_H11_cylinder_diagram_contributions(): A = AbelianStratum(1, 1).hyperelliptic_component() c1 = sum(c.volume_contribution() for c in A.cylinder_diagrams(1)).integral_sum_as_mzv() c2 = sum(c.volume_contribution() for c in A.cylinder_diagrams(2)).integral_sum_as_mzv() c3 = sum(c.volume_contribution() for c in A.cylinder_diagrams(3)).integral_sum_as_mzv() assert c1 == M(5) / 6 assert c2 == M(2) * M(3) / 3 - M(5) / 6 assert c3 == (2 * M(4) - M(2) * M(3)) / 3 vol = c1 + c2 + c3 assert vol == A.masur_veech_volume(rational=True) * M( 2 * A.stratum().genus())
def test_H31_cylinder_diagram_contributions(): # values from Table 3 of A. Zorich "Square tiled surfaces # and Teichmueller volumes of the moduli spaces of Abelian # differentials" (2002) A = AbelianStratum(3, 1).unique_component() c1 = sum(c.volume_contribution() for c in A.cylinder_diagrams(1)).integral_sum_as_mzv() c2 = sum(c.volume_contribution() for c in A.cylinder_diagrams(2)).integral_sum_as_mzv() c3 = sum(c.volume_contribution() for c in A.cylinder_diagrams(3)).integral_sum_as_mzv() assert c1 == M(7) / 15 assert c2 == (55 * M(1, 6) + 29 * M(2, 5) + 15 * M(3, 4) + 8 * M(4, 3) + 4 * M(5, 2)) / 45 vol = 16 * M(6) / 45
def as_pure_zeta(vol): support = set(sum(u) for u in vol.support()) support = [ d for d in support if not vol.homogeneous_component(d).is_zero() ] if len(support) != 1: raise ValueError("not homogeneous") d = support.pop() vol = vol.homogeneous_component(d) u = vol.phi_as_vector() zeta = M(d) v = zeta.phi_as_vector() for i in range(len(u)): if u[i]: break result = u[i] / v[i] * zeta if result != vol: raise ValueError("not pure zeta phi(vol)={} vs phi(Z({})) = {}".format( u, d, v)) return result