PyAutoFit v2026.5.29.4
What's New
Breaking Changes
- fix(nss): chunked algo.init follow-up to #1303 (#1305)
- Remove use_jax_for_visualization; add visualization warmup (#1297)
Analysis.__init__no longer acceptsuse_jax_for_visualization. Visualization now automatically followsuse_jax— if the search uses JAX, visualization does too. The_jitted_fit_fromlazy JIT cache on Analysis is removed; the warmup inFitness.__init__is a better approach (pre-compiles before sampling, not on first quick update). See full details below.
- Add live_visual_update flag for opt-in on-the-fly visualization (#1293)
- fix: PYAUTO_TEST_MODE should write to a separate output dir (#1292)
- No public symbol additions, removals, or signature changes.
- Behaviour change: when the
PYAUTO_TEST_MODEenvironment variable is set (any truthy value), AutoFit search output paths get atest_mode/segment inserted directly afterconf.instance.output_path. This affects every search-output path including SQLite database files opened viaopen_database()with a relative filename.
- feat(quick_update): IPython.display.update_display for live Jupyter cells (#1290)
- One additive optional kwarg on
BackgroundQuickUpdate:display_id: str = "pyauto_fit_progress". Behavioural change: when running inside a Jupyter / Colab kernel, the worker additionally pushes the freshly-writtensubplot_fit.pngto the active cell viaIPython.display.update_display. Outside a kernel — unchanged (PNG-on-disk only). No public symbol removed, renamed, or signature-broken.
- One additive optional kwarg on
- feat(analysis): LATENT_BATCH_MODE attribute (vmap default, jit option) (#1288)
- New public class attribute
Analysis.LATENT_BATCH_MODE: str(default"vmap"). Two values supported:"vmap"and"jit". Other values raiseValueErroratcompute_latent_samplestime with a clear message.
- New public class attribute
- Fix Sample.kwargs mixed string/tuple key bug (#1287)
- Internal in-memory representation of
Sample.kwargsis now uniformly tuple-keyed — single-name keys become('name',)instead of staying as raw strings. All serialized forms (CSV headers, database JSON viaSample.dict()) are unchanged because they already join tuples back to dotted strings on serialize, andSample.__init__re-tuples them on deserialize, so the round-trip is symmetric. The change also silently repairsSamples.values_for_pathand the aggregator CSVColumn.valuelookup, both of which expected tuple keys but would have silently failed on dotless-name kwargs pre-fix.
- Internal in-memory representation of
Bug Fixes
- fix(jax): structural defense against cached_property pytree/dict leaks (#1302)
- fix(jax): keep parameterization cache off ModelInstance + auto-register pytrees (#1300)
Internal
- chore(deps): allow anesthetic>=2.9.0 to unblock jax>=0.7 / numpy>=2 resolution (#1306)
- feat(nss): chunk_size kwarg for inversion-heavy A100 likelihoods (#1303)
- Cache model.parameterization; try interactive matplotlib backends (#1299)
- Prefer fit_quick.png in quick-update display candidates (#1298)
- fix: skip _compute_latent_samples in PYAUTO_TEST_MODE (#1294) (#1295)
- nss extras: strip git+https URLs to unblock PyPI uploads (#1286)
Full changelog: 2026.5.21.1...2026.5.29.4