26b57b78

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

fix factorized tensor bookkeeping and numerator lookup

Keep graph coefficients outside FORM, validate Lorentz domains before vacuum
projection, and account for coefficient poles in analytic/numerical epsilon
orders. Preserve complex PySecDec parameters and signed external components;
combine numerical sectors into one estimator. Strengthen exact contraction
oracles and explicitly exercise the fast numerical tests without enabling
them by default.

Reject failed sample comparisons early, cache zero-mask checks after symbolic
matching, and lock accepted numerator classes per topology. Preserve each
bucket's ordered search/insertion and remove redundant graph clones. Extend
the covariant-cut warning to restrictive diagram filters and record the review
and verification evidence.

Reserve existing serialized indices before compact tensor parsing and keep
canonical dummies distinct from external slots. Pin the minimal Symbolica
nested-sum counter repair to the existing revision and regenerate Hakari
source pins. Remove the summand workaround and numeric expansion from the
UV comparator. Verify generic capture, nested sums, invalid contractions
and the full slow ttH UV comparison without expanding numerators.

Remove only proven-zero additive subexpressions from scalar coefficients,
including zeros inside nonzero complex coefficients. Guard numerical-content
collection to exact real rational coefficients and positive integer powers;
use equal-coefficient grouping otherwise. Check scratch candidates for cycles
and retain surviving factors. Regressions cover mixed angular products,
complex coefficients, and unchanged fractional/inverse/float spectators,
without graph-numerator expansion or a CFF fallback.

User prompt (verbatim):

Continue, and also:
Launch a subagent to study the slowdown occurring during generation and comparison with numerators of 50k+ diagrams. It's not due to the evaluation time of a single numerator but it's during the lookup with all previous accepted entries (of course it's unavoidable to have this growth in lookup time but maybe an agent can find a non-invasive easy improvement/optimization in feyngen for this).

User prompt (verbatim):

Implement all not-too-invasive recommendations for the improvement in feyngen.

User prompt (verbatim):

Stop yourself temporarily as soon as you are at a good stopping point, getting out of quota.

User prompt (verbatim):

Run multiple agents (like 4) to cross-audit the code and the changes in depth

User prompt (verbatim):

Run multiple agents (like 4) to cross-audit the code and the changes in depth

User prompt (verbatim):

And once you've finished the audits and included all the changes you deemed necessary (make sure you do the quick fast pySecDec tests in vakint since you changed the pysecdec eval method and those corresponding tests are disabled by default (keep them disabled but run them once at least here, only those fast enough). Then make sure you commit+push a merge-ready PR (with all local gates and test ready) and then babysit the PR at a rate of one check every 30min.

User prompt (verbatim):

Continue as planned, but summarize what you've done in this last review pass.

User prompt:
Continue as planned, and get this PR in a merge-ready stat with green CI (once all local gates are green, babysit the PR at a 30min interval)

User prompt:
OK, and make sure the fix to `Idenso reports a Lorentz dummy contracted more than once` is generic. We really need a robust and generic gammaloop.
gammaloop-checkgammaloop-clippygammaloop-docgammaloop-fmtgammaloop-guppy-workspace-graphgammaloop-nextest-binaries-clinnetgammaloop-nextest-binaries-coregammaloop-nextest-binaries-integrationgammaloop-nextest-binaries-linnetgammaloop-nextest-binaries-python-apigammaloop-nextest-binaries-spensogammaloop-nextest-binaries-vakintlinnest-wasmconfiguredeploy:nix-ci-passedclinnetdevShellfullcargoArtifactsci-workspace-graph-jsonclinnetclinnet-clicrate-deps-gammaloop-workspace-hackcrate-deps-gammalooprscrate-deps-three-dimensional-repscrate-test-binaries-clinnetcrate-test-binaries-gammaloop-apicrate-test-binaries-gammaloop-integration-testscrate-test-binaries-gammaloop-tracing-filtercrate-test-binaries-gammaloop-tracing-filter-macroscrate-test-binaries-gammalooprscrate-test-binaries-idensocrate-test-binaries-kurvstcrate-test-binaries-linnestcrate-test-binaries-linnetcrate-test-binaries-linnet-pycrate-test-binaries-python-api-gammaloop-integration-testscrate-test-binaries-spensocrate-test-binaries-spenso-hep-libcrate-test-binaries-spenso-macroscrate-test-binaries-symbolica-utilscrate-test-binaries-three-dimensional-repscrate-test-binaries-vakintcrate-test-dependencies-clinnetcrate-test-dependencies-gammaloop-apicrate-test-dependencies-gammaloop-integration-testscrate-test-dependencies-gammaloop-tracing-filtercrate-test-dependencies-gammaloop-tracing-filter-macroscrate-test-dependencies-gammalooprscrate-test-dependencies-idensocrate-test-dependencies-kurvstcrate-test-dependencies-linnestcrate-test-dependencies-linnet-pycrate-test-dependencies-python-api-gammaloop-integration-testscrate-test-dependencies-spensocrate-test-dependencies-spenso-hep-libcrate-test-dependencies-symbolica-utilscrate-test-dependencies-three-dimensional-repscrate-test-dependencies-vakintcrate-three-dimensional-repsgammaloopgammaloop-python-modulegammaloopApiPackageArtifactslinnest-wasmlinnestWasmCargoArtifactsnix-ci-check-gammaloop-doctestnix-ci-check-gammaloop-nextest-clinnetnix-ci-check-gammaloop-nextest-corenix-ci-check-gammaloop-nextest-integrationnix-ci-check-gammaloop-nextest-linnetnix-ci-check-gammaloop-nextest-python-apinix-ci-check-gammaloop-nextest-spensonix-ci-check-gammaloop-nextest-vakintnix-ci-passedx86_64-linuxtest:nix-ci-check-gammaloop-doctesttest:nix-ci-check-gammaloop-nextest-clinnettest:nix-ci-check-gammaloop-nextest-coretest:nix-ci-check-gammaloop-nextest-integrationtest:nix-ci-check-gammaloop-nextest-linnettest:nix-ci-check-gammaloop-nextest-python-apitest:nix-ci-check-gammaloop-nextest-spensotest:nix-ci-check-gammaloop-nextest-vakint