import sys, os; sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) import sympy as sp, random, itertools from grass import * from verify_op import Lhyp, C0, B, F, tB, tF I = sp.I def Lang(f): return Lhyp(f) - C0(f) random.seed(5) gens = [1, 2, 3, 4] allmonos = [()] + [m for r in range(1, 5) for m in itertools.combinations(gens, r)] def rand_f(): f = G() for mono in random.sample(allmonos, 6): a, b = random.randint(-2, 2), random.randint(-2, 2) f = f + G({mono: sp.exp(I*a*tB + I*b*tF) * sp.Rational(random.randint(-5, 5), 3)}) return f pt = {B: sp.Rational(27, 10), F: sp.Rational(-2, 5)} worst = 0 for trial in range(8): f, g = rand_f(), rand_f() top = (f * Lang(g) - Lang(f) * g).coeff((1, 2, 3, 4)) # average over the torus: integrate exp(i(a tB + b tF)) terms top = sp.expand(sp.expand(top).subs(pt)) avg = sp.integrate(sp.integrate(top, (tB, 0, 2*sp.pi)), (tF, 0, 2*sp.pi)) / (4*sp.pi**2) worst = max(worst, abs(complex(sp.N(avg)))) print("max |torus average of [f L_ang g - (L_ang f) g]_top| over 8 random pairs:", worst)