Repository navigation
Add NinjaRS reduction and bare-loop UV/IR pole selection to MadLoop - #315
huashengshao wants to merge 113 commits into
Conversation
Keep explicit selections and loop-induced defaults unchanged. Validate standalone, NLO, unavailable-backend and compiled default selection; retain complete timing inputs and support the genuine NinjaRS stability rescue path. Validation: fresh-source software suite 292 passed with one existing conditional generated-process skip; installed default 218 agrees with explicit Ninja 216. Preserve exact software and smoke evidence.
Preserve eight-process legacy and NinjaRS correctness evidence, focused precision/state controls, eight-case native-DP stability data and the completed six-process paired timing study. Keep exact sources, inputs, custody, uncertainty and cancellation records; exclude native build products. Independent numerical, raw-custody, arithmetic and publication-closure audits pass for the declared finite samples. The later twelve-process CLI profile study remains outstanding.
Use the configured output directory consistently with timing and standalone stability checks. Retain the private CLI debug log on failed benchmark attempts. Validation: four real driver-path regression cases and 110 affected software tests pass. Timing, RNG and numerical algorithms are unchanged; retain the incomplete first CLI pilot separately.
Propagate LoopPoleMode through DP/QP reduction, cached state and supported rescue chains. Preserve scaleless bubble residues at the oneloopmaster provider boundary and bypass origin-dependent learned filters in diagnostic modes. Require bridge ABI 4 with actionable installation updates. Validate against COLLIER tensor references and four CLI-generated QCD/EW/loop-induced processes. Retain portable checks and inputs, refresh affected IO references, and add NinjaRS/pole regression tests.
|
Silent no-op when reduction ID 8 is selected without NinjaRS compiled in ( The SELECT CASE handles only 2, 3 and 7, with no |
|
|
|
NinjaRS usage is backed out of legacy unit buckets ( NinjaRS DP is tallied under legacy unit 8 and NinjaRS QP under unit 2 ( |
|
Default NinjaRS selection is duplicated, and one site mutates the caller's options The rule |
|
Bulky generated and binary artifacts committed to the source tree Examples: |
Store pending pole requests once in the shared parameter reader so the latest setter survives initialization by any subprocess. Keep process-prefixed entry points as wrappers and document the global choice. Add a compiled two-subprocess regression and refresh the affected export references. Validate generated two-flavor shared libraries against COLLIER, including preinitialization ordering and subsequent global mode changes.
Pin NinjaRS 41a4c00 and oneloopmaster 5b71043, whose main branches now expose pole selection through native and generic master providers. Remove the local numerical residue adapter while retaining MadLoop ABI4, context rebinding, rescue policy and finite contributions. Validate the real CLI update, 31 ordinary Rust tests, and fresh COLLIER tensor and generated-process campaigns. All 7,280 tensor mode-cycle records and all 74 process configuration results exactly reproduce the previous implementation. Retain compact provenance and distinguish current tests from historical benchmark/export qualifications.
|
@oliviermattelaer — responding to your comment: Addressed in 94cbe712a. The current initialization already removes unavailable libraries from the requested list, preserves available fallbacks, and emits an actionable error for NinjaRS-only selection. I added a defensive Compiled regressions exercise both Born and loop-induced dispatch, enabled/disabled caches, cold/warm calls, valid COLLIER dispatch, invalid IDs 6/8, and the existing unavailable-library fallback behavior. Generated-output fixtures were refreshed from actual generation. |
|
@oliviermattelaer — responding to your comment: Fixed in 94cbe712a: both reduction warnings now check New tests call the actual MadEvent card-treatment method with real partial cards: inappropriate explicit choices warn, appropriate choices/defaults do not, and explicit values remain unchanged. Running the broader pole tests also exposed a partial-card diagnostic that printed an uninitialized reduction-list string; that now prints the effective configured list and has its own compiled regression. |
|
@oliviermattelaer — responding to your comment: Addressed the maintenance concern in 94cbe712a while retaining the existing return-code format. I did not allocate a new units-digit slot: all ten digits already have meanings, and doing so would break the public three-digit return codes and existing readers. The XML and NLO log readers now share one documented contextual decoder and backend-label map, so the NinjaRS alias subtraction has one implementation. Added compiled producer-to-reader regressions using the actual grouped/ungrouped LO and fixed-order/matched NLO tally/writer blocks. They mix every legacy backend with ordinary and initialization NinjaRS DP/QP codes. Old files, missing/partial optional counters, repeated reads, aggregation, and non-mutation of input histograms are covered. The Fortran producers and serialized format are unchanged. |
|
@oliviermattelaer — responding to your comment: Fixed in 94cbe712a. Added Timing/profile/stability setup now copies caller-supplied |
|
@oliviermattelaer — responding to your comment: Addressed in e5a4a6544 by removing about 4.73 MB from the current tracked payload. Seven font binaries and the compressed raw CLI materialization (3.51 MB) are now fetched on demand from an immutable archived revision, with size/SHA256 verification, atomic installation, and ignored local paths. The README documents the one-time acquisition step; the subsequent PDF reproduction remains offline. I retained the requested final PDF (currently 346 KB), Typst source, compact numerical summaries, vector figures, and font license. These are the reviewable report deliverable. The large callback capture was reduced from 1,350,447 to 131,790 bytes by retaining exactly the inputs and reference values consumed by its regression test: all 30 callbacks and all 480 numerical components are unchanged. The remaining small native fixtures are active regression oracles and require no downloads. Validation includes download failure/retry tests, the existing 480-component Rust regression, and a fresh archived download followed by byte-identical PDF reproduction. Git history was not rewritten. |
MadLoop can now select NinjaRS with
MLReductionLib=8, with native oneloopmaster scalar integrals and a genuine higher-precision rescue path. A usable installation becomes the default for ordinary Born processes; explicit backend choices and the existing loop-induced TIR defaults remain respected.Implementation
install ninjars, including--update, pinned dependencies, local source overrides, compiler/runtime linking metadata and a compiled Fortran installation check.Bare loop UV/IR selection
LoopPoleModeprovides a common selector for NinjaRS and COLLIER:-1preserves legacy behavior,0returns combined poles,1UV only,2IR only, and3no poles. Finite coefficients and model counterterms remain unchanged. The usage guide explains card and Fortran use, rescue restrictions, and loop-induced interpretation.main: oneloopmaster5b71043owns the scalar/tensor pole residues, and NinjaRS41a4c00exposes selection through its master providers. MadGraph pins both revisions and forwards the selector without duplicating the numerical residue formulas. UV/IR diagnostic modes use the existing generic NinjaRS engine in DP and 256-bit rescue, retaining scaleless-bubble coefficients. Normal combined-pole DP keeps the fast engine.install ninjars --updateguidance. The installer verifies selected DP/MP poles and binary128 precision in a compiled Fortran smoke test.Validation and measured scope
CI: all 106 active checks passed on
9228fc58e, across 11 workflows; 85 guarded checks were skipped as intended. No failures, cancellations, or reruns (checks).u u~ > z,g g > t t~,e+ e- > mu+ mu-, and loop-inducedg g > h) agree with COLLIER at three fixed points each across 74 configurations, including forced DP/QP, automatic QCD stability checks, and warm mode/filter changes. An actual two-subprocess shared-library check additionally passes 40 amplitude evaluations with both backends, including setter calls before the first evaluation and global runtime changes. Counterterm slots are cleared only in disposable validation outputs to isolate the bare loop. Reproduction and evidence.gg > HHHandgg > HHHH.FULL − SKIPincludes live tensor callbacks, masters and interface work; it is not the standalone NinjaRS pure-kernel timer.Report and repository cleanup
The measured benchmark PDF, Typst source, compact measurements, figures, font license and reproduction scripts live under
doc/benchmarkfolder. Optional font binaries and the raw CLI capture are fetched into ignored local paths from a checksum-pinned immutable archive:The first command performs one-time acquisition with size/SHA256 verification. Afterward the unchanged reproduction script runs offline using Typst 0.15.1 and the archived fonts. A fresh download into an isolated report copy reproduced the retained PDF byte-for-byte. About 1.9 GB of intermediate experiments, campaign harnesses, generated evidence and session notes were removed from the final tree. The complete measurement archive remains available at immutable commit
19d67c8605337c176680878a521b3a014176a7fb, with links and original hashes in the report provenance.The generated-output reference updates preserve the existing assertions, and optional NinjaRS imports remain usable by the older Python CI collector without requiring TOML parsing during import.
Robustness and source size
Generated TIR interfaces reject unsupported backends before accessing cached coefficients. Explicit-card warnings use normalized parameter names; default selection shares one policy without mutating caller options. Legacy and NinjaRS statistics use one decoder, covered by compiled producer-to-reader tests. Partial cards print the effective reduction list instead of an uninitialized string. The focused regressions run in CI.
Removed about 4.73 MB of tracked optional binary/capture content while retaining the requested PDF and every numerical regression component. Optional fonts/raw materialization are acquired from an immutable revision with checksums; fresh acquisition still reproduces the PDF byte-for-byte. Both NinjaRS and the CutTools/IREGI installer remain available; generated-output references match the current exporters.