示例#1
0
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())
示例#2
0
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
示例#3
0
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())
示例#4
0
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())
示例#5
0
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
示例#6
0
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