Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1100 commits
Select commit Hold shift + click to select a range
dc49431
Bind certified contact assignments to evaluator parents
ValentinHirschi Aug 5, 2026
d92aa6b
Preserve certified contact partial lineage
ValentinHirschi Aug 5, 2026
fb0979e
Preserve scalar contact assignment ownership
ValentinHirschi Aug 5, 2026
0cfdc84
Skip off-domain contact transitions on the fly
ValentinHirschi Aug 5, 2026
560b1f6
Add compact on-the-fly seed codec
ValentinHirschi Aug 5, 2026
2c6947b
Bind scalar seed codec identity
ValentinHirschi Aug 5, 2026
44ea7f3
Benchmark cached on-the-fly queries
ValentinHirschi Aug 5, 2026
acec57b
Add first real on-the-fly LC gate
ValentinHirschi Aug 5, 2026
d8173be
Report on-the-fly execution work
ValentinHirschi Aug 5, 2026
4c03985
Bind prepared model in on-the-fly gate
ValentinHirschi Aug 5, 2026
c4954a5
Bind deferred source mass on the fly
ValentinHirschi Aug 5, 2026
584ae55
Preserve incomplete on-the-fly color aliases
ValentinHirschi Aug 6, 2026
337aa06
Add on-the-fly color projection diagnostic
ValentinHirschi Aug 6, 2026
7c337ae
Add realistic on-the-fly process controls
ValentinHirschi Aug 6, 2026
33efef4
Add on-the-fly topology discriminators
ValentinHirschi Aug 6, 2026
9b53c53
Stabilize on-the-fly executor row bindings
ValentinHirschi Aug 6, 2026
6465090
Prototype on-the-fly query family census
ValentinHirschi Aug 6, 2026
18883c4
Refresh candidate prepared model packs
ValentinHirschi Aug 6, 2026
b4be2df
Correct on-the-fly family executor census
ValentinHirschi Aug 6, 2026
1ed4aff
Execute shared on-the-fly query families
ValentinHirschi Aug 6, 2026
3590c25
Factor on-the-fly runtime lane state
ValentinHirschi Aug 6, 2026
fdd1b25
Wire compact on-the-fly runtime lane
ValentinHirschi Aug 6, 2026
ef08db2
Add compact on-the-fly LC runtime lane
ValentinHirschi Aug 6, 2026
420cda5
Complete the production on-the-fly LC path
ValentinHirschi Aug 6, 2026
cbbed34
Correct on-the-fly massive source binding
ValentinHirschi Aug 6, 2026
260ae4a
Add guarded on-the-fly multiplicity study
ValentinHirschi Aug 6, 2026
db74933
Avoid inactive recurrence diagnostic hashing
ValentinHirschi Aug 6, 2026
6bfdc60
feat(report): integrate on-the-fly campaign mode
ValentinHirschi Aug 7, 2026
9c0b883
fix(otf): authenticate compact selector census
ValentinHirschi Aug 7, 2026
0f19f73
fix(otf): preserve per-closure Wick owners
ValentinHirschi Aug 7, 2026
1500c12
fix(report): authenticate on-the-fly evaluator timing
ValentinHirschi Aug 7, 2026
e23775b
fix(report): condition OTF components by slice scale
ValentinHirschi Aug 7, 2026
87d5026
fix(report): keep OTF validation compact
ValentinHirschi Aug 7, 2026
eb7ab9e
feat(otf): authenticate high-multiplicity scaling
ValentinHirschi Aug 7, 2026
16ae729
fix(otf): expose compact production census
ValentinHirschi Aug 7, 2026
8f868fd
fix(otf): authenticate high-multiplicity authorities
ValentinHirschi Aug 7, 2026
7709a88
fix(otf): mark recurrence warmup ratio eligible
ValentinHirschi Aug 7, 2026
4f61132
test(otf): bind n8 fixture to gluon process
ValentinHirschi Aug 7, 2026
733df2a
fix(otf): compare authority flows semantically
ValentinHirschi Aug 7, 2026
eded3cd
test(otf): align authority selector fixture
ValentinHirschi Aug 7, 2026
900ec40
fix(report): generate LC references across distinct points
ValentinHirschi Aug 7, 2026
1a84cac
perf(otf): bound high-multiplicity construction
ValentinHirschi Aug 7, 2026
180bc9f
perf(otf): prune unreachable anchor composites
ValentinHirschi Aug 7, 2026
a6df188
feat(otf): complete LC integration milestone
ValentinHirschi Aug 7, 2026
ce45ba1
fix(report): accept compact OTF artifact layout
ValentinHirschi Aug 7, 2026
a4455ae
fix(report): certify OTF timing comparisons
ValentinHirschi Aug 7, 2026
137cd39
docs(otf): qualify legacy parity evidence
ValentinHirschi Aug 7, 2026
80b2ee4
docs(validation): qualify legacy AmpliCol authority
ValentinHirschi Aug 7, 2026
04850ea
feat(otf): add warm-up API and contracted color support
ValentinHirschi Aug 8, 2026
93eb7a8
fix(report): isolate legacy AmpliCol build jobs
ValentinHirschi Aug 8, 2026
f083f3d
Merge origin/main into on_the_fly_mode
ValentinHirschi Aug 8, 2026
cc38081
chore(release): prepare 0.1.4
ValentinHirschi Aug 8, 2026
5893daa
fix(deps): upgrade PyO3 to 0.29.2
ValentinHirschi Aug 8, 2026
f309fe0
fix(report): bound campaign memory and rank OTF
ValentinHirschi Aug 8, 2026
c496c60
build(release): refresh 0.1.4 prepared models
ValentinHirschi Aug 8, 2026
b317d77
fix(report): validate MadGraph repeats exactly
ValentinHirschi Aug 8, 2026
ba83d57
fix(report): accept contracted OTF runtime identity
ValentinHirschi Aug 8, 2026
daeb61e
fix(report): normalize compact OTF process display
ValentinHirschi Aug 8, 2026
5644f9f
fix(report): bound campaign resources and include OTF tables
ValentinHirschi Aug 8, 2026
55b267e
test(report): avoid synthetic macOS crash dialogs
ValentinHirschi Aug 8, 2026
fe53dbe
fix(report): use native Darwin resource snapshots
ValentinHirschi Aug 8, 2026
f50d85c
Fix AmpliCol selected-flow benchmark point
ValentinHirschi Aug 8, 2026
7594b22
fix(report): authenticate portable campaign PDFs
ValentinHirschi Aug 8, 2026
6dc6712
docs(report): describe contracted OTF lanes
ValentinHirschi Aug 8, 2026
af60fc9
Polish CLI output and harden release CI
ValentinHirschi Aug 8, 2026
7a9cdc0
feat: add scalar HEFT MadGraph acceptance
rikkert-frederix Aug 20, 2026
3c930e9
feat: package scalar HEFT across execution modes
rikkert-frederix Aug 20, 2026
1edce23
fix: address PR review feedback
rikkert-frederix Aug 21, 2026
8f4ce03
fix: keep cleanup test control flow reachable
rikkert-frederix Aug 21, 2026
ccaa35b
fix: satisfy public typing gate
rikkert-frederix Aug 21, 2026
6149aa9
fix: avoid runtime protocol property probes
rikkert-frederix Aug 21, 2026
4144d2f
test: refresh HEFT eager contracts
rikkert-frederix Aug 21, 2026
6c570ce
fix: accept plan v3 benchmark topology
rikkert-frederix Aug 21, 2026
3923be8
ci: keep eager performance smoke manual
rikkert-frederix Aug 21, 2026
ec3d57c
test: reuse Symbolica for precise API driver
rikkert-frederix Aug 21, 2026
01cc667
ci: keep Clippy warnings advisory
rikkert-frederix Aug 21, 2026
1989991
test: align Rust candidate contracts
rikkert-frederix Aug 21, 2026
d9844d4
Merge pull request #2 from mg5amcnlo/feature/scalar-heft-madgraph-acc…
ValentinHirschi Aug 23, 2026
63ada14
docs: record FFT implementation plan
ValentinHirschi Aug 18, 2026
1c0da8a
feat: add symmetric-group FFT colour contractions
ValentinHirschi Aug 18, 2026
1f31dda
test: fix FFT acceptance inspection mapping
ValentinHirschi Aug 18, 2026
c0b2c17
test: enforce pure-gluon FFT acceptance
ValentinHirschi Aug 18, 2026
88917d5
test: match pure-gluon reference timing protocol
ValentinHirschi Aug 18, 2026
f1fd26c
perf: optimize symmetric-group FFT evaluation
ValentinHirschi Aug 18, 2026
22e9a6f
fix: restore reflected FFT closure destinations
ValentinHirschi Aug 18, 2026
5fd331c
fix: load compiled FFT color payloads
ValentinHirschi Aug 18, 2026
e89175f
test: probe compiled FFT diagnostics
ValentinHirschi Aug 18, 2026
f2ca841
perf: streamline recurrence fanout scatter
ValentinHirschi Aug 18, 2026
5ff78f8
perf: fuse recurrence intrinsic fanout
ValentinHirschi Aug 18, 2026
ad7f27d
Fuse direct recurrence interaction bundles
ValentinHirschi Aug 18, 2026
0ec3580
Skip redundant recurrence lowering and release cold proofs
ValentinHirschi Aug 18, 2026
53ac6aa
Fallback cyclic anchors for replayed recurrence
ValentinHirschi Aug 18, 2026
b8766b5
Skip unused recurrence verification probes
ValentinHirschi Aug 18, 2026
ec41925
Bucket contracted closure construction
ValentinHirschi Aug 18, 2026
2b9a7d1
Reuse validated recurrence baseline on fallback
ValentinHirschi Aug 18, 2026
04eed5f
Release recurrence catalog JSON after load
ValentinHirschi Aug 18, 2026
ab11475
Make direct arena lowering scale logarithmically
ValentinHirschi Aug 18, 2026
82fa980
Quotient diagonal trace color kernels
ValentinHirschi Aug 18, 2026
f13514a
Reduce OTF and compiled load ownership peaks
ValentinHirschi Aug 19, 2026
d11a3fa
Add bounded FullColor FFT scaling study
ValentinHirschi Aug 19, 2026
e04463d
Add exact symmetric-group FFT colour contraction
ValentinHirschi Aug 22, 2026
a5e68da
Optimize recurrence artifact cold loading
ValentinHirschi Aug 22, 2026
48e9b62
Harden MadGraph profiling evidence
ValentinHirschi Aug 22, 2026
901b9f4
Fix recurrence bootstrap corruption canary
ValentinHirschi Aug 22, 2026
8421352
Keep MadGraph curves in anytime profiling plots
ValentinHirschi Aug 22, 2026
a33e82d
Tighten legacy MadGraph host fallback
ValentinHirschi Aug 22, 2026
3878da0
Integrate FFT contracts with HEFT mainline
ValentinHirschi Aug 23, 2026
86f1b81
Fix Rust SDK linking across native consumers
ValentinHirschi Aug 23, 2026
12103bd
Merge pull request #3 from mg5amcnlo/fft
ValentinHirschi Aug 24, 2026
10bc419
chore(release): prepare 0.2.0
ValentinHirschi Aug 24, 2026
cae1237
feat(profiling): pin external FFT reference
ValentinHirschi Aug 24, 2026
8ceb010
fix(release): avoid archive byte false positives
ValentinHirschi Aug 24, 2026
c03ab83
make profiling references opt-in
ValentinHirschi Aug 24, 2026
97328d5
fix(profiling): make reference setup self-contained
ValentinHirschi Aug 24, 2026
e84e433
Fix portable FFT profiling wrappers
ValentinHirschi Aug 24, 2026
7014a62
Improve FFT profiling resume scheduling
ValentinHirschi Aug 24, 2026
0757b0c
Refine FFT profiling line selection
ValentinHirschi Aug 25, 2026
c16cedd
Add FFT profiling family selection
ValentinHirschi Aug 25, 2026
580e8b3
Improve FFT profiling retry and render outputs
ValentinHirschi Aug 25, 2026
e6256a1
Stop tracking FFT feature resources
ValentinHirschi Aug 25, 2026
0bbf1b8
Complete FFT profiling orchestration and rendering
ValentinHirschi Aug 26, 2026
ec54c78
Render measured OTF points beyond default frontier
ValentinHirschi Aug 27, 2026
9c14a5c
Add targeted FFT profiling overwrite
ValentinHirschi Aug 28, 2026
f33bfd5
docs: add HEFT and FullColor FFT workflows
ValentinHirschi Aug 28, 2026
677c129
docs: mark 0.2.0 as released
ValentinHirschi Sep 3, 2026
3b6ee09
fix: preserve exact model constants and precision normalization
ValentinHirschi Sep 5, 2026
727a7ad
fix: retain exact colour weights and correct native evaluation
ValentinHirschi Sep 5, 2026
b6cee03
fix: retain the exact NLC colour-generation shortcut
ValentinHirschi Sep 5, 2026
3676dbb
chore: prepare version 0.4.1 for publication
ValentinHirschi Sep 5, 2026
81abb5e
fix: build prepared-model bootstrap for native Linux
ValentinHirschi Sep 5, 2026
536f0bd
build: refresh release prepared models for exact precision
ValentinHirschi Sep 5, 2026
f732ad7
fix: lower exact constant radicals in compiled evaluators
ValentinHirschi Sep 5, 2026
2f027e3
fix: retain recurrence intrinsics for exact radical coefficients
ValentinHirschi Sep 5, 2026
5b9c043
build: refresh prepared models with restored recurrence intrinsics
ValentinHirschi Sep 5, 2026
7e655d8
fix: fill aligned recurrence runtime tiles
ValentinHirschi Sep 5, 2026
6576be1
Fix AmpliCol library preparation for leptonic profiling
ValentinHirschi Sep 6, 2026
f574fe6
Fix leptonic library discovery and selected-flow validation
ValentinHirschi Sep 6, 2026
432ba28
Include squaring in selected-flow AmpliCol timings
ValentinHirschi Sep 6, 2026
65a084a
Fix compiled selected-flow reducer batch sizing
ValentinHirschi Sep 7, 2026
3e5efb2
Refresh portable self-test fixture for model compiler v16
ValentinHirschi Sep 7, 2026
c24092b
Refresh eager semantic goldens for exact normalization and colour wei…
ValentinHirschi Sep 7, 2026
6090238
Expose deployment backend stages and native crash traces
ValentinHirschi Sep 7, 2026
cd53888
Plan opt-in tree-level colour and spin correlators through N3LO
ValentinHirschi Sep 7, 2026
a783146
Add exact tree-level colour connections through N3LO
ValentinHirschi Sep 7, 2026
20dc853
Add opt-in generation and runtime spin-colour correlators
ValentinHirschi Sep 7, 2026
4662203
Document correlated APIs and colour-connection conventions
ValentinHirschi Sep 7, 2026
cc12bf7
Extend correlated MEs to LC/NLC and batched colour-spin requests
ValentinHirschi Sep 7, 2026
9928f2d
Generate generic NkLO colour-correlator catalogues
ValentinHirschi Sep 7, 2026
f06ce81
Align API documentation and CI with generic colour catalogues
ValentinHirschi Sep 7, 2026
50a13e4
Expose correlated evaluations in every native SDK and preserve Decima…
ValentinHirschi Sep 7, 2026
a7d4878
Exercise colour coherence and joint spin physics across every native SDK
ValentinHirschi Sep 7, 2026
d878834
fix: require successful oracle references for completed NLO scans
ValentinHirschi Sep 7, 2026
3c4dd7c
Merge pull request #4 from mg5amcnlo/correlators
ValentinHirschi Sep 10, 2026
d74b3e6
Optimize runtime-selected helicity and colour-flow evaluation
ValentinHirschi Sep 10, 2026
f6b3471
Index recurrence descriptor caches for varied runtime selections
ValentinHirschi Sep 10, 2026
d5a55d1
Index OTF preparation pairs and vectorize momentum refresh
ValentinHirschi Sep 10, 2026
ba198ba
Repair dry-run imports and current example profiling metadata
ValentinHirschi Sep 10, 2026
c87eccb
Expose native SDK compiler diagnostics early in CI
ValentinHirschi Sep 10, 2026
8e1977b
Optimize persisted recurrence locality and compiled momentum preparation
ValentinHirschi Sep 11, 2026
590e277
Regenerate portable self-test with static compiled momentum selection
ValentinHirschi Sep 11, 2026
2a44977
Reduce source and selected-amplitude overhead without runtime planning
ValentinHirschi Sep 11, 2026
a867a6e
Use typed spin state in source preparation parity test
ValentinHirschi Sep 11, 2026
c40bc4c
Correct compiled fixture momentum offsets
ValentinHirschi Sep 11, 2026
678f028
Exercise the public precision API in chunked evaluation test
ValentinHirschi Sep 11, 2026
50fc49d
Reuse validated source mappings during compiled evaluation
ValentinHirschi Sep 11, 2026
8d4189c
Keep compiled momentum preparation inline with its sole caller
ValentinHirschi Sep 11, 2026
9312ad4
Drop inconclusive momentum inlining trial
ValentinHirschi Sep 11, 2026
cc99557
Upgrade SymJIT to 2.25 and preserve reused kernel outputs
ValentinHirschi Sep 11, 2026
cb8066a
Port current Symbolica and Spenso with local dependency overrides
ValentinHirschi Sep 11, 2026
2c1ed76
Require future UFO loader and regenerate shipped model JSONs
ValentinHirschi Sep 11, 2026
78b3128
Make JIT arithmetic compression opt-in for faster evaluation
ValentinHirschi Sep 11, 2026
6911fc7
Package validated SymJIT fixes and refresh native model bundles
ValentinHirschi Sep 12, 2026
a085050
Ignore local dependency reproducer build products
ValentinHirschi Sep 12, 2026
26b99da
Add focused SymJIT upstream regression tests and follow-up reproducers
ValentinHirschi Sep 12, 2026
fbfc9ee
Persist completed OTF caches across all runtime APIs
ValentinHirschi Sep 13, 2026
e542741
Document OTF cache save and restore with runnable examples
ValentinHirschi Sep 13, 2026
e5ecf0b
Fix and optimize HEFT currents on updated dependencies
ValentinHirschi Sep 13, 2026
398875f
Add per-call OTF warm-up core limits across APIs
ValentinHirschi Sep 14, 2026
8d41db3
Use upstream symbolica-integrate dev and refresh Spenso baseline
ValentinHirschi Sep 14, 2026
c7ad0cf
Use unmodified upstream Spenso dependencies
ValentinHirschi Sep 14, 2026
a184948
Remove arbitrary process memory and payload ceilings
ValentinHirschi Sep 15, 2026
d783c8d
Install Symbolica library license key
benruijl Sep 15, 2026
2105c68
Allow compatible process outputs across candidate build hashes
ValentinHirschi Sep 15, 2026
8157107
Merge Symbolica OEM licensing with fallback and update dependencies
ValentinHirschi Sep 22, 2026
1850030
Refresh Symbolica 3 assets and resolve migration checks
ValentinHirschi Sep 22, 2026
c811d3d
Refresh portable self-test after built-in model update
ValentinHirschi Sep 22, 2026
ff46817
Add adjoint-basis FFT for recurrence and on-the-fly generation
ValentinHirschi Sep 25, 2026
c6fcbdb
Resolve dependency checkout path in build overlay test
ValentinHirschi Sep 25, 2026
7426829
Make isolated-checkout tests independent of local dependency paths
ValentinHirschi Sep 25, 2026
929e781
Isolate runtime identity test from the developer virtualenv
ValentinHirschi Sep 25, 2026
97d4f77
Turn numerical current-relation discovery off by default
ValentinHirschi Sep 26, 2026
37cb4c1
Back the adjoint FFT recommendation with measured numbers
ValentinHirschi Sep 26, 2026
c6b3530
Document the exact UFO model coverage
ValentinHirschi Sep 26, 2026
cc8946f
Generalize adaptive exact FFT basis selection to supported processes
ValentinHirschi Sep 27, 2026
bf9b131
Keep FFT certificates outside prepared model physics identity
ValentinHirschi Sep 27, 2026
aec9d9c
Pin numerical reuse policy in historical eager plan goldens
ValentinHirschi Sep 27, 2026
3ff0327
Align NLC plan fixture with disabled numerical discovery
ValentinHirschi Sep 27, 2026
9408247
Prepare 1.0.0 with published Symbolica 3 and SymJIT dependencies
ValentinHirschi Oct 4, 2026
8647a64
Align watchdog workflow assertion with integrated runtime staging
ValentinHirschi Oct 4, 2026
d0f02ff
Keep Symbolica CI sessions sequential across subprocesses
ValentinHirschi Oct 4, 2026
8ba60ac
Document the published pyAmpliCol 1.0.0 release
ValentinHirschi Oct 4, 2026
0c46515
feat(umami): scaffold generated providers, metadata and integration e…
ValentinHirschi Oct 5, 2026
72b0453
feat(umami): validate shared providers and exact structural reuse
ValentinHirschi Oct 5, 2026
94e116a
fix(umami): preserve on-the-fly exports and finish validation coverage
ValentinHirschi Oct 5, 2026
7a9c337
fix(dev): build host wheels for Linux source-runtime checks
ValentinHirschi Oct 6, 2026
a28c40a
chore: keep dependency reproducers and reference files untracked
ValentinHirschi Oct 6, 2026
de14ad9
fix(sdk): query linker metadata without initializing Symbolica
ValentinHirschi Oct 6, 2026
20113e7
test(umami): close grouping and relative-build acceptance checks
ValentinHirschi Oct 6, 2026
f945f34
test(sdk): reuse the Python license session for every precision
ValentinHirschi Oct 6, 2026
b36aa77
test(umami): assert explicit artifact-path driver invocation
ValentinHirschi Oct 6, 2026
ad4965d
test(packaging): derive synthetic candidate locks from tracked inputs
ValentinHirschi Oct 6, 2026
9d4d747
test(examples): reuse the active Python license session
ValentinHirschi Oct 6, 2026
88e927b
test: isolate the restricted Symbolica subprocess check
ValentinHirschi Oct 6, 2026
20c8352
test: count the isolated integration watchdog invocation
ValentinHirschi Oct 6, 2026
7c93f9a
Group identical-particle UMAMI integration channels by default
ValentinHirschi Oct 7, 2026
e484773
Make UMAMI symmetry grouping unconditional
ValentinHirschi Oct 8, 2026
0fab8a5
Reject stale UMAMI exporters and report loaded channel counts
ValentinHirschi Oct 8, 2026
8053135
UMAMI: fixed and sampled helicities with the 1.2 interface
theoheimel Oct 14, 2026
c6e59f3
UMAMI: providers of colour-accuracy ratios
theoheimel Oct 14, 2026
d3a64f2
UMAMI: parameter card entries of the runtime parameters
theoheimel Oct 14, 2026
ebed33c
Skip expanded processes without amplitudes in recurrence generation
theoheimel Oct 15, 2026
08732c7
Read UFO vertices in the standard fermion spinor order
theoheimel Oct 15, 2026
607e08c
UMAMI: load the processes lazily, also after parameter changes
theoheimel Oct 15, 2026
35d9b97
Regenerate the built-in SM+HEFT prepared models
theoheimel Oct 15, 2026
c9ec7a9
Regenerate the SM+HEFT packs of the release prepared-model store
theoheimel Oct 15, 2026
ff8d40a
UMAMI: one channel per pattern of incoming legs and final masses
theoheimel Oct 15, 2026
20f7d04
UMAMI: validate reweight metadata and deferred parameter values
theoheimel Oct 16, 2026
9e5ba81
Merge pull request #6 from mg5amcnlo/mg7
ValentinHirschi Oct 17, 2026
0d05e5f
Merge pull request #5 from mg5amcnlo/umami
ValentinHirschi Oct 17, 2026
d50e120
Group subprocesses with equal matrix elements and route flavour-blind…
ValentinHirschi Oct 17, 2026
85f28ce
Show process groups in inspect and generation, add the p p > j j j j …
ValentinHirschi Oct 17, 2026
deb4e67
Prepare version 1.0.1
ValentinHirschi Oct 17, 2026
b07a288
Document the published pyAmpliCol 1.0.1 release
ValentinHirschi Oct 17, 2026
17aee48
Remove outdated correlator and UMAMI planning notes
ValentinHirschi Oct 17, 2026
5caada8
Point repository and documentation links to MadGraphTeam
ValentinHirschi Oct 17, 2026
1783580
Merge pyamplicol into MadGraph7
theoheimel Oct 17, 2026
384ba97
Add the script that imports the filtered pyamplicol history
theoheimel Oct 17, 2026
7415c97
pyamplicol: build inside the MadGraph7 monorepo
theoheimel Oct 17, 2026
b0e0bd7
pyamplicol: add the MadGraph7 installer and source hash
theoheimel Oct 17, 2026
4714f3d
mg7: install pyamplicol command and bootstrap helpers
theoheimel Oct 17, 2026
7a0ad63
ci: run pyamplicol's CI and release it with MadGraph7
theoheimel Oct 17, 2026
151f576
docs: add the pyAmpliCol documentation as its own section
theoheimel Oct 17, 2026
ae75c53
pyamplicol: move the remaining CI into MadGraph7's .github
theoheimel Oct 17, 2026
284c864
pyamplicol: README, pre-commit lint and docs for the MadGraph7 setup
theoheimel Oct 17, 2026
2dba315
pyamplicol: ship source_hash.py in the sdist
theoheimel Oct 17, 2026
ad78f15
ci: cache pyamplicol's Cargo tree once per dependency set
theoheimel Oct 17, 2026
61a4d8a
Shorten comments
theoheimel Oct 17, 2026
b7814ff
ci: pyamplicol release builds skip the test jobs
theoheimel Oct 17, 2026
b2335f6
pyamplicol/install.py: let rustup-init ignore a Rust already on PATH
theoheimel Oct 17, 2026
a1320ff
pyamplicol/install.py: build a host wheel
theoheimel Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
38 changes: 38 additions & 0 deletions .github/actions/build_pyamplicol/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Build pyamplicol
description: >
Build the pyamplicol install prefix once per commit with pyamplicol/install.py
and cache it (content-addressed on the pyamplicol package sources). Test jobs
restore the result with the install_pyamplicol action (they must `needs:` the
job that runs this action). Assumes the repository is already checked out.

runs:
using: composite
steps:
# Must match the key computed by the install_pyamplicol action exactly.
- name: pyamplicol cache key
run: echo "PAC_PY=$(python3 -c 'import sys;print(f"{sys.version_info.major}{sys.version_info.minor}")')" >> $GITHUB_ENV
shell: bash

- name: Cache pyamplicol install
id: cache-pyamplicol
uses: actions/cache@v5
with:
path: pyamplicol/install
key: pyamplicol-${{ runner.os }}-py${{ env.PAC_PY }}-${{ hashFiles('pyamplicol/src/**', 'pyamplicol/rust/**', 'pyamplicol/build_backend/**', 'pyamplicol/Cargo.*', 'pyamplicol/pyproject.toml', 'pyamplicol/rust-toolchain.toml', 'pyamplicol/dependencies/*.toml') }}

# ~1.5 GB: one entry per dependency set, pyamplicol's crates rebuild on top.
- name: Cache Cargo build tree
if: steps.cache-pyamplicol.outputs.cache-hit != 'true'
uses: actions/cache@v5
with:
path: pyamplicol/build/cache
key: pyamplicol-cargo-${{ runner.os }}-${{ hashFiles('pyamplicol/Cargo.lock', 'pyamplicol/rust-toolchain.toml') }}

- name: Prepared models
if: steps.cache-pyamplicol.outputs.cache-hit != 'true'
uses: ./.github/actions/pyamplicol_prepared_models

- name: Build and install pyamplicol (only on cache miss)
if: steps.cache-pyamplicol.outputs.cache-hit != 'true'
run: python3 pyamplicol/install.py --source --yes
shell: bash
26 changes: 26 additions & 0 deletions .github/actions/install_pyamplicol/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Install pyamplicol
description: >
Make the pyamplicol install (built once per commit by a build_pyamplicol job)
available to the tests: restores the cached pyamplicol/install directory and
puts it on PYTHONPATH. It does NOT build; the build_pyamplicol job must run
first (use `needs:`).

runs:
using: composite
steps:
# Must match the key computed by the build_pyamplicol action exactly.
- name: pyamplicol cache key
run: echo "PAC_PY=$(python3 -c 'import sys;print(f"{sys.version_info.major}{sys.version_info.minor}")')" >> $GITHUB_ENV
shell: bash

- name: Restore pyamplicol install
uses: actions/cache/restore@v5
with:
path: pyamplicol/install
key: pyamplicol-${{ runner.os }}-py${{ env.PAC_PY }}-${{ hashFiles('pyamplicol/src/**', 'pyamplicol/rust/**', 'pyamplicol/build_backend/**', 'pyamplicol/Cargo.*', 'pyamplicol/pyproject.toml', 'pyamplicol/rust-toolchain.toml', 'pyamplicol/dependencies/*.toml') }}
fail-on-cache-miss: true

# Prepended: in the MadGraph root, pyamplicol/ is the source directory.
- name: Put pyamplicol on PYTHONPATH
run: echo "PYTHONPATH=$GITHUB_WORKSPACE/pyamplicol/install:$PYTHONPATH" >> "$GITHUB_ENV"
shell: bash
39 changes: 39 additions & 0 deletions .github/actions/pyamplicol_prepared_models/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: pyAmpliCol prepared models
description: >
Put the prepared-model packs into the pyamplicol source tree. They are not
tracked in Git: the archive of the matching (else latest) MadGraph release is
downloaded and validated against this source tree; when it is stale, the packs
are regenerated on this runner (bootstrap wheel + produce, about ten minutes).
Either way the archive ends up at pyamplicol/.artifacts/prepared-models/ for
jobs that publish or reuse it. Needs Python 3.11+ and, for a regeneration,
the pinned Rust toolchain and maturin.

outputs:
regenerated:
description: "'true' when the released packs were stale and rebuilt here."
value: ${{ steps.packs.outputs.regenerated }}

runs:
using: composite
steps:
- name: Fetch or regenerate the prepared models
id: packs
shell: bash
working-directory: pyamplicol
run: |
set -euo pipefail
archive_dir=.artifacts/prepared-models
tool=tools/release/prepared_models_archive.py
check='import sys; from pathlib import Path; sys.path.insert(0, "build_backend"); from prepared_models import stage_packaged_prepared_models as s; s(Path("."), "release")'
if python "$tool" fetch --version "$(sed -n 's/^version *= *//p' ../VERSION)" \
--output "$archive_dir" && python -I -c "$check"; then
echo "regenerated=false" >> "$GITHUB_OUTPUT"
else
echo "::notice::The released prepared models are stale for this source tree; regenerating them."
rustup toolchain install "$(sed -n 's/^channel *= *"\(.*\)"/\1/p' rust-toolchain.toml)" --profile minimal
python -m pip install "maturin==1.15.0" "packaging==26.3"
PYAMPLICOL_BUILD_MODE=release python "$tool" regenerate --work .artifacts/prepared-models-work
rm -rf "$archive_dir"
python "$tool" pack --output "$archive_dir"
echo "regenerated=true" >> "$GITHUB_OUTPUT"
fi
33 changes: 33 additions & 0 deletions .github/scripts/import_pyamplicol.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash
# Import (or re-sync) the history of github.com/MadGraphTeam/pyamplicol into
# the pyamplicol/ subdirectory. The filter is deterministic, so re-running it
# on a newer upstream main reproduces the SHAs of commits imported earlier and
# a merge only brings in the new ones.
#
# Usage: .github/scripts/import_pyamplicol.sh [upstream-ref]
# Leaves the filtered history in the local branch pyamplicol-import; merge it
# with `git merge pyamplicol-import` (first import: --allow-unrelated-histories).
# Requires git-filter-repo (set FILTER_REPO to override the command).
set -euo pipefail

UPSTREAM_URL=${UPSTREAM_URL:-https://github.com/MadGraphTeam/pyamplicol.git}
REF=${1:-main}
FILTER_REPO=${FILTER_REPO:-git-filter-repo}
MG_ROOT=$(git rev-parse --show-toplevel)

WORK=$(mktemp -d)
trap 'rm -rf "$WORK"' EXIT

git clone --quiet --no-local --single-branch --branch "$REF" "$UPSTREAM_URL" "$WORK/pyamplicol"
cd "$WORK/pyamplicol"
UPSTREAM_SHA=$(git rev-parse HEAD)

# Prepared-model packs are rebuilt in CI and shipped as one release archive;
# reports and papers are linked from the archived upstream repository.
$FILTER_REPO --force \
--path-glob '*.pyamplicol-model' --invert-paths \
--path-glob '*.pdf' --invert-paths \
--to-subdirectory-filter pyamplicol

git -C "$MG_ROOT" fetch --quiet --no-tags "$WORK/pyamplicol" "+HEAD:refs/heads/pyamplicol-import"
echo "Imported $UPSTREAM_URL $REF at $UPSTREAM_SHA into branch pyamplicol-import"
218 changes: 218 additions & 0 deletions .github/workflows/pyamplicol-eager-portability.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
name: pyAmpliCol eager JIT pack architecture transfer

# Ported from pyamplicol: packs produced on one architecture must work on the
# others, which the installer relies on when it regenerates them locally.

on:
pull_request:
paths:
- .github/workflows/pyamplicol-eager-portability.yml
- pyamplicol/Cargo.lock
- pyamplicol/Cargo.toml
- pyamplicol/build_backend/prepared_models.py
- pyamplicol/dependencies/release-lock.toml
- pyamplicol/pyproject.toml
- pyamplicol/rust/crates/rusticol-core/src/eager_runtime/**
- pyamplicol/rust/crates/rusticol-core/src/eager_runtime.rs
- pyamplicol/rust/crates/rusticol-core/src/eager_tables.rs
- pyamplicol/rust/crates/rusticol-core/src/engine/**
- pyamplicol/rust/crates/rusticol-core/src/engine.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_plane.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_direct.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_eager_direct.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_compiled_direct.rs
- pyamplicol/rust/crates/rusticol-core/src/lib.rs
- pyamplicol/rust/crates/rusticol-python/src/lib.rs
- pyamplicol/src/pyamplicol/_internal/physics/symbols.py
- pyamplicol/src/pyamplicol/_internal/versions.py
- pyamplicol/src/pyamplicol/config/**
- pyamplicol/src/pyamplicol/evaluators/symbolica*.py
- pyamplicol/src/pyamplicol/generation/**
- pyamplicol/src/pyamplicol/models/prepared*.py
- pyamplicol/src/pyamplicol/runtime/eager_exact/**
- pyamplicol/tools/ci/eager_portability*.py
push:
branches: [main]
paths:
- .github/workflows/pyamplicol-eager-portability.yml
- pyamplicol/Cargo.lock
- pyamplicol/Cargo.toml
- pyamplicol/build_backend/prepared_models.py
- pyamplicol/dependencies/release-lock.toml
- pyamplicol/pyproject.toml
- pyamplicol/rust/crates/rusticol-core/src/eager_runtime/**
- pyamplicol/rust/crates/rusticol-core/src/eager_runtime.rs
- pyamplicol/rust/crates/rusticol-core/src/eager_tables.rs
- pyamplicol/rust/crates/rusticol-core/src/engine/**
- pyamplicol/rust/crates/rusticol-core/src/engine.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_plane.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_direct.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_eager_direct.rs
- pyamplicol/rust/crates/rusticol-core/src/evaluator/symjit_compiled_direct.rs
- pyamplicol/rust/crates/rusticol-core/src/lib.rs
- pyamplicol/rust/crates/rusticol-python/src/lib.rs
- pyamplicol/src/pyamplicol/_internal/physics/symbols.py
- pyamplicol/src/pyamplicol/_internal/versions.py
- pyamplicol/src/pyamplicol/config/**
- pyamplicol/src/pyamplicol/evaluators/symbolica*.py
- pyamplicol/src/pyamplicol/generation/**
- pyamplicol/src/pyamplicol/models/prepared*.py
- pyamplicol/src/pyamplicol/runtime/eager_exact/**
- pyamplicol/tools/ci/eager_portability*.py
workflow_dispatch:

permissions:
contents: read

defaults:
run:
working-directory: pyamplicol

concurrency:
group: pyamplicol-eager-portability-${{ github.ref }}
cancel-in-progress: true

jobs:
produce-architecture-packs:
name: Produce prepared JIT pack (${{ matrix.target }})
runs-on: ${{ matrix.runner }}
concurrency:
group: "pyamplicol-symbolica-${{ startsWith(matrix.runner, 'macos-') && matrix.runner || format('{0}-{1}', matrix.runner, github.run_id) }}"
cancel-in-progress: false
queue: max
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-24.04
target: linux-x86-64
system: Linux
machine: x86_64
pack_architecture: x86_64
- runner: macos-15
target: macos-arm64
system: Darwin
machine: arm64
pack_architecture: aarch64
env:
PYAMPLICOL_BUILD_MODE: release
PYTHONDONTWRITEBYTECODE: "1"
SYMBOLICA_HIDE_BANNER: "1"
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
persist-credentials: false
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.11"
cache: pip
cache-dependency-path: |
pyamplicol/pyproject.toml
pyamplicol/dependencies/release-lock.toml
pyamplicol/dependencies/python-runtime-lock.toml
- uses: dtolnay/rust-toolchain@46511b1c83438f0dd37c02d843619ece5a4abb5b # 1.97.1
- name: Install pinned build tools
run: python -m pip install "maturin==1.15.0" "packaging==26.3"
- name: Build the non-publishable release bootstrap wheel
run: >-
python tools/ci/memory_watchdog.py --limit-gib 30 --
python tools/release/prepare_release_prepared_models.py
bootstrap-wheel .artifacts/release-prepared-bootstrap
- name: Install the isolated published-dependency runtime
run: |
python -m venv .venv
.venv/bin/python -m pip install .artifacts/release-prepared-bootstrap/pyamplicol-*.whl
- name: Produce host-labelled portable built-in JIT O2 packs
run: >-
.venv/bin/python tools/ci/memory_watchdog.py --limit-gib 30 --
.venv/bin/python tools/ci/eager_portability.py produce
.artifacts/eager-portability-transfer/${{ matrix.pack_architecture }}
--python .venv/bin/python
--asset-mode release
--expected-system ${{ matrix.system }}
--expected-machine ${{ matrix.machine }}
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: pyamplicol-eager-jit-transfer-${{ matrix.pack_architecture }}
path: pyamplicol/.artifacts/eager-portability-transfer/${{ matrix.pack_architecture }}/
if-no-files-found: error
retention-days: 14

consume-matching-architecture-pack:
name: Consume portable pack (${{ matrix.target }})
needs: produce-architecture-packs
runs-on: ${{ matrix.runner }}
concurrency:
group: "pyamplicol-symbolica-${{ startsWith(matrix.runner, 'macos-') && matrix.runner || format('{0}-{1}', matrix.runner, github.run_id) }}"
cancel-in-progress: false
queue: max
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-24.04
target: linux-x86-64
system: Linux
machine: x86_64
pack_architecture: x86_64
- runner: macos-15-intel
target: macos-x86-64
system: Darwin
machine: x86_64
pack_architecture: x86_64
- runner: macos-15
target: macos-arm64
system: Darwin
machine: arm64
pack_architecture: aarch64
env:
PYAMPLICOL_BUILD_MODE: release
PYTHONDONTWRITEBYTECODE: "1"
SYMBOLICA_HIDE_BANNER: "1"
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
persist-credentials: false
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.11"
cache: pip
cache-dependency-path: |
pyamplicol/pyproject.toml
pyamplicol/dependencies/release-lock.toml
pyamplicol/dependencies/python-runtime-lock.toml
- uses: dtolnay/rust-toolchain@46511b1c83438f0dd37c02d843619ece5a4abb5b # 1.97.1
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pyamplicol-eager-jit-transfer-${{ matrix.pack_architecture }}
path: pyamplicol/.artifacts/eager-portability-transfer
- name: Install pinned build tools
run: python -m pip install "maturin==1.15.0" "packaging==26.3"
- name: Build the non-publishable release bootstrap wheel
run: >-
python tools/ci/memory_watchdog.py --limit-gib 30 --
python tools/release/prepare_release_prepared_models.py
bootstrap-wheel .artifacts/release-prepared-bootstrap
- name: Install the isolated published-dependency runtime
run: |
python -m venv .venv
.venv/bin/python -m pip install .artifacts/release-prepared-bootstrap/pyamplicol-*.whl
- name: Generate and evaluate from the portable pack
run: >-
.venv/bin/python tools/ci/memory_watchdog.py --limit-gib 30 --
.venv/bin/python tools/ci/eager_portability.py consume
.artifacts/eager-portability-transfer
--python .venv/bin/python
--expected-system ${{ matrix.system }}
--expected-machine ${{ matrix.machine }}
--report .artifacts/eager-portability-results/${{ matrix.target }}.json
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: pyamplicol-eager-jit-result-${{ matrix.target }}
path: pyamplicol/.artifacts/eager-portability-results/${{ matrix.target }}.json
if-no-files-found: error
retention-days: 14
Loading
Loading