Skip to content

W5 · Phase 8B profiling half: SEARCHES_BIJECTOR arm, bijector_ab driver with pre-registered F1–F5, A100 array (#162) - #172

Merged
Jammy2211 merged 5 commits into
mainfrom
feature/w5-bijector-ab
Aug 25, 2026
Merged

W5 · Phase 8B profiling half: SEARCHES_BIJECTOR arm, bijector_ab driver with pre-registered F1–F5, A100 array (#162)#172
Jammy2211 merged 5 commits into
mainfrom
feature/w5-bijector-ab

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Summary

Profiling half of #162 (library half: PyAutoFit #1525, merged). Closes #162 on harvest of the A100 array.

  • _samplers.pySEARCHES_BIJECTOR ∈ {none, auto_log, log_reg, logit}af.BijectorNone / BijectorAuto / BijectorPerPath (log on regularization coefficients) / BijectorLogit, passed as bijector= to MultiStart; composed into multi_start_unique_tag (a bijector arm would otherwise resume the identity arm's .completed fit); SEARCHES_LANE_HISTORY=1 and SEARCHES_TRACE_PARAMS forward the new PyAutoFit diagnostics; _per_lane.py writes them to the results JSON.
  • bijector_ab.py — 39-arm table (delaunay_adapt_split {cholesky, slogdet}×{none, log_reg}×5 seeds; knn {none, log_reg}×5 + logit×5; MGE byte-identity control {none, log_reg}×2), subprocess runner, per-lane readouts (first value-NaN step + coefficient, λ trajectories, steps-to-reference, deaths/resurrections, clip rate, fraction of steps at λ>1e4, final d) and the pre-registered F1–F5 scorer (F1/F3 scored per log_det_method tier, never pooled; refuses mixed log-det/tier rows). Two new leaf scripts (mge.py, delaunay_adapt_split.py).
  • hpc/batch_gpu/submit_phase8b_bijector_a100 — 39-task array, 30 min each (~2.7 A100-h). Not submitted.
  • README env notes; phase_08_regularization/RESULTS.md "8B — pre-registration"; PROGRAMME 8B row (and the Phase 1 row corrected to "shipped, W4").

Verification

pytest scripts/misc/test: 162 passed, 1 failed (test_hazards_prior_exit — worktree-layout artefact, passes on the canonical checkout); ruff check/format --check clean; build_readme --check clean. Laptop smoke: knn × {none, log_reg} (4 starts × 20 steps, CPU fp64) → distinct output dirs (n4_s20_seed0 vs n4_s20_seed0_bij_log_reg) and JSONs, sampler_config.bijector recorded, lane_value_nan_history / lane_grad_nan_history present, all lanes alive. The live --score --smoke was not exercised on those two rows (they were cleaned up before being moved under phase8b/); the scorer is covered by the synthetic-pair unit tests (F4 byte-identity, F5 trip).

🤖 Generated with Claude Code

https://claude.ai/code/session_01EDABYoH6giHXhFJUks8yd6

Jammy2211 and others added 5 commits August 24, 2026 18:35
Adds SEARCHES_BIJECTOR (none/auto_log/log_reg/logit) resolution and object
construction to _samplers.py, composing it into multi_start_unique_tag so a
bijector arm never resumes another arm's .completed fit (mirrors the
clipper/scaler/positions pattern). log_reg resolves to af.BijectorPerPath
restricted to LogUniform-backed "regularization." paths via a throwaway
probe model (_setup._build_model), so no model needs to be threaded through
SAMPLER_BUILDERS and _runner.py/_setup.py stay untouched.

Also wires SEARCHES_LANE_HISTORY -> record_lane_nan_history and
SEARCHES_TRACE_PARAMS -> trace_param_indices (PyAutoFit PR#1525), and
extends _per_lane.per_lane_block to forward the resulting
lane_value_nan_history / lane_grad_nan_history / trace_history /
trace_param_indices arrays into the results JSON diagnostics block (needed
for bijector_ab.py's readouts; previously silently dropped).

New: bijector_ab.py (the Phase 8B A/B driver — arm table, subprocess runner,
readouts, F1-F5 falsification scorer), two new multi_start_prodigy leaf
scripts (mge.py, delaunay_adapt_split.py) for cells with no existing
gradient-search leaf script, and test_searches_bijector.py.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EDABYoH6giHXhFJUks8yd6
delaunay_adapt_split legitimately carries both cholesky and slogdet rows in
the real campaign; score_rows previously called _group(rows, cell=
"delaunay_adapt_split") with no log_det_method, which _group's own mixed-
tier guard correctly rejects. F1 and F3 now iterate per tier and combine
conservatively (falsified if either tier falsifies), verified against a
synthetic 39-row-shaped campaign exercising every cell/tier/bijector
combination end to end.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EDABYoH6giHXhFJUks8yd6
…registration + PROGRAMME state

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EDABYoH6giHXhFJUks8yd6
…RESULTS: W7 sections then 8B pre-registration)
@Jammy2211
Jammy2211 merged commit c9b8026 into main Aug 25, 2026
1 check passed
@Jammy2211
Jammy2211 deleted the feature/w5-bijector-ab branch August 25, 2026 01:46
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.

W5 · Phase 8B: log-coordinate stepping for gradient searches (Scaler → per-parameter bijector)

1 participant