Skip to content

cortex: ep_toy_gaussian birth — NUTS vs EP ×3 on the #1405 collapse toy at N=50 - #29

Merged
Jammy2211 merged 2 commits into
mainfrom
claude/ep-toy-gaussian-birth
Sep 10, 2026
Merged

Jammy2211 merged 2 commits into
mainfrom
claude/ep-toy-gaussian-birth

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Registers a new science project in the body map and files its first task.

What the project is

ep_toy_gaussian is the graphical-ep campaign's last confidence test before scaling up:
the original toy on which the hierarchical-parameter collapse (PyAutoFit#1405) was first
found, run at N=50, with a joint JAX + BlackJAX NUTS reference, and fitted with EP
three times on identical data
. The model and every EP setting are verbatim from
PyAutoMind/complete/2026/07/ep_scale_collapse_assets/ep_toy_diagnostic.py
(DynestyStatic(nlive=100, rwalk) per factor, LaplaceOptimiser, EPHistory(kl_tol=0.05),
max_steps=20); the three repeats differ only in RNG.

Nothing has ever run this toy with a NUTS joint fit, at N=50, or with repeated EP fits on
identical data — the task file records the four distinct earlier runs the "it collapsed"
memory is a composite of, with their paths and numbers, so nobody re-derives them.

A pass on criteria 2-5 is the evidence that the D1-D6 / analytic-Gaussian fix wave
(#1465, #1558, #1560, #1562, #1572-#1576, #1578, #1580) cured #1405 on its own toy. A failure
isolates it to the Dynesty-per-factor EP path, since the analytic ensemble used Laplace factors.

CPU-only, data simulated in memory from its seed, remote: none until the human runs
gh repo create PyAutoLabs/ep_toy_gaussian --private.

The pre-registered witness

Reference = the NUTS posterior on n50_seed42; truth = the parent (50, 10) and the realised
sample statistics of the 50 drawn centres. Mirrored machine-readably as WITNESS in the
project's scripts/compare.py.

# criterion threshold
1 NUTS health 0 divergences; r-hat <= 1.01 and ESS >= 400 on parent mean and sigma; realised sample mean/std inside the NUTS 3 sigma interval
2 No collapse every EP repeat: parent sigma >= 1.0 (10% of truth) and the #1465 guard silent — PATHOLOGICAL count 0/3
3 EP-NUTS parity every repeat: |mean_EP - mean_NUTS| <= 2 sigma_NUTS(mean) and |sigma_EP - sigma_NUTS| <= 2 sigma_NUTS(sigma)
4 EP self-agreement max pairwise spread across the 3 repeats <= 1 sigma_NUTS, for parent mean and for sigma
5 Honest widths every repeat: sigma_EP / sigma_NUTS within [1/3, 3] on parent mean and sigma — BIASED-TIGHT count 0/3
6 Per-dataset centres >= 95% of the 50 centres within 3 sigma_NUTS of the NUTS median, in every repeat
7 EP flag health no factor ends any repeat with zero SUCCESS updates; no CRASH; no NaN RuntimeWarning

Deliverable: results/n50_seed42/summary.json + comparison.md, committed in the project.
A missed criterion is a finding to rule on, never a number to relax.

Contents

  • projects.yaml — new active row ep_toy_gaussian, cloned from analytic_gaussian.
  • tasks/ep_toy_gaussian/nuts_vs_ep_x3_n50.md — State: ready, Epic: graphical-ep,
    Budget: 24:00. Submission is a separate step; no run lines yet.
  • dashboard.md / dashboard.html regenerated (cortex dashboard --check current).

python3 scripts/cortex.py check prints cortex check: OK.

Why a human merges this

projects.yaml is code, not ledger — local_path and sync_cli are paths a conductor will
execute under. python3 scripts/ledger_merge.py classify --base origin/main says
code: 1 of 4 path(s) need a human — projects.yaml, so ledger_merge.yml will correctly leave
this branch for review rather than auto-merging it.

🤖 Generated with Claude Code

https://claude.ai/code/session_018uj47GfPHkyG7rz2J2Yna3

Jammy2211 and others added 2 commits September 10, 2026 17:08
…toy at N=50

Registers the science project `ep_toy_gaussian` in the body map and files its
first task, `nuts_vs_ep_x3_n50` (State: ready, awaiting submission).

- projects.yaml: new active row cloned from analytic_gaussian (remote none,
  CPU-only, partition ral, assistant autofit_assistant).
- tasks/ep_toy_gaussian/nuts_vs_ep_x3_n50.md: the graphical-ep campaign's last
  confidence test before scaling up — the original PyAutoFit#1405 collapse toy
  at N=50, joint BlackJAX NUTS reference vs three EP repeats on identical data,
  with a 7-criterion pre-registered witness.
- dashboards regenerated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uj47GfPHkyG7rz2J2Yna3
Submitted on RAL partition `ral` 2026-09-10 against the shared PyAuto mirror at
PyAutoFit `e354dbb6b5b1fcc375bbbc5ae5c926e229fcb04a`, which contains `08207bad0`
(#1580), so the run carries the full D1-D6 wave plus the review bundle.

- 342639 — `hpc/batch_cpu/submit_nuts`: `one_by_one.py` (50 one-parameter Dynesty
  fits, the NUTS warm start and the naive reference) then `graphical_nuts.py`
  (BlackJAX NUTS on all 52 parameters, JAX CPU fp64), 4 h limit.
- 342640_[0-2] — `hpc/batch_cpu/submit_ep`: three EP repeats of the original
  inference on identical data (Dynesty per factor, LaplaceOptimiser,
  kl_tol=0.05, max_steps=20), differing only in RNG, 24 h limit.

All four tasks confirmed running on euclid-ral-compute-10-2; the NUTS job's
one_by_one leg finished 50/50 in 318.9 s.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uj47GfPHkyG7rz2J2Yna3
@Jammy2211
Jammy2211 merged commit 97cc058 into main Sep 10, 2026
3 checks passed
@Jammy2211
Jammy2211 deleted the claude/ep-toy-gaussian-birth branch September 10, 2026 22:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant