Skip to content

Releases: apiprdt/PhysicsPaper

ADCD v3.0.0

Choose a tag to compare

@apiprdt apiprdt released this 24 Jun 22:13

ADCD v3.0.0 — Submission-ready

DOI
License: MIT
Python 3.10+

Science rarely discovers from a blank slate — it corrects.
ADCD automates the step between anomaly and theory correction: given a classical law and data that disagrees with it, it searches for the minimal physically-valid correction term Δ — passing every candidate through dimensional, asymptotic, and complexity gates before a single parameter is ever fit.

This is the official code repository for Anomaly-Driven Correction Discovery (ADCD), a physics-informed symbolic regression framework designed to mimic the evolutionary nature of scientific discovery. Rather than learning entire equations from scratch, ADCD takes a known classical physical law and seeks to discover the mathematical structure of the dimensionless correction term (Δ) that explains the discrepancy between classical predictions and anomalous experimental observations.


🆕 What's New in v3.0.0

This is a submission-ready release accompanying the arXiv preprint. It bundles a substantial research expansion over v2.1.3:

Scientific content

  • SPARC MOND capstone — Radial Acceleration Relation fitting on 175 disk galaxies with cross-validation parity, cluster bootstrap validation, and direct comparison to McGaugh et al. (2016).
  • Cosmological probes — New experiments on the $f\sigma_8$ growth-rate tension (Alestas et al. 2022) and cosmic chronometer Hubble data.
  • Wide-binary appendix — Feasibility study referencing Chae (2023), Banik et al. (2024), and Pittordis & Sutherland (2023).
  • EFT framing — New discussion positioning ADCD's correction terms within the Effective Field Theory tradition (Weinberg 1979; Georgi 1993; Kaplan 1995).
  • Structural dichotomy paragraph articulating ADCD's unique contribution vs. from-scratch symbolic regression.

Methodology & fairness

  • Fair PySR comparison — Cross-validation parity (same folds, same noise profiles), generous time budget, and cluster bootstrap confidence intervals. ADCD outperforms PySR by +77.8 percentage points at 5% noise.
  • Multi-seed reproducibility — 5–16 seeds across all 9 scenarios × 4 noise levels, with a guard script (scripts/verify_paper_claims.py) that fails loudly if any headline number drifts.

Repo & paper hygiene

  • Full reproducibility stackreproduce_all.{ps1,sh} scripts, frozen random seeds, and per-claim JSON output cross-checks.
  • Clean source tree — Removed scratch/debug scripts, build artifacts, intermediate JSONs, log files, and PNG duplicates. The repo now contains only paper source, package code, tests, and data.
  • AI use disclosure — Transparency statement in the paper Acknowledgments.
  • Hardened metadata — DOI, version, and license wired into .zenodo.json, CITATION.cff, and pyproject.toml.

⚡ Key Features

  • Correction-First Paradigm — Starts from a known classical law, not a blank slate. Focuses the search space on the discrepancy Δ between theory and experiment.
  • Cascaded Physics Gates — AST complexity, dimensional homogeneity, transcendental guardrails, and asymptotic consistency (ARC) gates screen out unphysical candidates before running parameter-fitting.
  • JAX-Traced L-BFGS-B Optimizer — Highly optimized parameter-scaled differentiable fitting with multi-restart log-uniform initialization.
  • BIC Model Selection — Employs the Bayesian Information Criterion (BIC) to rank models, favoring simpler physical theories over overly complex numerical fits.
  • Residual Feature Intelligence — Extracts mathematical features (monotonicity, curvature, oscillation, decay) from residuals to bias proposal templates.
  • Phase 2: Multivariable Discovery — Buckingham Π group decomposition + per-variable Sequential ARC + variance-factorization separability detection for multi-input physical laws.
  • Real-World Validated — Successfully identifies correct structural classes on Mercury's perihelion (GR), Lamb Shift (QED), Muon g-2 (Schwinger), and Blackbody (Planck).

📚 Key References

ADCD builds on and extends the symbolic-regression and physics-informed discovery tradition. The foundational works most directly related to this project:

  • Udrescu & Tegmark (2020)AI Feynman [Sci. Adv. 6(16)]. Physics-inspired symbolic regression. — udrescu2020ai
  • Cranmer (2020)PySR [arXiv:2007.03738]. Primary baseline for fair comparison in this work. — cranmer2020pysr
  • Schmidt & Lipson (2009)Distilling free-form natural laws [Science 324]. Foundational symbolic regression. — schmidt2009distilling
  • Brunton, Proctor & Kutz (2016)SINDy [PNAS 113(15)]. Sparse identification of governing equations. — brunton2016sindy
  • Tenachi, Ibata & Diakogiannis (2023)PhySO [ApJ 959(2)]. Dimensional-constraint-guided deep symbolic regression. — tenachi2023physo

The complete bibliography (34 references) is available in paper/main.tex.


📦 Download this release

Artifact Contents Size
Source code (adcd-v3.0.0.zip) Full repository: package + tests + paper + data ~2.3 MB
arXiv paper source (adcd-paper-source-v3.0.0.tar.gz) LaTeX + figures + generated tables (flat) ~1.9 MB
Paper PDF (paper/main.pdf) Compiled manuscript

📖 Citing This Work

If you use ADCD in your research, please cite:

@software{erdita2026adcd,
  author    = {Erdita, Muhammad Afif},
  title     = {{Anomaly-Driven Correction Discovery (ADCD): Physics-Constrained
                Symbolic Regression for Evolutionary Scientific Discovery}},
  year      = {2026},
  publisher = {Zenodo},
  version   = {3.0.0},
  doi       = {10.5281/zenodo.20534940},
  url       = {https://doi.org/10.5281/zenodo.20534940}
}

Full Changelog: v2.1.3...v3.0.0

ADCD v2.2.1 — SPARC MOND validation

Choose a tag to compare

@apiprdt apiprdt released this 20 Jun 03:31

Changelog

All notable changes to ADCD will be documented in this file.
Format follows Keep a Changelog.
This project adheres to Semantic Versioning.


[2.2.1] — 2026-06-20

Added

  • SPARC MOND validation: rigorous galaxy-level cross-validation (10 repeated 50/50 train/test splits), 50-resample bootstrap parameter CIs, and three-tier quality-cut robustness study on the SPARC sample
  • Bootstrap CI table (tab_sparc_bootstrap.tex) with display symbols $\theta_0$, $\theta_1$ rendered in canonical order
  • Paper text: parameter-degeneracy discussion (deep-MOND $\hat\theta_0\sqrt{\hat\theta_1}$ invariance) added to bootstrap and robustness sections to explain the wide $\hat\theta_0$ CI

Changed

  • Lelli et al. SPARC citation corrected: The Astrophysical Journal 836:152 (2017) → The Astronomical Journal 152:157 (2016); dropped non-author Pawlowski and aligned .bib entry
  • Lint/format config aligned: [tool.black] line-length raised 100 → 120 to match .flake8 max-line-length; removed redundant [tool.flake8] block from pyproject.toml
  • Version strings synced to 2.2.1 across README.md, CITATION.cff, .zenodo.json, docs/index.md, docs/paper.md (previously a mix of 2.1.3 / 2.2.0)
  • Test counts updated 95/77 → 116 in README badge, project structure, docs hero stats, and installation guide
  • Docs hero stat corrected: stale "+44.5 pp over PySR" → +77.8 pp (the value used everywhere else)

Fixed

  • CI lint gate: 7 flake8 errors in src/adcd/experiments/sparc_robustness.py (unused imports pandas, stack_sparc_galaxies, nu_standard_mond, jnp; unused expr/theta_symbols/jax_fn bindings; missing whitespace after keyword on two print(...) calls); CI lint step now passes clean
  • scripts/generate_sparc_tables.py: bootstrap row symbols now map theta_r1_0/theta_r1_1$\theta_0$/$\theta_1$ and sort by trailing index instead of lexicographic order

ADCD v2.2.0

Choose a tag to compare

@apiprdt apiprdt released this 20 Jun 00:38

ADCD v2.2.0 — Phase 2 Multivariable Correction Discovery

Physics-constrained symbolic regression that discovers correction terms
rather than learning equations from scratch.

What's new (Phase 2 — Multivariable Discovery)

  • 🧩 Buckingham Π group engine (buckingham_pi.py): nullspace-based dimensional Π-group generator
  • 📐 Sequential ARC (sequential_arc.py): per-variable asymptotic-limit gate
  • 🔬 Residual Factorizer v2 (residual_factorizer_v2.py): variance-decomposition separability detection
  • 🎯 Multivariable Orchestrator (multivar_orchestrator.py): end-to-end multi-input correction search
  • 📊 Phase 2 benchmark: 2/4 multivariable scenarios solved (Yukawa Mass-Ratio, Turbulent Drag)

Headline results

Benchmark Result
9-scenario (seed=42) 94.4% structural recovery
5-seed multi-seed (Tier B+) 82.8% ± 7.7%
vs PySR fair @ 5% noise 88.9% vs 11.1% (77.8 pp gap)
Real-world 4/4 structural (Mercury, Lamb Shift, Muon g-2, Blackbody)

Links

Full Changelog: v2.1.3...v2.2.0

ADCD v2.1.3

Choose a tag to compare

@apiprdt apiprdt released this 11 Jun 08:59

ADCD v2.1.3 — Submission-ready paper polish

  • Evaluation regimes disclosure (Primary Mock 5-seed / Supplementary Hybrid / Real-world)
  • Fresh Tier B+ benchmarks: 82.8% ± 7.7% mean structural recovery
  • PySR fair gap fix: 77.8 pp at 5% noise (abstract + body consistent)
  • Related Work: PhySO + LaSR (v2.1.1)
  • verify_paper_claims.py all claims pass

See CHANGELOG.md for full details.

ADCD v2.1.2

Choose a tag to compare

@apiprdt apiprdt released this 11 Jun 01:09

Changelog

All notable changes to ADCD will be documented in this file.
Format follows Keep a Changelog.
This project adheres to Semantic Versioning.


[2.1.2] — 2026-06-10

Added

  • docs/SUBMISSION_CHECKLIST_v2.1.2.md: step-by-step GitHub Release, Zenodo, and arXiv submission guide
  • scripts/verify_paper_claims.py: PySR fair 77.8 pp gap guard at 5% noise

Changed

  • Paper narrative polish (8/10 path): evaluation regimes paragraph (Primary / Supplementary / Real-world); quantitative claims reframed (structural lead, Blackbody NMSE qualifier); ARC collective-filter framing aligned with ablation
  • Multi-seed benchmark refreshed (Tier B+): mean structural recovery 82.8% ± 7.7% (was 81.1% ± 10.3% on pre-fix pipeline)
  • Abstract PySR comparison corrected to 77.8 percentage-point gap vs PySR fair at 5% noise (was incorrectly 44.4 pp from legacy fast profile)
  • README PySR table updated to fair profile; Mercury NMSE corrected to $1.11 \times 10^{-5}$

Fixed

  • LaTeX table generators: tab_pysr_config.tex row endings (\\\\); tab_pulsar_sensitivity.tex underscore escaping and math mode
  • gate_telemetry.json refreshed via run_correction_discovery.py --proposer mock

[2.1.1] — 2026-06-10

Added

  • Related Work: PhySO (Tenachi et al. 2023) and LaSR (Grayeli et al. 2024) positioning paragraphs
  • hybrid_seed42_results.json: frozen Hybrid Proposer benchmark (33/36 = 91.7% at seed=42)
  • docs/ZENODO_RELEASE_v2.1.0.md, docs/GITHUB_RELEASE_v2.1.0.md

Changed

  • Paper tone: prunefilter, guaranteescreen with dimensional-relaxation qualifier (\Cref{sec:limitations})
  • Package version synced to 2.1.0 in pyproject.toml and __init__.py
  • reproduce_all.ps1: step 8 replaced with pytest tests/test_real_data.py -k mercury

Fixed

  • Paper statistics aligned with frozen reproducibility_results.json (seed disclosure, per-seed rates)
  • Binary pulsar framing: sensitivity study separated from main 4/4 real-world headline

[2.1.0] — 2026-06-09

Added

  • Binary pulsar v2.1 reduced-variable benchmark (fixed M, a, e; varying P) with Peters prefactor helper
  • run_binary_pulsar_sensitivity.py: P_only / P_e / P_e_M / full variant study for reviewer-facing ablation
  • scripts/generate_real_world_tables.py: auto-generates parameter recovery, template leakage, and sensitivity LaTeX tables
  • tests/test_metrics_scale.py: guards against scale-adaptive NMSE regressions on sub-nano residuals

Changed

  • Real-world reporting now separates structural (5/5), quantitative NMSE $< 10^{-4}$ (3/5), and optimizer convergence (2/5)
  • evaluate_correction: SymPy lambdify evaluation replaces fragile eval() string substitution
  • Stage-2 BIC reranking uses post-hoc validated NMSE from evaluate_correction, not optimizer-internal scores

Fixed

  • Scale-adaptive NMSE in jax_optimizer.py and metrics.py (fixed $\varepsilon=10^{-10}$ floor caused false convergence on binary pulsar data $\sim 10^{-15}$)
  • Binary pulsar false positive: degenerate $\theta_0\to 0$ models no longer win BIC with NMSE $= 1.0$ while class_match=true

[2.0.0] — 2026-06-08

Added

  • Parameter-scaled L-BFGS-B optimizer (jax_optimizer.py): each restart now normalises variables to O(1) by dividing by their initial values, completely eliminating gradient underflow on extreme-scale parameters (e.g. G = 6.67e-11)
  • Mixed log-uniform initialisation: 50/50 blend of narrow [-6, 6] and wide [-20, 20] exponent ranges for better coverage of both standard and astrophysical/quantum scales
  • loss_mode='auto' with dynamic-range threshold 1e4: high-DR scenarios (e.g. Blackbody, DR ≈ 7.1e4) automatically switch to full-reconstruction loss; all 9 standard scenarios remain on residual loss
  • Negative power-law templates added to CorrectionMockProposer: -(θ₀/v₁)⁴, -(θ₀/v₁)^θ₁, θ₀(θ₁/v₁)⁴ − 1, -(θ₀/v₁)^θ₁ + θ₂ — fixes Net Radiation 4/4 discovery
  • Degenerate exponent detection in classify_structure: power-law expressions where θ ≈ 1.0 are reclassified as polynomial, avoiding false class mismatches on Muon g-2
  • AST node-count tie-breaker in BIC sort (correction_orchestrator.py): prefers structurally simpler expressions when BIC scores are equal
  • n_restarts = 15 (up from 5) in JAXOptimizer for improved global search coverage
  • 58 automated unit tests covering all pipeline gates, optimizer, proposer, and public API
  • run_real_data_benchmark.py extended with Mercury Perihelion, Lamb Shift, Muon g-2, and Blackbody scenarios
  • run_reproducibility.py multi-seed study: 5 seeds × 9 scenarios × 4 noise levels = 180 runs

Changed

  • DYNAMIC_RANGE_THRESHOLD raised from 1e31e4 (prevents Screened Coulomb 5%/10% regression)
  • MockProposer now injects theta_0 * {v1} / {const} templates in physical-constant injection phase
  • Benchmark table in README.md corrected to use actual scenario names (previously listed wrong scenario names)
  • .gitignore updated: ignores scratch/, scratch_*, baseline_pre_fix.json, *.zip, *.tar.gz

Fixed

  • Net Radiation (0/4 → 4/4): negative power-law correction -(T_env/T)⁴ now discovered reliably at all noise levels
  • Screened Coulomb 5%/10% regression: dynamic-range threshold fix restores residual loss mode for standard scenarios
  • Blackbody structural match: loss_mode='auto' correctly switches to full-reconstruction loss for DR ≈ 7.1e4

[1.1.0] — 2026-06-04

Added

  • src/adcd/ installable package structure with __init__.py public API
  • pyproject.toml for PEP 517/518 build system (pip install adcd)
  • GitHub Actions CI workflow: test suite on Python 3.10 + 3.11, LaTeX paper compilation
  • GitHub Actions publish workflow: Trusted Publishing to PyPI on release
  • CONTRIBUTING.md, CODE_OF_CONDUCT.md, issue/PR templates
  • LICENSE (MIT)
  • CHANGELOG.md (this file)

Changed

  • All internal imports migrated from from src.X to from adcd.X
  • README.md updated with installation badge, Quick Start, and BibTeX citation

Fixed

  • Overclaims corrected in paper: "guarantees" → "strongly enforces"; ARC/gate individual ablation clarified; timing claim removed
  • Author email [email protected] added to paper and Zenodo metadata

[1.0.0] — 2026-06-04 (Initial Zenodo Release)

Added

  • Full ADCD discovery pipeline: AST complexity gate → dimensional checker → transcendental guardrail → ARC asymptotic gate → JAX L-BFGS-B optimizer → BIC reranker
  • 9-scenario benchmark suite: Relativistic KE, Yukawa Gravity, Anharmonic Spring, Screened Coulomb, Net Radiation, Nonlinear Drag, Mystery-A, Mystery-B, Mystery-C
  • PySR baseline comparison (22.2–66.7% vs ADCD 88.9–100%)
  • MLP baseline comparison (NMSE: 8.56e-5 at 0% noise vs ADCD 5.51e-12)
  • Blind generalization test: Van der Waals, Stokes-Einstein, Wien displacement
  • Ablation study: gates, BIC reranking
  • LaTeX paper with full reproducibility data
  • Zenodo DOI: 10.5281/zenodo.20534940

ADCD v2.1.0

Choose a tag to compare

@apiprdt apiprdt released this 10 Jun 13:07

Changelog

All notable changes to ADCD will be documented in this file.
Format follows Keep a Changelog.
This project adheres to Semantic Versioning.


[2.1.0] — 2026-06-09

Added

  • Binary pulsar v2.1 reduced-variable benchmark (fixed M, a, e; varying P) with Peters prefactor helper
  • run_binary_pulsar_sensitivity.py: P_only / P_e / P_e_M / full variant study for reviewer-facing ablation
  • scripts/generate_real_world_tables.py: auto-generates parameter recovery, template leakage, and sensitivity LaTeX tables
  • tests/test_metrics_scale.py: guards against scale-adaptive NMSE regressions on sub-nano residuals

Changed

  • Real-world reporting now separates structural (5/5), quantitative NMSE $< 10^{-4}$ (3/5), and optimizer convergence (2/5)
  • evaluate_correction: SymPy lambdify evaluation replaces fragile eval() string substitution
  • Stage-2 BIC reranking uses post-hoc validated NMSE from evaluate_correction, not optimizer-internal scores

Fixed

  • Scale-adaptive NMSE in jax_optimizer.py and metrics.py (fixed $\varepsilon=10^{-10}$ floor caused false convergence on binary pulsar data $\sim 10^{-15}$)
  • Binary pulsar false positive: degenerate $\theta_0\to 0$ models no longer win BIC with NMSE $= 1.0$ while class_match=true

[2.0.0] — 2026-06-08

Added

  • Parameter-scaled L-BFGS-B optimizer (jax_optimizer.py): each restart now normalises variables to O(1) by dividing by their initial values, completely eliminating gradient underflow on extreme-scale parameters (e.g. G = 6.67e-11)
  • Mixed log-uniform initialisation: 50/50 blend of narrow [-6, 6] and wide [-20, 20] exponent ranges for better coverage of both standard and astrophysical/quantum scales
  • loss_mode='auto' with dynamic-range threshold 1e4: high-DR scenarios (e.g. Blackbody, DR ≈ 7.1e4) automatically switch to full-reconstruction loss; all 9 standard scenarios remain on residual loss
  • Negative power-law templates added to CorrectionMockProposer: -(θ₀/v₁)⁴, -(θ₀/v₁)^θ₁, θ₀(θ₁/v₁)⁴ − 1, -(θ₀/v₁)^θ₁ + θ₂ — fixes Net Radiation 4/4 discovery
  • Degenerate exponent detection in classify_structure: power-law expressions where θ ≈ 1.0 are reclassified as polynomial, avoiding false class mismatches on Muon g-2
  • AST node-count tie-breaker in BIC sort (correction_orchestrator.py): prefers structurally simpler expressions when BIC scores are equal
  • n_restarts = 15 (up from 5) in JAXOptimizer for improved global search coverage
  • 58 automated unit tests covering all pipeline gates, optimizer, proposer, and public API
  • run_real_data_benchmark.py extended with Mercury Perihelion, Lamb Shift, Muon g-2, and Blackbody scenarios
  • run_reproducibility.py multi-seed study: 5 seeds × 9 scenarios × 4 noise levels = 180 runs

Changed

  • DYNAMIC_RANGE_THRESHOLD raised from 1e31e4 (prevents Screened Coulomb 5%/10% regression)
  • MockProposer now injects theta_0 * {v1} / {const} templates in physical-constant injection phase
  • Benchmark table in README.md corrected to use actual scenario names (previously listed wrong scenario names)
  • .gitignore updated: ignores scratch/, scratch_*, baseline_pre_fix.json, *.zip, *.tar.gz

Fixed

  • Net Radiation (0/4 → 4/4): negative power-law correction -(T_env/T)⁴ now discovered reliably at all noise levels
  • Screened Coulomb 5%/10% regression: dynamic-range threshold fix restores residual loss mode for standard scenarios
  • Blackbody structural match: loss_mode='auto' correctly switches to full-reconstruction loss for DR ≈ 7.1e4

[1.1.0] — 2026-06-04

Added

  • src/adcd/ installable package structure with __init__.py public API
  • pyproject.toml for PEP 517/518 build system (pip install adcd)
  • GitHub Actions CI workflow: test suite on Python 3.10 + 3.11, LaTeX paper compilation
  • GitHub Actions publish workflow: Trusted Publishing to PyPI on release
  • CONTRIBUTING.md, CODE_OF_CONDUCT.md, issue/PR templates
  • LICENSE (MIT)
  • CHANGELOG.md (this file)

Changed

  • All internal imports migrated from from src.X to from adcd.X
  • README.md updated with installation badge, Quick Start, and BibTeX citation

Fixed

  • Overclaims corrected in paper: "guarantees" → "strongly enforces"; ARC/gate individual ablation clarified; timing claim removed
  • Author email [email protected] added to paper and Zenodo metadata

[1.0.0] — 2026-06-04 (Initial Zenodo Release)

Added

  • Full ADCD discovery pipeline: AST complexity gate → dimensional checker → transcendental guardrail → ARC asymptotic gate → JAX L-BFGS-B optimizer → BIC reranker
  • 9-scenario benchmark suite: Relativistic KE, Yukawa Gravity, Anharmonic Spring, Screened Coulomb, Net Radiation, Nonlinear Drag, Mystery-A, Mystery-B, Mystery-C
  • PySR baseline comparison (22.2–66.7% vs ADCD 88.9–100%)
  • MLP baseline comparison (NMSE: 8.56e-5 at 0% noise vs ADCD 5.51e-12)
  • Blind generalization test: Van der Waals, Stokes-Einstein, Wien displacement
  • Ablation study: gates, BIC reranking
  • LaTeX paper with full reproducibility data
  • Zenodo DOI: 10.5281/zenodo.20534940