Your free trial has ended.

Try the live demo or log in .

26aad03f

By: ValentinHirschi <valentin.hirschi@gmail.com>

Fix continuation and degenerate-kinematics defects of the masters

A sweep of A0/B0/dB0/C0/D0 over all propagator relabelings against
OneLOop 3.6 in double and quadruple precision (tests/oracle_sweep.py,
tests/support/sweep_oracle.f90, examples/oracle_sweep.rs) found the
defects below. All are fixed in the exact expressions, so every route
(Expression interpreter, SymJIT, native generated code, Float and Dual
evaluation, master hooks) carries them; the native code and the SymJIT
assets are regenerated and the hand-written binary64 kernels are
re-transcribed from the fixed expressions.

Bubbles (two_point.rs):
- B0/dB0 with one massless line returned NaN: the two-mass roots at
  m1 = 0 round to 1 - ulp and log(1 - 1/x) becomes log(0). B0 uses the
  one-mass formula for either massless line, and both take x and x - 1
  from their own quadratics. dB0 keeps its two ratios correlated near
  the pseudo-threshold.
- Zero-momentum tensor anchors put real masses of opposite sign on the
  wrong lip of log(1 - 1/x) (Im B1 off by pi, likewise B11, B111).
- B1111 at p^2 = 0 had OneLOop's overall sign error in its mass-swap
  reconstruction (bub1111); the finite part now equals the Feynman
  parameter integral and the p^2 -> 0 limit.

Triangles (triangle.rs, triangle_hv.rs):
- Two- and three-mass real roots took a fixed lip instead of the lip
  OneLOop derives from p -> p(1 + i eps); wrong for some orderings, e.g.
  the reported top-mass triangles. Lips now follow the first-order shift,
  with square-root steps at r-function thresholds.
- r-function roots are exact at p = 0 (analytically, as E + delta, so
  derivatives stay exact) and at (pseudo-)thresholds; r - 1/r is taken
  from the square root itself. trif3 keeps c = 0 exact, takes the small
  root from Vieta's product and skips charts with a double root at zero.
- 't Hooft-Veltman C0: lips of y and z no longer come from rounding.

Boxes (box_integral.rs, box_complex.rs):
- Infrared boxes lost sheets in ratios; boxf1 dropped terms when one
  r-function vanished; boxf0 swapped root labels; boxf33 used another
  relabeling than OneLOop's boxf3 (falling back to a cyclic chart where
  that degenerates); boxf4 used fallback lips instead of the IEPS lips
  (the four-mass s12*s23 < 0 defect, reproducer now on by default).
- Contour box: an exact double root of s3 gave 0/0; and at exactly real
  masses the residue logarithms, analytically real, took their lip from
  rounding (wrong by 2 pi i multiples on about a quarter of real-mass
  contour points with a pole inside, e.g. D0(2.63, 0, -1.22, 2.51,
  0.624, 2.60; 0.5, 0, 0.5, 0.292)). They are now exactly real and
  follow the widths. OneLOop 3.6 itself differs from its own
  vanishing-width limit at some of these points; references for them are
  that limit (tests/data/real_mass_limits.txt).

Tests: tests/permutation_regressions.rs checks 683 rows (OneLOop
quadruple-precision references where its double result agrees) through
the native code (hand-written and generated), the Expression and SymJIT
backends and 256 bits (native and interpreted), their relabelings, the
real-mass contour limits through every route, and the tensor-bubble
anchors against Feynman-parameter values; the four-mass reproducer runs
through every route; tests/native_tensor_binary64.rs now asserts the
two tensor expression defects it only reported (opposite-sign anchors,
NaN at m1 = 0). Rows where Symbolica's tracked-precision Float rounds
exact cancellations (listed) are checked in binary64 only, and SymJIT's
own operation order is allowed 1e-7 on the most ill-conditioned rows
(its values there are unchanged from e0e61d6).

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