ramanujan-qft 0.3.0a4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ramanujan_qft-0.3.0a4/AUDIT.md +207 -0
- ramanujan_qft-0.3.0a4/CHANGELOG.md +170 -0
- ramanujan_qft-0.3.0a4/CITATION.cff +17 -0
- ramanujan_qft-0.3.0a4/CONTRIBUTING.md +64 -0
- ramanujan_qft-0.3.0a4/LICENSE +21 -0
- ramanujan_qft-0.3.0a4/MANIFEST.in +20 -0
- ramanujan_qft-0.3.0a4/PKG-INFO +337 -0
- ramanujan_qft-0.3.0a4/README.md +308 -0
- ramanujan_qft-0.3.0a4/THIRD_PARTY_NOTICES.md +14 -0
- ramanujan_qft-0.3.0a4/benchmarks/bench_fair.py +58 -0
- ramanujan_qft-0.3.0a4/benchmarks/bench_release.py +123 -0
- ramanujan_qft-0.3.0a4/benchmarks/bench_vs_scipy.py +36 -0
- ramanujan_qft-0.3.0a4/benchmarks/data/release_comparison.json +234 -0
- ramanujan_qft-0.3.0a4/benchmarks/data/sunset_audit.json +953 -0
- ramanujan_qft-0.3.0a4/benchmarks/data/sunset_budgets.json +321 -0
- ramanujan_qft-0.3.0a4/benchmarks/looptools/compare_looptools.sh +30 -0
- ramanujan_qft-0.3.0a4/benchmarks/looptools/timing_driver.F +30 -0
- ramanujan_qft-0.3.0a4/docs/CAPABILITIES.md +60 -0
- ramanujan_qft-0.3.0a4/docs/COMPARISON.md +189 -0
- ramanujan_qft-0.3.0a4/docs/PRIOR_ART.md +159 -0
- ramanujan_qft-0.3.0a4/docs/RELEASE_PLAN.md +81 -0
- ramanujan_qft-0.3.0a4/docs/RELEASING.md +157 -0
- ramanujan_qft-0.3.0a4/docs/SCIENTIFIC_REVIEW.md +115 -0
- ramanujan_qft-0.3.0a4/docs/_static/custom.css +18 -0
- ramanujan_qft-0.3.0a4/docs/_static/try_it.css +92 -0
- ramanujan_qft-0.3.0a4/docs/_static/try_it.js +341 -0
- ramanujan_qft-0.3.0a4/docs/_static/try_it_worker.js +99 -0
- ramanujan_qft-0.3.0a4/docs/api/index.md +94 -0
- ramanujan_qft-0.3.0a4/docs/api/legacy.md +60 -0
- ramanujan_qft-0.3.0a4/docs/api/mellin.md +36 -0
- ramanujan_qft-0.3.0a4/docs/api/multiloop.md +20 -0
- ramanujan_qft-0.3.0a4/docs/api/one_loop.md +19 -0
- ramanujan_qft-0.3.0a4/docs/api/rmt.md +14 -0
- ramanujan_qft-0.3.0a4/docs/api/sunset.md +16 -0
- ramanujan_qft-0.3.0a4/docs/api/sunset_rmt.md +12 -0
- ramanujan_qft-0.3.0a4/docs/api/sunset_taylor.md +9 -0
- ramanujan_qft-0.3.0a4/docs/changelog.md +2 -0
- ramanujan_qft-0.3.0a4/docs/citing.md +87 -0
- ramanujan_qft-0.3.0a4/docs/conf.py +75 -0
- ramanujan_qft-0.3.0a4/docs/getting_started/index.md +8 -0
- ramanujan_qft-0.3.0a4/docs/getting_started/installation.md +111 -0
- ramanujan_qft-0.3.0a4/docs/getting_started/quickstart.md +196 -0
- ramanujan_qft-0.3.0a4/docs/index.md +191 -0
- ramanujan_qft-0.3.0a4/docs/requirements.txt +9 -0
- ramanujan_qft-0.3.0a4/docs/try_it.md +69 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/conventions.md +132 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/index.md +15 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/mellin.md +347 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/multiloop.md +212 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/one_loop.md +234 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/precision.md +169 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/rmt.md +295 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/sunset.md +178 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/sunset_rmt.md +303 -0
- ramanujan_qft-0.3.0a4/docs/user_guide/sunset_taylor.md +92 -0
- ramanujan_qft-0.3.0a4/docs/validation.md +145 -0
- ramanujan_qft-0.3.0a4/examples/01_ramanujan_master_theorem.py +28 -0
- ramanujan_qft-0.3.0a4/examples/02_mellin_products.py +36 -0
- ramanujan_qft-0.3.0a4/examples/03_one_loop_integrals.py +25 -0
- ramanujan_qft-0.3.0a4/examples/04_sunset_dispersion.py +18 -0
- ramanujan_qft-0.3.0a4/examples/05_multiloop_graphs.py +28 -0
- ramanujan_qft-0.3.0a4/examples/06_sunset_rmt.py +29 -0
- ramanujan_qft-0.3.0a4/examples/07_sunset_taylor.py +18 -0
- ramanujan_qft-0.3.0a4/examples/GALLERY_HEADER.rst +6 -0
- ramanujan_qft-0.3.0a4/notebooks/quickstart.ipynb +241 -0
- ramanujan_qft-0.3.0a4/notebooks/research_alpha.ipynb +249 -0
- ramanujan_qft-0.3.0a4/pyproject.toml +42 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/__init__.py +32 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/brackets.py +126 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/core/__init__.py +3 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/core/dispersion_mob.py +65 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/core/mob_dynamic_engine.py +159 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/core/ramanujan_framework.py +70 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/mellin.py +811 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/multiloop.py +394 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/one_loop.py +584 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/rmt.py +238 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/solvers/__init__.py +1 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/solvers/feynman_mob_solver.py +155 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/sunset.py +299 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/sunset_rmt.py +327 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/sunset_taylor.py +162 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/utils/__init__.py +2 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/utils/mob_convergence_filter.py +171 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft/utils/ramanujan_continuation.py +79 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft.egg-info/PKG-INFO +337 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft.egg-info/SOURCES.txt +116 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft.egg-info/dependency_links.txt +1 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft.egg-info/requires.txt +13 -0
- ramanujan_qft-0.3.0a4/ramanujan_qft.egg-info/top_level.txt +1 -0
- ramanujan_qft-0.3.0a4/setup.cfg +4 -0
- ramanujan_qft-0.3.0a4/setup.py +4 -0
- ramanujan_qft-0.3.0a4/tests/conftest.py +29 -0
- ramanujan_qft-0.3.0a4/tests/data/looptools_reference.csv +24 -0
- ramanujan_qft-0.3.0a4/tests/data/sunset_rmt_reference.json +49 -0
- ramanujan_qft-0.3.0a4/tests/test_legacy_api.py +67 -0
- ramanujan_qft-0.3.0a4/tests/test_mellin.py +87 -0
- ramanujan_qft-0.3.0a4/tests/test_mellin_regressions.py +153 -0
- ramanujan_qft-0.3.0a4/tests/test_multiloop.py +285 -0
- ramanujan_qft-0.3.0a4/tests/test_one_loop.py +157 -0
- ramanujan_qft-0.3.0a4/tests/test_publisher_preflight.py +61 -0
- ramanujan_qft-0.3.0a4/tests/test_report_reproducibility.py +31 -0
- ramanujan_qft-0.3.0a4/tests/test_rmt.py +43 -0
- ramanujan_qft-0.3.0a4/tests/test_round2_regressions.py +221 -0
- ramanujan_qft-0.3.0a4/tests/test_round3_regressions.py +132 -0
- ramanujan_qft-0.3.0a4/tests/test_sunset.py +74 -0
- ramanujan_qft-0.3.0a4/tests/test_sunset_audit.py +17 -0
- ramanujan_qft-0.3.0a4/tests/test_sunset_rmt.py +249 -0
- ramanujan_qft-0.3.0a4/tests/test_sunset_taylor.py +111 -0
- ramanujan_qft-0.3.0a4/tools/audit_sunset.py +161 -0
- ramanujan_qft-0.3.0a4/tools/audit_sunset_budgets.py +74 -0
- ramanujan_qft-0.3.0a4/tools/check_browser_console.py +131 -0
- ramanujan_qft-0.3.0a4/tools/check_doc_snippets.py +120 -0
- ramanujan_qft-0.3.0a4/tools/check_notebook.py +40 -0
- ramanujan_qft-0.3.0a4/tools/check_pypi_publisher.py +72 -0
- ramanujan_qft-0.3.0a4/tools/check_release_metadata.py +31 -0
- ramanujan_qft-0.3.0a4/tools/generate_sunset_rmt_references.py +45 -0
- ramanujan_qft-0.3.0a4/tools/smoke_release.py +69 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Pre-release audit (October 2026)
|
|
2
|
+
|
|
3
|
+
This file records what was checked before making the repository public, how it
|
|
4
|
+
was checked, what was found, and what was changed. Every number below can be
|
|
5
|
+
reproduced with the scripts in `tests/` and `benchmarks/`.
|
|
6
|
+
|
|
7
|
+
## How the code was checked
|
|
8
|
+
|
|
9
|
+
* **LoopTools 2.16** (the vendored copy, built with gfortran) as the reference
|
|
10
|
+
for one-loop integrals: values in `tests/data/looptools_reference.csv`.
|
|
11
|
+
* **Independent integrations** written from first principles: Feynman-parameter
|
|
12
|
+
integrals with the inner integration done analytically (mpmath), and 2-D
|
|
13
|
+
Feynman-parameter integrals for the two-loop sunset (SciPy).
|
|
14
|
+
* **Several working precisions** (15, 30, 50/60 digits). A correct method must
|
|
15
|
+
give the same answer at every precision.
|
|
16
|
+
* **A clean install** of the package outside the repository, in a fresh venv.
|
|
17
|
+
|
|
18
|
+
## Findings in version 0.1 and their status
|
|
19
|
+
|
|
20
|
+
| # | Component | Finding | Evidence | Status in 0.2 |
|
|
21
|
+
|---|-----------|---------|----------|---------------|
|
|
22
|
+
| 1 | Packaging | `import ramanujan_qft` failed after installation: `core/ramanujan_framework.py` imported `feynman_atlas`, a file in the repository root that is not part of the package. | `ModuleNotFoundError: feynman_atlas` in a clean environment | **Fixed.** `pyproject.toml` added; clean venv install tested |
|
|
23
|
+
| 2 | `solve_B0_standard`, equal-mass `solve_C0_standard` above threshold | A hard-coded regulator `delta = 1e-30` combined with the precision setting gave correct values only for `precision >= 50`. At 30 digits B0(1;1,1) returned -0.375 instead of -0.391, and C0(0,0,5;1,1,1) was off by 0.11. At 15 digits it crashed with "gamma function pole". | `tests/test_legacy_api.py`, `tests/test_one_loop.py` | **Fixed.** Exact closed forms, correct at every precision |
|
|
24
|
+
| 3 | `solve_B0_standard` convention | The finite part differs from LoopTools by exactly -γ_E (RAF -0.39102 vs LoopTools +0.18620 at p²=1). The README stated a perfect match with LoopTools. | LoopTools run | **Documented.** The legacy method keeps its convention; the new `one_loop.B0` uses LoopTools conventions |
|
|
25
|
+
| 4 | Unequal-mass C0 | **Correct.** Matches LoopTools and the independent integration to working precision, including degenerate masses. | `tests/test_one_loop.py` | Kept (moved to `one_loop.C0`) |
|
|
26
|
+
| 5 | `massive_sunset_residue`, Euclidean branch | Integrated `F/U^3` over the simplex. That is not the sunset finite part: it is linear in p² by construction and jumps from 466 to 1.4 across threshold. | Discontinuity test | **Withdrawn** (raises `NotImplementedError`) |
|
|
27
|
+
| 6 | Sunset Im part (`phase_space_3body`) | Correct shape, but the prefactor was π/(16s) instead of π/s, and the sign was flipped. This is the "16× normalisation discovery" in `global_sunset_benchmark.py`: it is a bug, not a new effect. | Ratio is exactly 16.000000 against the Feynman-parameter Im part | **Fixed** in `sunset.sunset_im` |
|
|
28
|
+
| 7 | Sunset real part (`sunset_real_dispersion`) | Fixed placeholder subtraction constants `s0 = -0.5`, `s1 = 0.1`. The dispersion integral ran straight through the pole at t = s (no principal value). | Source | **Replaced** by `sunset.sunset_subtracted`, validated to 1e-11 to 1e-14 against Feynman parameters |
|
|
29
|
+
| 8 | `solve_P126` | Hard-coded log coefficients and a fixed +iπ phase, which gives a spurious imaginary part in the Euclidean region. Does not reproduce the target -1.039367 printed by the module itself (returns 0.5617+0.1401i). | Run | **Withdrawn** |
|
|
30
|
+
| 9 | `solve_graph_polynomials`, `solve_elliptic_kite`, `solve_double_box_inv`, `solve_triangle3L` | The "topology parser" classifies by polynomial degree. The kite and double box were routed to the sunset with masses (1,2,3) regardless of input: changing s,t from (-3,-2) to (-30,-99) changed the "double box" only through the sunset quadrature. The 3-loop triangle and any user polynomial returned exactly 0. The "elliptic" series was an ad hoc expression. | `PolynomialStructuralParser.identify` output | **Withdrawn** |
|
|
31
|
+
| 10 | `MoBDynamicEngine` | Analyses the bracket matrix, then returns `complex(0)`. | Source | **Raises** `NotImplementedError` |
|
|
32
|
+
| 11 | `solve_bessel_exp_product` | Returned 0 for every input (the residue formula evaluated Γ at its poles, and a bare `except` returned 0). | `(3,4) -> 0.0` instead of 0.2 | **Fixed** via `mellin.product_integral` |
|
|
33
|
+
| 12 | RACE (`solve_product`) | Correct for exp × J0 / Gaussian away from the convergence boundary. Near it, accuracy degraded silently: exp(-3x)J0(4x) gave 0.2000042 instead of 0.2. Errors were returned as strings. Poles from the large-x expansion of a factor were ignored, so factors such as 1/(x+m) gave wrong results. | Closed forms | **Rewritten:** both expansions, convergence control, pole collisions, exceptions |
|
|
34
|
+
| 13 | Speed claims ("O(1)", faster than LoopTools) | LoopTools: C0 ≈ 24 µs, B0 ≈ 0.8 µs per call. RAF 0.1: C0 ≈ 22 ms, B0 up to 4.5 ms. 0.2 (precision-checked): C0 ≈ 11 ms, B0 ≈ 0.27 ms. Evaluation is not O(1) in any meaningful sense: it calls special functions and series of growing length. | `benchmarks/looptools/compare_looptools.sh` | **Claims removed** from README |
|
|
35
|
+
| 14 | pySecDec "fails at the branch cut" (C0 table) | The value -0.1474950302 is not a pySecDec limitation. LoopTools and the independent integration both give -0.4219-0.3367i, and pySecDec handles this case with contour deformation. The run was most likely misconfigured (parameter order or missing contour deformation). | — | **Claim removed** |
|
|
36
|
+
| 15 | Tests | The `test_*.py` files in the root contained no assertions. Some printed hard-coded "Target" values for competitors. | Source | **New suite** in `tests/`: 311 tests |
|
|
37
|
+
| 16 | Benchmark scripts in the root | Require pySecDec libraries that are not in the repository (`RECREATION/`, `pysecdec_*`). Several print fixed reference numbers and labels such as "Competitor Killer". | Source | **Left untouched;** listed below for you to decide |
|
|
38
|
+
|
|
39
|
+
## Originality review
|
|
40
|
+
|
|
41
|
+
A literature review (references checked online or against local copies) found
|
|
42
|
+
that RACE and the other methods in the package are **classical**. Credit goes
|
|
43
|
+
to Hardy, Marichev and Adamchik–Marichev, Slater, Fikioris, SymPy
|
|
44
|
+
`meijerint`, mpmath `meijerg`, Gonzalez–Moll–Schmidt, Prausa,
|
|
45
|
+
Ananthanarayan–Banik–Friot–Ghosh and others. No copied code was found. The
|
|
46
|
+
contribution is the implementation. See [docs/PRIOR_ART.md](docs/PRIOR_ART.md).
|
|
47
|
+
|
|
48
|
+
## RACE (Mellin residue engine): two adversarial audits
|
|
49
|
+
|
|
50
|
+
Each round used independent hunters that tried to break the engine with
|
|
51
|
+
about 2,000–4,000 cases checked against closed forms (DLMF, Gradshteyn–Ryzhik,
|
|
52
|
+
SymPy) and independent quadratures (contour rotation, Gauss–Legendre,
|
|
53
|
+
QUADPACK). Separate agents then reproduced every claimed defect with a
|
|
54
|
+
different method.
|
|
55
|
+
|
|
56
|
+
**Round 1 (19 confirmed defects in the first rewrite), all fixed:**
|
|
57
|
+
|
|
58
|
+
* Invalid contour closures: the asymptotic "expand the Gaussian" series
|
|
59
|
+
returned silent zeros, e.g. ∫e^(−x²)cos x dx = 0.
|
|
60
|
+
* Wrong branch of the Weber–Schafheitlin discontinuous integrals.
|
|
61
|
+
* Divergent integrals returned as finite numbers.
|
|
62
|
+
* Uncompensated cancellation, losing 7–10 digits.
|
|
63
|
+
* Near pole collisions accepted with errors up to 10¹³.
|
|
64
|
+
* Tiny results accepted with only absolute accuracy.
|
|
65
|
+
* Parameters frozen at 15 digits.
|
|
66
|
+
* A dead `nsum` fallback.
|
|
67
|
+
* A leaked private exception.
|
|
68
|
+
* Quadratic-time summation.
|
|
69
|
+
|
|
70
|
+
**Round 2 (28 confirmed defects after the fixes), all fixed:**
|
|
71
|
+
|
|
72
|
+
*RACE:*
|
|
73
|
+
|
|
74
|
+
* Inputs within 10⁻¹⁶ of a lattice point (e.g. s = 10⁻⁴⁰, ν = 10⁻²⁵) were rounded,
|
|
75
|
+
returning 0. Inputs are now represented exactly.
|
|
76
|
+
* A late peak of the terms (`gaussian_bessel`) stopped the summation early. An
|
|
77
|
+
a-priori peak estimate now guards the stopping rule.
|
|
78
|
+
* An over-optimistic Wynn-ε error estimate. Wynn is now used only for
|
|
79
|
+
alternating series, with disjoint-window checks.
|
|
80
|
+
* Collisions near a singularity of I(s). The step δ is now scaled to the
|
|
81
|
+
distance from the singularity, with Richardson extrapolation.
|
|
82
|
+
* Equal-frequency integrals with a vanishing beat term were called divergent.
|
|
83
|
+
The strip check now uses the asymptotic phases.
|
|
84
|
+
* The precision cap gave up too early, with a misleading message.
|
|
85
|
+
* A raw mpmath `NoConvergence` leaked out.
|
|
86
|
+
* `error_estimate` ignored the final rounding.
|
|
87
|
+
|
|
88
|
+
*One-loop and sunset:*
|
|
89
|
+
|
|
90
|
+
* Catastrophic cancellation in B0 and C0 at extreme kinematics: B0(10⁻¹²; 1, 10⁶)
|
|
91
|
+
was 330% off. All one-loop functions are now certified by two-precision agreement.
|
|
92
|
+
* C0 raised ZeroDivisionError at regular points.
|
|
93
|
+
* The all-massless sunset returned an undefined quantity.
|
|
94
|
+
* A quadrature node landing on t = s caused a crash.
|
|
95
|
+
* The massless D=3 bubble crashed.
|
|
96
|
+
|
|
97
|
+
*Helpers and tests:*
|
|
98
|
+
|
|
99
|
+
* `mellin_numeric` accepted integrals divergent at x = 0.
|
|
100
|
+
* A complex-z misuse of the 2F1 continuation gave the wrong branch.
|
|
101
|
+
* The legacy HCF series summation was inaccurate.
|
|
102
|
+
* Missing input validation.
|
|
103
|
+
* Test-suite flaws: a vacuous symmetry test, a wrong reference constant, a wrong
|
|
104
|
+
closed form in a comment.
|
|
105
|
+
|
|
106
|
+
Final random sweeps: every result was either correct to the requested
|
|
107
|
+
accuracy or a raised `SeriesConvergenceError` / `ValueError`. **No silent wrong
|
|
108
|
+
result remained.** Known, documented refusals: the convergence boundary ρ = 1
|
|
109
|
+
(e.g. e^(−x) J₀(x), equal-scale products), fixed-sign series with ρ very close
|
|
110
|
+
to 1, and cases needing more than `max_terms` terms. All 47 cases are
|
|
111
|
+
regression tests (`tests/test_mellin_regressions.py`,
|
|
112
|
+
`tests/test_round2_regressions.py`).
|
|
113
|
+
|
|
114
|
+
## Round 3: one-loop and sunset
|
|
115
|
+
|
|
116
|
+
A third round targeted silent wrong results only.
|
|
117
|
+
|
|
118
|
+
**One-loop functions: no silent wrong result.**
|
|
119
|
+
|
|
120
|
+
* 1,820 random B0 / C0 / bubble_3d / B0_mob / C0_mob cases were checked at 15, 30
|
|
121
|
+
and 50 digits, with masses from 10⁻¹² to 10¹², thresholds and pseudo-thresholds
|
|
122
|
+
included.
|
|
123
|
+
* 1,740 cases at s = 0 were checked.
|
|
124
|
+
* A 24,000-point comparison against LoopTools was run.
|
|
125
|
+
* At the extreme hierarchies where the two disagreed, LoopTools (double precision)
|
|
126
|
+
was the one in error. The package agreed with 90-digit independent quadrature.
|
|
127
|
+
|
|
128
|
+
**Defects found, all fixed:**
|
|
129
|
+
|
|
130
|
+
* **`sunset_im`.** It suffered catastrophic cancellation near threshold and
|
|
131
|
+
could return 0 there. It also gave precision-independent errors at small
|
|
132
|
+
scales, because mpmath's quadrature tolerance is absolute. It now uses exact
|
|
133
|
+
homogeneity scaling, factored Källén functions with an endpoint-free
|
|
134
|
+
substitution, error-checked quadrature and a two-precision check.
|
|
135
|
+
* **`sunset_subtracted` / `sunset_d2`.** These were up to 22% wrong at scales
|
|
136
|
+
around 10¹², and wrong at small scales and large |s|/th. They are now scaled
|
|
137
|
+
to the threshold, use a 1/t tail map, normalise each integrand, and are
|
|
138
|
+
certified. They are validated against a closed form for masses (0, 0, M).
|
|
139
|
+
* **C0 with a massless internal line.** It was refused with a false "IR
|
|
140
|
+
divergent" message. IR-finite configurations are now supported through a
|
|
141
|
+
general imaginary part with clipped roots. Only the truly divergent cases
|
|
142
|
+
(m1 = m2 = 0 or m2 = m3 = 0) raise.
|
|
143
|
+
* **C0 at s = 0.** An unchecked quadrature fooled the certification for masses
|
|
144
|
+
≳ 2¹⁴⁰. It is replaced by the exact divided-difference closed form.
|
|
145
|
+
* **Non-finite inputs.** These are now rejected with `ValueError`. Previously one
|
|
146
|
+
call ran for more than 14 minutes.
|
|
147
|
+
* **Docs.** The "exact" wording for numerical sunset values, a mis-rounded
|
|
148
|
+
LoopTools example and stale test counts were corrected.
|
|
149
|
+
|
|
150
|
+
**Cost.** Certified `sunset_subtracted` / `sunset_d2` take about 10 s per value
|
|
151
|
+
(up to ~40 s for |s| ≫ threshold).
|
|
152
|
+
|
|
153
|
+
## Round 3: RACE
|
|
154
|
+
|
|
155
|
+
The first two RACE hunters were stopped by usage limits, so the round was
|
|
156
|
+
completed by a smaller, bounded run: one hunter and one independent reproducer.
|
|
157
|
+
|
|
158
|
+
**Defect from the interrupted hunter (fixed).** For (x+m)^(−v) with v ≫ k·m, the
|
|
159
|
+
residue terms dip and then peak again near n ≈ v. The stopping rule fired in the
|
|
160
|
+
dip, so wrong values were returned silently: relative errors up to 10²¹ while
|
|
161
|
+
claiming 10⁻¹⁶. The a-priori peak estimate now includes the Gamma-argument
|
|
162
|
+
offsets |s|, v and |ν|. The hunter's lead maps now pass:
|
|
163
|
+
|
|
164
|
+
| Map | Before | After |
|
|
165
|
+
|---|---|---|
|
|
166
|
+
| exp × inverse_power, large v | 34 + 21 bad | 0 bad of 288 |
|
|
167
|
+
| hump / inverse-power-pair scans | 18 + 2 bad | 0 bad |
|
|
168
|
+
| exp × ip and ip × ip at 15/30/50 digits | 60 bad (at 50 digits) | 0 bad of 2,880 |
|
|
169
|
+
|
|
170
|
+
**Bounded hunter: 785 cases.** 700 correct and 31 honest refusals. No silent
|
|
171
|
+
error for large Bessel orders (up to 200), large or complex s (|Im s| up to 400),
|
|
172
|
+
inverse-power pairs with large v, `gaussian_bessel` with large ν, Wynn on growing
|
|
173
|
+
alternating series, `continuation=True`, exact and near collisions, or the
|
|
174
|
+
legacy engines. It found two defects, both confirmed by the reproducer with
|
|
175
|
+
independent closed forms, and both fixed:
|
|
176
|
+
|
|
177
|
+
1. **Long decimal-string s next to a pole of I(s).** Up to 1.4% error at dps 15.
|
|
178
|
+
String inputs are now sized by their digits and the requested precision.
|
|
179
|
+
2. **Strip edges frozen at construction precision.** For string ν or v, some
|
|
180
|
+
divergent integrals returned values, and one existing integral was reported
|
|
181
|
+
divergent. The strip is now computed from the raw parameters at
|
|
182
|
+
input-sized precision.
|
|
183
|
+
|
|
184
|
+
Regression tests for all of these are in `tests/test_round3_regressions.py`.
|
|
185
|
+
|
|
186
|
+
## Repository hygiene: cleanup completed
|
|
187
|
+
|
|
188
|
+
The research-alpha cleanup removed obsolete material from the current tree:
|
|
189
|
+
|
|
190
|
+
- Vendored third-party source trees, tarballs and compiled drivers. The maintained
|
|
191
|
+
`benchmarks/looptools/compare_looptools.sh` downloads LoopTools when requested.
|
|
192
|
+
- Generated `HEAD_TO_HEAD/` SecDec runs, backups and executables, and the local
|
|
193
|
+
`secdec3_local` checkout.
|
|
194
|
+
- Downloaded reference PDFs, personal notes, old benchmark plots, superseded
|
|
195
|
+
paper/results drafts and the exploratory Minkowski strategy note.
|
|
196
|
+
- Root-level experimental scripts and old benchmark/test drivers, plus `runners/`
|
|
197
|
+
and `scratch/`. Supported examples are in `examples/`; maintained benchmarks
|
|
198
|
+
are in `benchmarks/` and regression tests are in `tests/`.
|
|
199
|
+
|
|
200
|
+
The numerical package, tested legacy compatibility interfaces, independent
|
|
201
|
+
reference fixtures, current audit report and reproduction tools are retained.
|
|
202
|
+
Original scientific findings above remain part of the audit record, including
|
|
203
|
+
historical filenames and withdrawn claims.
|
|
204
|
+
|
|
205
|
+
This cleanup does not rewrite Git history: earlier commits still contain the
|
|
206
|
+
removed files. A local archive was also made before removal. Copyright-holder
|
|
207
|
+
metadata and any future history rewrite are separate from this cleanup.
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.3.0a4 — research alpha
|
|
6
|
+
|
|
7
|
+
- Address all six nonblocking findings in the supplementary review of 0.3.0a2;
|
|
8
|
+
retain the original report and its scope with the release evidence.
|
|
9
|
+
- Make audit and benchmark reports work from source archives without Git,
|
|
10
|
+
using source SHA-256 hashes as the binding provenance identifiers.
|
|
11
|
+
- Replace ambiguous numerical “certified” claims with precision checks and
|
|
12
|
+
explain the dimension-independent zero in the sunset Gamma families.
|
|
13
|
+
- Publish measured default-budget coverage at 10, 20 and 30 digits, with
|
|
14
|
+
accurate values and typed budget refusals reported separately.
|
|
15
|
+
- Validate product benchmarks against a separate Gaussian Fourier/angular
|
|
16
|
+
representation, then regenerate the accuracy-checked measurements.
|
|
17
|
+
- Credit Reetamshu consistently in package and citation metadata.
|
|
18
|
+
- Numerical algorithms and documented domains are unchanged from 0.3.0a2.
|
|
19
|
+
|
|
20
|
+
## 0.3.0a3 — replacement TestPyPI release
|
|
21
|
+
|
|
22
|
+
- Restore TestPyPI availability after the earlier releases were accidentally
|
|
23
|
+
deleted. A new version is required because deleted filenames cannot be reused.
|
|
24
|
+
- Use `publish.yml` and the protected `pypi` environment for TestPyPI uploads,
|
|
25
|
+
matching the replacement trusted publisher. Manual uploads target only
|
|
26
|
+
TestPyPI and require full validation and an installation check.
|
|
27
|
+
- Authentication diagnostics now select PyPI or TestPyPI explicitly and report
|
|
28
|
+
allowlisted rejection codes without exposing credentials.
|
|
29
|
+
- Numerical algorithms are unchanged from 0.3.0a2. Review and production PyPI publication were pending at preparation time.
|
|
30
|
+
|
|
31
|
+
## 0.3.0a2 — historical TestPyPI rehearsal (files subsequently deleted)
|
|
32
|
+
|
|
33
|
+
- Fixed browser startup by loading Pyodide's compiled NumPy before importing
|
|
34
|
+
the package, including custom dependency-wheel configurations.
|
|
35
|
+
- Added browser examples for graph-derived sunset RMT and equal-mass Taylor
|
|
36
|
+
evaluation, and real Chromium checks for examples, references and reset.
|
|
37
|
+
- Added a reproducible 30-digit comparison with three mpmath quadrature
|
|
38
|
+
methods, raw timings, source hashes and explicit accuracy failures.
|
|
39
|
+
Historical one-loop timings are labelled separately; unsupported broad
|
|
40
|
+
rankings were removed.
|
|
41
|
+
- Added production publisher authentication preflight without upload, plus
|
|
42
|
+
an installation check outside the checkout after production publication.
|
|
43
|
+
- Refreshed candidate metadata and the independent-parameter audit. External
|
|
44
|
+
scientific review remains pending; automated validation is not peer review.
|
|
45
|
+
|
|
46
|
+
## 0.3.0a1 — TestPyPI rehearsal (not published to production PyPI)
|
|
47
|
+
|
|
48
|
+
### Equal-mass continuation and release preparation
|
|
49
|
+
- Added a separate D=2 equal-mass transformed Taylor series for vacuum and
|
|
50
|
+
finite Euclidean momentum, with an analytic tail bound and precision control
|
|
51
|
+
for the unstable coefficient recurrence. RMT calls retain their own domains.
|
|
52
|
+
- Added a reproducible independent-parameter audit, capability table, scientific
|
|
53
|
+
review packet, research notebook and contribution instructions.
|
|
54
|
+
- Publication now depends on tests, numerical audit, docs/notebook checks and
|
|
55
|
+
installed wheel/sdist checks across Linux, Windows and macOS. Added a manual
|
|
56
|
+
TestPyPI rehearsal. Hosted candidate checks passed; external review and
|
|
57
|
+
publication remain pending.
|
|
58
|
+
|
|
59
|
+
### Repository cleanup
|
|
60
|
+
- Removed obsolete root scripts, superseded plots/results drafts, generated
|
|
61
|
+
SecDec runs, vendored tools, binaries and downloaded PDFs from the current tree.
|
|
62
|
+
- Retained the supported package and compatibility APIs, current examples,
|
|
63
|
+
maintained benchmarks, independent fixtures and reproducible audit report.
|
|
64
|
+
- Updated ignore rules and packaging so generated output stays outside version
|
|
65
|
+
control and the source distribution contains the maintained reproduction files.
|
|
66
|
+
- Git history is preserved; this cleanup is not a history rewrite.
|
|
67
|
+
|
|
68
|
+
### Multivariate Ramanujan sunset series
|
|
69
|
+
- Added exact Schwinger bracket matrices and basis solving with inspectable
|
|
70
|
+
Gamma-function summands; nonsingularity makes no convergence claim.
|
|
71
|
+
- Added `compile_sunset_rmt` and `integrate_graph_rmt` for the massive,
|
|
72
|
+
unit-power two-loop sunset in D=2. The momentum-dominant and mass-dominant
|
|
73
|
+
Euclidean charts have explicit sufficient convergence domains.
|
|
74
|
+
- Resolved coalescing poles analytically into logarithms and harmonic numbers.
|
|
75
|
+
Evaluation uses arbitrary-precision series summation, an analytic tail bound,
|
|
76
|
+
precision checks and bounded work, with no numerical integration fallback.
|
|
77
|
+
- Added independent 40/55-digit simplex references, regulated Gamma-family
|
|
78
|
+
checks, boundary/budget tests, and comparisons with the hybrid graph backend.
|
|
79
|
+
Equal-mass vacuum and the gap between charts remain explicitly unsupported.
|
|
80
|
+
|
|
81
|
+
### Multiloop graphs
|
|
82
|
+
- Added immutable `ScalarEdge` and `ScalarGraph` objects with exact Symanzik
|
|
83
|
+
polynomials, conserved Euclidean external vectors, graph-derived loop counts,
|
|
84
|
+
and UV power counting over all cyclic edge subsets.
|
|
85
|
+
- Added experimental `integrate_graph`: RMT integration of the Schwinger scale,
|
|
86
|
+
factored Hepp sectors with smooth boundary maps, and replicated scrambled
|
|
87
|
+
Sobol integration. Supports convergent massive scalar graphs and positive
|
|
88
|
+
fractional powers/dimension, subject to explicit work budgets.
|
|
89
|
+
- Added `MultiloopResult` statistical diagnostics and strict convergence failure
|
|
90
|
+
via `MultiloopConvergenceError`; SciPy is an optional `multiloop` extra.
|
|
91
|
+
- Added independent one- through four-loop checks, a graph example, and a guide
|
|
92
|
+
documenting Euclidean normalization and the remaining path to general
|
|
93
|
+
multivariate RMT, regulator expansions, and physical-region coverage.
|
|
94
|
+
|
|
95
|
+
### Documentation
|
|
96
|
+
- Documentation website (Sphinx, pydata-sphinx-theme), deployed to GitHub Pages by
|
|
97
|
+
`.github/workflows/docs.yml`: landing page, installation, quickstart, user guide
|
|
98
|
+
(Master Theorem, product integrals, one-loop, sunset, precision, conventions),
|
|
99
|
+
API reference, example gallery, validation, comparison, prior art, citing.
|
|
100
|
+
- "Try it in your browser": an in-browser console (Pyodide in a Web Worker) that
|
|
101
|
+
runs the package without installation; a Colab quickstart notebook
|
|
102
|
+
(`notebooks/quickstart.ipynb`).
|
|
103
|
+
- NumPy-style docstrings with examples for every public function; the examples run
|
|
104
|
+
as doctests in CI, and `tools/check_doc_snippets.py` runs the examples on the
|
|
105
|
+
documentation pages.
|
|
106
|
+
- `CITATION.cff`; `publish.yml` for PyPI trusted publishing on a GitHub release.
|
|
107
|
+
- LICENSE: the copyright line reads "In memory of Ramanujan".
|
|
108
|
+
|
|
109
|
+
## 0.2.0
|
|
110
|
+
|
|
111
|
+
### Added
|
|
112
|
+
- `ramanujan_qft.rmt`: `ramanujan_master_theorem`, `mellin_numeric`, `massive_propagator_rmt`.
|
|
113
|
+
- `ramanujan_qft.mellin`: `product_integral` with both residue expansions, the
|
|
114
|
+
large-x poles of each factor, convergence control (`SeriesConvergenceError`)
|
|
115
|
+
and pole collisions (logarithmic results). Atlas: exponential, gaussian,
|
|
116
|
+
bessel_j, cosine, sine, inverse_power, gaussian_bessel.
|
|
117
|
+
- `ramanujan_qft.one_loop`: `B0` (all masses), `B0_mob`, `C0`, `C0_mob`, `bubble_3d`
|
|
118
|
+
in LoopTools conventions, certified to the requested digits (evaluation at two
|
|
119
|
+
working precisions, raised until they agree).
|
|
120
|
+
- `ramanujan_qft.sunset`: `sunset_im`, `sunset_subtracted`, `sunset_d2`.
|
|
121
|
+
- Test suite (311 tests) with LoopTools 2.16 reference values, independent
|
|
122
|
+
integrations and regression tests from two adversarial audits; GitHub Actions workflow; `pyproject.toml`; examples; benchmarks.
|
|
123
|
+
|
|
124
|
+
### Fixed
|
|
125
|
+
- The package can now be imported after installation (it no longer depends on
|
|
126
|
+
`feynman_atlas.py` in the repository root).
|
|
127
|
+
- `solve_B0_standard` / `solve_C0_standard` are correct at every precision
|
|
128
|
+
(previously correct only for `precision >= 50`, and crashing at 15).
|
|
129
|
+
- Sunset imaginary part: prefactor π/s instead of π/(16s), and the correct sign.
|
|
130
|
+
- `solve_bessel_exp_product` returned 0.
|
|
131
|
+
- `DispersionMoBEngine.reconstruct_complex`: principal value above threshold.
|
|
132
|
+
- `HypergeometricConvergenceFilter.check_convergence`: a divergent series with
|
|
133
|
+
p − q − 1 = 0 was labelled "conditional".
|
|
134
|
+
- Constructors no longer change the global `mpmath.mp.dps`.
|
|
135
|
+
|
|
136
|
+
- RACE (`product_integral`), after two adversarial audits (47 confirmed defects,
|
|
137
|
+
all regression-tested):
|
|
138
|
+
- a-priori validity check of the contour closure (Gamma orders and scale ratio);
|
|
139
|
+
- existence check of the integral, with asymptotic phases for equal frequencies;
|
|
140
|
+
- exact representation of inputs near lattice points;
|
|
141
|
+
- a stopping rule guarded by the terms' a-priori peak;
|
|
142
|
+
- cancellation-compensated precision;
|
|
143
|
+
- Wynn epsilon only for alternating series;
|
|
144
|
+
- Richardson-extrapolated pole collisions;
|
|
145
|
+
- honest `error_estimate`.
|
|
146
|
+
- B0/C0 cancellation at extreme kinematics (certification), C0 ZeroDivisionError at
|
|
147
|
+
regular points, massless D=3 bubble, sunset edge cases, `mellin_numeric` checks.
|
|
148
|
+
- Round 3:
|
|
149
|
+
- sunset functions rewritten (scaling, factored Kallen functions, normalised
|
|
150
|
+
and error-checked quadrature, certification); accurate at threshold and for
|
|
151
|
+
scales 1e-12..1e12;
|
|
152
|
+
- C0 with IR-finite massless internal lines;
|
|
153
|
+
- exact C0 at s = 0;
|
|
154
|
+
- non-finite inputs rejected;
|
|
155
|
+
- RACE: Gamma-argument offsets in the peak estimate (second peak for large v),
|
|
156
|
+
exact sizing of decimal-string inputs, strip edges from raw parameters.
|
|
157
|
+
|
|
158
|
+
### Withdrawn (raise `NotImplementedError`; see AUDIT.md)
|
|
159
|
+
- `FeynmanMoBSolver.massive_sunset_residue`, `solve_massive_sunset`,
|
|
160
|
+
`solve_graph_polynomials`, `solve_P126`, `solve_triangle3L`,
|
|
161
|
+
`solve_elliptic_kite`, `solve_double_box_inv`.
|
|
162
|
+
- `RamanujanContinuationEngine.sunset_real_dispersion`, `evaluate_minkowski_residues`.
|
|
163
|
+
- `HypergeometricConvergenceFilter.compute_p126_*`.
|
|
164
|
+
- `MoBDynamicEngine.stage_D_dynamic_evaluation` (it returned 0).
|
|
165
|
+
|
|
166
|
+
### Changed
|
|
167
|
+
- Default `precision` of the legacy classes is now 30 (was 100). Results no
|
|
168
|
+
longer depend on it.
|
|
169
|
+
- RACE methods raise exceptions instead of returning error strings.
|
|
170
|
+
- `matplotlib`, `scipy` and `pySecDec` are no longer runtime dependencies.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: >-
|
|
3
|
+
If you use ramanujan-qft, please cite it as below, and please also cite the
|
|
4
|
+
original methods it implements (see docs/PRIOR_ART.md).
|
|
5
|
+
title: "ramanujan-qft: Ramanujan's Master Theorem, Mellin residue summation and arbitrary-precision Feynman integrals"
|
|
6
|
+
version: 0.3.0a4
|
|
7
|
+
license: MIT
|
|
8
|
+
authors:
|
|
9
|
+
- given-names: Reetamshu
|
|
10
|
+
repository-code: "https://github.com/reetanshuh1998/Ramanujan_master_theorem"
|
|
11
|
+
url: "https://reetanshuh1998.github.io/Ramanujan_master_theorem/"
|
|
12
|
+
keywords:
|
|
13
|
+
- Ramanujan's Master Theorem
|
|
14
|
+
- Mellin transform
|
|
15
|
+
- Feynman integrals
|
|
16
|
+
- arbitrary precision
|
|
17
|
+
- mpmath
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
The aim is a reproducible scientific package built around Ramanujan and Mellin
|
|
4
|
+
methods. Read [the capability table](docs/CAPABILITIES.md) and
|
|
5
|
+
[the release plan](docs/RELEASE_PLAN.md) before proposing extensions.
|
|
6
|
+
|
|
7
|
+
## Development
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
python -m pip install -e ".[test]"
|
|
11
|
+
python -m pytest -q -m "not slow"
|
|
12
|
+
python -m pytest -q # includes slow independent quadrature
|
|
13
|
+
python tools/audit_sunset.py --output /tmp/sunset_audit.json
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
On Windows, choose a writable output path instead of `/tmp/sunset_audit.json`.
|
|
17
|
+
Release tooling and documentation builds use Python 3.12; the numerical
|
|
18
|
+
package supports Python 3.9 and later.
|
|
19
|
+
|
|
20
|
+
Browser-console changes must pass `tools/check_browser_console.py` against the
|
|
21
|
+
built documentation with its bundled wheel. The documentation workflow installs
|
|
22
|
+
Playwright/Chromium and runs this check before deployment. To run it locally:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
python -m pip install "playwright>=1.50,<2"
|
|
26
|
+
python -m playwright install chromium
|
|
27
|
+
python tools/check_browser_console.py --site docs/_build/html
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The check needs network access to Pyodide's CDN. It executes the visible examples,
|
|
31
|
+
independent numerical assertions, Reset, and the custom dependency-wheel path.
|
|
32
|
+
|
|
33
|
+
Keep maintained examples in `examples/`, benchmarks in `benchmarks/`, and
|
|
34
|
+
regression tests with their reference fixtures in `tests/`. Download external
|
|
35
|
+
tools into ignored build directories. Do not commit generated comparison runs,
|
|
36
|
+
compiled binaries, downloaded papers or unreviewed benchmark claims. The fixed
|
|
37
|
+
`benchmarks/data/sunset_audit.json` report is intentional validation evidence.
|
|
38
|
+
|
|
39
|
+
## Scientific changes
|
|
40
|
+
|
|
41
|
+
Include the integral's normalization and domain, a derivation with primary
|
|
42
|
+
references, and an independent numerical or analytic reference. A nonsingular
|
|
43
|
+
exponent matrix alone does not establish convergence. Document pole collisions,
|
|
44
|
+
error controls and resource limits. Keep distinct evaluation methods visible
|
|
45
|
+
in the API and returned diagnostics; do not add silent quadrature fallbacks.
|
|
46
|
+
|
|
47
|
+
For a bug, provide the smallest reproducing graph or function call, exact input
|
|
48
|
+
strings, requested precision, installed version, actual result and independent
|
|
49
|
+
expected value with its provenance. Add a regression test when fixing it.
|
|
50
|
+
|
|
51
|
+
Tests should establish scientific behavior, numerical robustness or public API
|
|
52
|
+
contracts. Timing measurements should include hardware/software versions,
|
|
53
|
+
precision and a matched accuracy target. Avoid unconditional speed claims.
|
|
54
|
+
|
|
55
|
+
## Pull requests and releases
|
|
56
|
+
|
|
57
|
+
Describe the mathematical or numerical problem, resulting behavior, limitations
|
|
58
|
+
and validation. The [scientific review packet](docs/SCIENTIFIC_REVIEW.md) lists
|
|
59
|
+
open review questions for the new backends. Keep the fixed audit seed and record
|
|
60
|
+
source hashes when regenerating benchmark data.
|
|
61
|
+
|
|
62
|
+
Only maintainers publish releases. The [release checklist](docs/RELEASING.md)
|
|
63
|
+
separates local preparation, hosted CI, external scientific review and public
|
|
64
|
+
publication. Cite both the software version and the original methods.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 In memory of Ramanujan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include LICENSE
|
|
3
|
+
include CHANGELOG.md
|
|
4
|
+
include CITATION.cff
|
|
5
|
+
include CONTRIBUTING.md
|
|
6
|
+
include AUDIT.md
|
|
7
|
+
include THIRD_PARTY_NOTICES.md
|
|
8
|
+
recursive-include ramanujan_qft *.py
|
|
9
|
+
recursive-include tests *.py *.csv *.json
|
|
10
|
+
recursive-include tools *.py
|
|
11
|
+
recursive-include notebooks *.ipynb
|
|
12
|
+
recursive-include examples *.py *.txt *.rst
|
|
13
|
+
recursive-include benchmarks *.py *.sh *.F
|
|
14
|
+
recursive-include docs *.md *.py *.txt *.css *.html *.js
|
|
15
|
+
prune docs/_build
|
|
16
|
+
prune docs/auto_examples
|
|
17
|
+
prune benchmarks/looptools/_build
|
|
18
|
+
include benchmarks/data/sunset_audit.json
|
|
19
|
+
include benchmarks/data/release_comparison.json
|
|
20
|
+
include benchmarks/data/sunset_budgets.json
|