diff --git a/autoarray/util/dataset_util.py b/autoarray/util/dataset_util.py index afd91422f..b03699582 100644 --- a/autoarray/util/dataset_util.py +++ b/autoarray/util/dataset_util.py @@ -7,11 +7,19 @@ SMALL_DATASETS_PIXEL_SCALES = 0.6 # The FITS header card ``autonerves.fitsable.stamp_small_datasets_regime`` writes -# on every array the stack outputs. Deliberately duplicated here rather than -# imported: ``pyproject.toml`` floors autonerves at a release that predates the -# stamp, so an import would hard-fail against a legitimately-resolved older -# autonerves. Reading the card by name degrades to "absent" instead, which is -# exactly the fallback path below. Keep in sync with PyAutoNerves#153. +# on every array the stack outputs. Still deliberately duplicated here rather +# than imported, though the original reason has expired: the floor in +# ``pyproject.toml`` now names a stamped release, so importing the constant +# would resolve. The reason it stays a literal is what the floor does NOT +# cover. 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 this literal such an autonerves +# yields "card absent" and the reader falls through to the shape heuristic +# below — the safe direction, and the same path every pre-stamp dataset on disk +# already takes. Under an import it would be an ``ImportError`` at module load. +# Trading a silent-safe degradation for a hard failure to delete one string is +# the wrong way round, so the duplication is kept on purpose. +# Keep in sync with PyAutoNerves#153. SMALL_DATASETS_HEADER_KEY = "SMALLDAT" diff --git a/pyproject.toml b/pyproject.toml index 592f76b6d..b178d7621 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,10 +24,22 @@ classifiers = [ ] keywords = ["cli"] dependencies = [ - # Floor, not a pin (PyAutoLens#687) — bump to the first release with JAX - # in autonerves' base dependencies once it exists (PyAutoLens#702), so - # backtracking cannot pair this autoarray with a jax-optional autonerves. - "autonerves>=2026.8.22.1", + # Floor, not a pin (PyAutoLens#687). Two independent reasons hold it up; + # neither may be dropped without checking the other. + # + # 1. JAX in base dependencies (PyAutoLens#702) — the floor must name a + # release carrying `jax`/`jaxlib` in autonerves' *base* Requires-Dist, so + # backtracking cannot pair this autoarray with a jax-optional autonerves. + # Satisfied since 2026.8.22.1; every later release keeps them there. + # 2. The SMALLDAT regime stamp (PyAutoNerves#153/#154) — `should_simulate` + # prefers the header card that autonerves' writer stamps, and 2026.8.23.1 + # is the FIRST release whose `fitsable.stamp_small_datasets_regime` emits + # it. Against anything older the card is simply absent, the read side + # degrades to its shape heuristic, and capped *interferometer* datasets — + # shape-identical to full-resolution ones — go undetected. That is the + # case the stamp exists for, so the floor is what makes it reachable for + # an installed autoarray rather than a checkout. + "autonerves>=2026.8.23.1", "astropy>=5.0", "decorator>=4.0.0", "dill>=0.3.1.1", diff --git a/test_autoarray/structures/arrays/files/array/output_test/array.fits b/test_autoarray/structures/arrays/files/array/output_test/array.fits index d028d2d18..82bbcb8fd 100644 Binary files a/test_autoarray/structures/arrays/files/array/output_test/array.fits and b/test_autoarray/structures/arrays/files/array/output_test/array.fits differ