8483cb77

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

build the summed function map from selected orientations

The summed function map registered one generic integrand per atom and
passed the residue-map id and edge signs of each orientation as call
arguments. Symbolica binds those constants only while linearizing, so
nothing simplified: every orientation call re-expanded most numerator
components through fresh function scopes, and common-subexpression
elimination had to collapse the result afterwards. Select each entry
symbolically with select_orientation, as the summed evaluator does, keep
it behind the argument-free alias integrand(i, map_id), and build through
new_from_builder. Remove the now unused GammaloopSymbols::integrand.

Measured on finite_T_and_mu's 3-loop thermal Mercedes (GL2, 64
orientations): the build linearizes 0.59M instead of 28.9M instructions,
takes 2.2 s instead of 22-28 s, and the generation peak falls from
13-15 GB to 1.0 GB. The final program is slightly smaller and about 4%
faster per sample; integrand values agree to 2e-14 relative. On the
vacuum version of that graph, generated on this branch, the peak falls
from 11.8 GB to 1.7 GB and the Symbolica stage from 32 s to 19 s.

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

Total

1s

Time to Start Worker time Duration Time to finish Idle
Config 0s 1s 1s 1s 0s
Eval - - - - -
Build - - - - -
Suite 0s 1s 1s 1s 0s

Timeline

Config
0s