Your free trial has ended.

Try the live demo or log in .

7153ffbe

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

cli: robust preparation of hand-written one-loop DOT graphs

Fix the usability and robustness defects found by surveying the CLI on
arbitrary one-loop DOT graphs:

- --model also selects FeynKit's qcd, qed, qcd_qed, yang_mills and
  electroweak sectors; an unknown name reports the file it tried.
  Fixture, graph and model read errors name their path.
- Install a stderr tracing subscriber before Symbolica can install its
  stdout one, so warnings never corrupt the JSON on stdout.
- A numerically coincident propagator pair fails only its own lane
  (EvaluationStatus::RepeatedPropagator) instead of the whole generic
  batch; the other lanes are evaluated unchanged.
- reduce without samples is an error; failed runs list the failing lanes.
- Explicit mode rejects a compact DOT without any num attribute.
- --feynman-rules derives the generator's 1/AutG and closed fermion/ghost
  loop sign for compact DOT without overall_factor; graph_factors reports
  them in every mode.
- One open color pair is closed with delta/N automatically; other open
  indices name their slot, external leg and half-edge. external_legs lists
  each leg's physical index, momentum key, edge and half-edge.
- prepare detects unbound spinors, polarizations, color invariants and
  Levi-Civita tensors with a clear message (an error with samples, a
  warning otherwise); --color-dimension-invariants exposes the fixture
  policy on the command line.
- Nonzero propagator widths warn; --complex-mass-propagators uses
  m^2 - i m Gamma in every propagator denominator.
- Disconnected graphs are rejected.
- external_spinors binds explicit chiral-basis spinors; spinor chains are
  expanded into components. A test checks unit-spinor amplitudes against
  a symbolic spin-trace projection.

Model and integrand flags are shared by prepare, reduce, bench,
export-bench and compare through GraphOptions. The new checks register no
Symbolica symbol on the success path, so evaluator operation order and
all existing results stay bitwise identical; benchmark timings are
unchanged.

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