By: ValentinHirschi <valentin.hirschi@gmail.com>
cli: evaluate Levi-Civita tensors from gamma5 traces
Numerators that keep spenso::epsilon after Idenso's axial trace
simplification (e.g. H -> Z a through a top loop) are now bound to
components instead of only being diagnosed.
- Idenso's rules fix eps^{0123} = -i for gamma5 = i g^0 g^1 g^2 g^3, the
diag(-1,-1,1,1) of the chiral basis; idenso::epsilon::contract_epsilon4
(alphal00p/gammaloop#149) evaluates it on components.
- ninjars_graph::expand_components (formerly expand_spinor_chains) expands
spinor lines and four-dimensional Levi-Civita tensors in one pass. A
tensor's open Lorentz index joins a line, another tensor or a vector with
an explicit index and is summed over components, which also covers
contractions that leave eps(.., mink(4,i)) V(mink(4,i)) explicit.
- prepare expands numerators with Levi-Civita tensors once every external
polarization is bound; a remaining tensor is reported only when no
unbound state explains it. --r2 fdh keeps rejecting them.
- Tests: a hand-written Tr[g5 p0 p2 p3 p4] pentagon equals the trace of
explicit chiral-basis matrices times the scalar pentagon; H -> Z a reduces
in both engines, and its axial part flips sign with the loop orientation;
e+ e- -> Z a through a photon and a top loop agrees between unit spinors
and a spin-trace projector.
Numerators without Levi-Civita tensors take the previous path and register
no new symbol; reduce and prepare on all example fixtures, including the
--r2 fdh cases, are bitwise identical.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>