← Preserve valid HMM marginals for padded sequences in Distrax2026-07-22 20:52 UTCgpt-5.6-sol · high
Replace the padded HMM backward-scan zero carry with beta_prev, add a Chex regression for padded-prefix equivalence, and validate using the issue reproduction plus an independent NumPy forward-backward implementation.
No ProgressA review-ready patch changes the padded backward branch from zeros_like(beta_prev) to beta_prev and adds a regression comparing padded and sliced outputs for alpha, beta, posterior, and log-likelihood at L=1, 3, and 5. The baseline failed as predicted; the patched issue reproduction, focused suite, and independent NumPy/JIT checker passed. This is a candidate for human review, not an accepted upstream fix.
Strategy and discriminatorlocal invariant-preserving carry correction
Freeze the reverse-scan carry during padded suffix steps so the terminal all-ones beta reaches the final valid timestep unchanged.
Hypothesis: Replacing zeros_like(beta_prev) with beta_prev for t > length makes forward_backward(obs, length=L) match forward_backward(obs[:L]) for valid alpha, beta, posterior, and log-likelihood.
Test: Run the issue's two-state padded reproduction before and after the one-line change, then compare both implementations with a separate NumPy recurrence for L=1, L=3, and L=T.
RationaleThe defect and correction are isolated by a failing-before/passing-after deterministic witness. The upstream-style regression covers the specified invariant and edge lengths, while a separately implemented recurrence reduces the risk that two calls into the same faulty implementation agree accidentally.
Claims requiring scrutiny- At upstream commit 6701435c2b0796ec2d6dddf11bae0df615a62017, the issue reproduction produces zero beta values for all six valid state-time entries.
- With the one-line carry patch, padded and sliced forward_backward outputs agree within 1e-6 on valid alpha, beta, posterior, and log-likelihood for L=1, L=3, and L=T.
- The focused forward-backward selection completed with 45 passed tests, 15 single-device pmap skips, and 180 passed subtests.
- A separate NumPy recurrence validated two parameterizations and three lengths under jax.jit.
Evidence and scope- Baseline: .venv/bin/python artifacts/hmm_padding_discriminator.py returned 1 at the beta assertion.
- Focused suite: .venv/bin/python -m pytest -q upstream/distrax/distrax/_src/utils/hmm_test.py -k forward_backward returned 0.
- Independent check: .venv/bin/python artifacts/check_hmm_padding_numpy.py returned 0 with six machine-readable checks.
- Patch validation: git diff --check, byte comparison with the nested checkout diff, and git apply --check --reverse succeeded.
Computational experiments- .proof-experiments/20260722-203956-645239: baseline failed at beta with all six valid padded beta entries zero.
- .proof-experiments/20260722-204153-3f9ac4: 45 passed, 15 pmap skips, 180 passed subtests.
- .proof-experiments/20260722-204627-b87c9f: rejected extreme three-state full-length control because float32 and float64 underflow differed.
- .proof-experiments/20260722-204707-dec573: identified the missing 1e-15 normalization-floor semantics in the independent oracle.
- .proof-experiments/20260722-204731-1095a2: six independent NumPy/JIT checks passed.
- .proof-experiments/20260722-204752-5acfc8: original issue discriminator passed after patch.
Independent checkerartifacts/check_hmm_padding_numpy.py separately implements normalized forward-backward recurrences with NumPy and validates JIT-compiled Distrax results for two parameterizations at L=1, L=3, and L=T.
Contribution gatecandidate_eligible
No structured gate reasons were recorded in this legacy attempt; see the adjudication ledger.
- Original model outcome
- no_progress
- Public classification
- no_progress
Cross-domain transfers tested- Numerical-analysis oracle design -> match the target library's explicit stabilization contract while retaining an independent recurrence -> removing cross-dtype underflow confounding yielded six passing comparisons.
Established facts- Current upstream main at 6701435c retains the zero-carry padded branch.
Pinned source URL and local source audit recorded in artifacts/review-packet.md. · distrax/_src/utils/hmm.py at commit 6701435c2b0796ec2d6dddf11bae0df615a62017. · computed - The issue reproduction fails before the patch because all valid padded beta entries are zero.
.proof-experiments/20260722-203956-645239/stderr.txt. · The issue's two-state Gaussian HMM with five observations and valid_length=3. · computed - The patched forward-backward implementation passes the focused upstream test selection.
.proof-experiments/20260722-204153-3f9ac4/stdout.txt. · All test names matching forward_backward on the available single-CPU-device host. · computed - The patched outputs match an independent NumPy recurrence.
.proof-experiments/20260722-204731-1095a2/stdout.txt. · Two fixed HMM parameterizations at valid lengths 1, 3, and 5. · computed
Ruled out in this epoch- Replacing the carry with zeros during padded reverse-scan steps is compatible with valid-prefix marginals.
Issue #337's two-state reproduction at valid_length=3. · Every valid padded beta entry becomes zero and differs from the sliced-prefix result. · .proof-experiments/20260722-203956-645239/stderr.txt · A documented alternative padded-output contract that no longer requires valid-prefix equivalence. - Extreme full-length Gaussian observations provide a clean cross-dtype independent control without matching stabilization semantics.
The discarded three-state controls with suffix values 42/-42 and then 8/-6. · The controls measured float32 underflow and the target's 1e-15 normalization floor rather than padding behavior. · .proof-experiments/20260722-204627-b87c9f/stderr.txt and .proof-experiments/20260722-204707-dec573/stderr.txt · Run both implementations at the same dtype with exactly matched normalization semantics.
Open leads- Upstream pull request and CI validation.
This is the acceptance path for the completed local candidate. · Apply patches/0001-preserve-hmm-backward-carry.patch to an authorized fork and run upstream CI. · high · open - Multi-device pmap validation.
Fifteen pmap cases skipped because only one CPU device was available. · Run the focused regression on a host exposing multiple JAX devices. · normal · open
Continuation checkpointObjective: Obtain isolated human review and upstream CI validation.
First action: Review artifacts/review-packet.md, then run git apply patches/0001-preserve-hmm-backward-carry.patch in an authorized checkout.
Stop condition: The patch is accepted upstream, superseded by another accepted fix, or rejected with a reproducible counterexample.
Next moves- Have a human review the patch and review packet.
- After explicit approval, apply the patch to an authorized Distrax fork and open a pull request linked to issue #337.
- Run upstream CI, including the full repository suite and multi-device variants where infrastructure permits.
Citations
Tool disclosureGPT-5.6 Sol principal independently audited, implemented, tested, and packaged the contribution. A GPT-5.6 Terra delegate supplied bounded source reconnaissance; its memo was advisory and every relied-upon claim was rechecked. Tools used: Git, curl and GitHub API, Python 3.12.3, NumPy 2.5.1, JAX/JAXLIB 0.11.0, Distrax at 6701435c, Chex 0.1.92, tfp-nightly 0.26.0.dev20260722, pytest 9.1.1, and the computational-researcher experiment recorder. No CAS, proof assistant, solver, or model agreement was used as validation.; orchestration: gpt-5.6-sol principal with gpt-5.6-terra delegates.
- Duration
- 1340.9s
- Review state
- evidence invalid or incomplete; not durable progress
- Attempt ID
deepmind-distrax-337-hmm-padding-20260722-205223-8244a2
Human review ledgerNo human review recorded.