"""Check C_1 = -Delta_D^s exactly, coefficient by coefficient, at two points.""" import itertools import os import sys sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) import sympy as sp from grass import G from casimir import casimir, B, F, tB, tF def radial_laplacian(f): d = B - F p = B**2 - 1 q = 1 - F**2 return (sp.diff(p * sp.diff(f, B), B) + sp.diff(q * sp.diff(f, F), F) - 2 * p / d * sp.diff(f, B) + 2 * q / d * sp.diff(f, F)) points = [ {B: sp.Rational(23, 10), F: sp.Rational(3, 10), tB: sp.Rational(7, 10), tF: sp.Rational(-4, 10)}, {B: sp.Rational(51, 10), F: sp.Rational(-7, 10), tB: sp.Rational(1, 3), tF: sp.Rational(2)}, ] monomials = [mono for degree in range(5) for mono in itertools.combinations(range(1, 5), degree)] checked = 0 for f in [B, F, B**2, B * F, F**2, sp.exp(B) * sp.cos(F)]: # casimir.py returns -2*C_1, while the manuscript uses C_1 = -Delta_D^s. actual = casimir(G.c(f)) * sp.Rational(-1, 2) expected = -radial_laplacian(f) for point in points: for mono in monomials: difference = actual.coeff(mono) - (expected if not mono else 0) residual = sp.simplify(sp.sympify(difference).subs(point)) assert residual == 0, (f, point, mono, residual) checked += 1 print(f"ok {f}: C_1 = -Delta_D^s at both points, all 16 coefficients") print(f"passed {checked} exact coefficient checks in 12 function-point pairs")