8adc0ea5

By: Kaapo Seppänen <seppanenkaapo@gmail.com>

register thermal bodies per contour offset and test tail precision

Thermal function-map entries took the contour offset s as a runtime
argument. Evaluator optimization could then group (1 + s)/2 + n so that
the vacuum weight met an exponentially small occupation before s, and
the generic evaluator lost the gluon tail: 2e-8 relative error at
a = 10 and an exact zero at a = 40. Each body is now registered once per
offset, with s as a tag. The vacuum weight folds symbolically, and the
s = -1 body is the bare occupation, independent of evaluation order.

Regression tests cover the precision fixes at both temperatures:

- zero_temperature_steps_are_exact_outside_the_fermi_sea requires the
  order-zero body to equal its vacuum weight exactly above the Fermi
  surface, in real and complex f64, compiled C++ and Arb. A step written
  as theta(E - sigma*mu) fails on about a fifth of the sampled energies.
- vacuum_subtracted_thermal_weights_keep_uv_tails_and_exact_zeros
  evaluates vacuum-subtracted weights with a nonzero vacuum value through
  the production evaluator. Eager f64, symjit and Quad must match an Arb
  oracle from the bulk to occupations near binary64 underflow, and zero
  temperature must give exact zeros outside the Fermi sea.
- thermal_sunrise_f64_keeps_uv_tails_and_exact_zeros generates the quark
  sunrise with UV subtraction and the assembly backend. Raw f64 must match
  Arb along a UV ray at finite temperature and vanish exactly at zero
  temperature and density.

Reverting the hyperbolic bodies, the numerical vacuum subtraction, the
zero-temperature step or the tagged offset each fails at least one test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
configure