import numberdb.sage as numberdb # initialize Sage before named imports
from sage.rings.integer_ring import ZZ
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
R = PolynomialRing(ZZ, "h")
h = R.gen()
def truncate(polynomial, degree):
return sum(ZZ(polynomial[j]) * h ** j for j in range(degree + 1))
def euler_complete_intersection(n, degrees):
m = n - len(degrees)
f = (1 + h) ** (n + 1)
degree = ZZ(1)
for d in degrees:
degree *= ZZ(d)
inverse = sum((-ZZ(d) * h) ** j for j in range(m + 1))
f = truncate(f * inverse, m)
return degree * ZZ(f[m])
euler_complete_intersection(4, [5])The generator computes exact integer coefficients in $\mathbb Z[h]$ from Formula (1). It checks the smooth conic, cubic surface, quartic K3 surface and quintic threefold values, and verifies Formula (2) on every row.