maintenance: floor autonerves at the first release carrying the SMALLDAT stamp - #483
Merged
Merged
Conversation
…DAT stamp The floor was `autonerves>=2026.8.22.1`, which predates the SMALLDAT regime stamp shipped by PyAutoNerves#153/#154. An autoarray installed from PyPI therefore resolved an autonerves whose writer emits no card at all: `should_simulate` saw an absent stamp, read it as "unknown", and fell back to the shape heuristic — which cannot see capped interferometer datasets, the case the stamp exists for. The fix was inert for anyone installing rather than running from a checkout. `autonerves 2026.8.23.1` is the first release carrying it. Verified by unpacking both wheels from PyPI rather than inferring from commit dates: 2026.8.22.1 has neither `stamp_small_datasets_regime` nor `SMALL_DATASETS_HEADER_KEY`, and still writes the `[""]` header comment; 2026.8.23.1 has both and the `""` fix. No release sits between them, so it is the first. Both floor reasons are now stated in the pin comment — the JAX-in-base-dependencies requirement (PyAutoLens#687/#702) stays load-bearing alongside the stamp. The rationale on the duplicated SMALLDAT literal in `dataset_util.py` was rewritten because this bump makes its stated reason false — it claimed the floor named a pre-stamp release, so an import would hard-fail. The duplication is kept anyway, for a different reason: a floor constrains dependency resolution only, and an editable checkout or `--no-deps` install can still put a pre-stamp autonerves on the path. The literal degrades to "card absent" and falls through to the shape heuristic; an import would be an ImportError at module load. Silent-safe beats hard-fail. Both fallbacks (`should_simulate`'s shape heuristic and `_is_capped_at_the_current_cap`) are untouched — every dataset already on disk is unstamped and depends on them. `test_autoarray/structures/arrays/files/array/output_test/array.fits` is regenerated as a byproduct: it is test output that the suite rmtrees and rewrites, and the newly-floored autonerves drops the `/ ['']` comment literal (PyAutoNerves#155). Verified cosmetic — identical cards, values, data and byte size; only the comment text differs. Leaving it stale would dirty the tree on every suite run under the new floor. Closes #482. Co-Authored-By: Claude <[email protected]>
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.
Closes #482.
What this does
The floor was
autonerves>=2026.8.22.1, which predates the SMALLDAT regime stamp shipped by PyAutoNerves#153/#154. An autoarray installed from PyPI therefore resolved an autonerves whose writer emits no card at all:should_simulatesaw an absent stamp, read it as "unknown", and fell back to the shape heuristic — which cannot see capped interferometer datasets, the exact case the stamp exists for. The fix was inert for anyone installing rather than running from a checkout.This bumps the floor to
2026.8.23.1, the first release that actually carries it.Why 2026.8.23.1 is the right floor
Verified by unpacking both wheels from PyPI, rather than inferring membership from commit dates:
2026.8.22.1(old floor)2026.8.23.1(new floor)stamp_small_datasets_regimefitsable.py:29SMALL_DATASETS_HEADER_KEY = "SMALLDAT"fitsable.py:250ecefa0)header.append((key_str, value, [""]))""Requires-DistNo release sits between the two, so
2026.8.23.1is the first stamped release. It carries both commits named in the prompt (39014b6,0ecefa0).The pin comment now states both load-bearing reasons. The JAX-in-base-dependencies requirement (PyAutoLens#687/#702) stays alongside the stamp; its old "bump once it exists" phrasing was stale, since that condition has been satisfied since
2026.8.22.1.The duplicated SMALLDAT literal — kept, for a new reason
dataset_util.pyduplicates the"SMALLDAT"literal rather than importing it. Its comment justified that by saying the floor named a pre-stamp release, so an import would hard-fail — this change makes that reason false, so it had to be rewritten either way.The duplication is kept anyway, on a different rationale: a floor constrains dependency resolution only. An editable checkout, a
pip install --no-deps, or a hand-built virtualenv can still put a pre-stamp autonerves on the path. Under the literal, such an autonerves yields "card absent" and the reader falls through to the shape heuristic — the safe direction, and the same path every pre-stamp dataset on disk already takes. Under an import it would be anImportErrorat module load. Trading a silent-safe degradation for a hard failure to delete one string is the wrong way round.Not changed
Both fallbacks —
should_simulate's shape heuristic and_is_capped_at_the_current_cap— are untouched. Every dataset already on disk is unstamped and depends on them.The regenerated FITS fixture
test_autoarray/structures/arrays/files/array/output_test/array.fitschanged as a byproduct. It is test output, not an input expectation:test_uniform_2d.py:201-208rmtrees the directory, recreates it, writes the file, and reads it back. The newly-floored autonerves drops the/ ['']comment literal (PyAutoNerves#155), so the committed copy no longer matched what a compliant install produces.Verified cosmetic — identical cards, values, data and byte size (5760 → 5760); only the comment text differs:
Leaving it stale would dirty the tree on every suite run under the new floor. Only 1 of 61 tracked
.fitsfiles is affected.Separately worth noting: a generated artifact being tracked in git is a pre-existing hygiene issue that will recur on the next autonerves writer change. Filed as its own task rather than widened into this PR.
Testing
Fresh install under the new floor, confirming the change achieves its purpose end to end:
Run on Python 3.13.
Generated by Claude Code