W5 · Phase 8B profiling half: SEARCHES_BIJECTOR arm, bijector_ab driver with pre-registered F1–F5, A100 array (#162) - #172
Merged
Conversation
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)
…2 state Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EDABYoH6giHXhFJUks8yd6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Profiling half of #162 (library half: PyAutoFit #1525, merged). Closes #162 on harvest of the A100 array.
_samplers.py—SEARCHES_BIJECTOR ∈ {none, auto_log, log_reg, logit}→af.BijectorNone / BijectorAuto / BijectorPerPath (log on regularization coefficients) / BijectorLogit, passed asbijector=to MultiStart; composed intomulti_start_unique_tag(a bijector arm would otherwise resume the identity arm's.completedfit);SEARCHES_LANE_HISTORY=1andSEARCHES_TRACE_PARAMSforward the new PyAutoFit diagnostics;_per_lane.pywrites 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, finald) and the pre-registered F1–F5 scorer (F1/F3 scored perlog_det_methodtier, 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.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 --checkclean;build_readme --checkclean. Laptop smoke:knn× {none,log_reg} (4 starts × 20 steps, CPU fp64) → distinct output dirs (n4_s20_seed0vsn4_s20_seed0_bij_log_reg) and JSONs,sampler_config.bijectorrecorded,lane_value_nan_history/lane_grad_nan_historypresent, all lanes alive. The live--score --smokewas not exercised on those two rows (they were cleaned up before being moved underphase8b/); 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