Skip to content

v2026.7.9.1

Latest

Choose a tag to compare

@Jammy2211 Jammy2211 released this 09 Jul 18:47
01727a3

PyAutoLens v2026.7.9.1

What's New

Breaking Changes

  • feat: over/under-prediction policies for point-source pairing likelihoods (#586)
    • FitPositionsImagePairRepeat gains an unmatched_model_policy class attribute — "magnification_filter" (new default: extra model images with |μ| < magnification_threshold=0.1 are exempt per the demagnified-central observational convention, brighter extras add distance-to-nearest-observed penalty residuals), "penalize", "ignore" (the historical behaviour, now explicit) — plus a no_image_residual finite floor when the solver returns no images and an n_unmatched_model_positions diagnostic. FitPositionsImagePair (Hungarian) now penalizes unmatched observed positions instead of dropping them. Behaviour change: fits where the max-likelihood model over-predicts bright images or under-predicts will report (correctly) worse likelihoods than before; equal-count well-matched fits are numerically unchanged (regression-tested).
  • feat: support Kaplinghat halos in substructure arrays (#567)
    • Adds support for al.mp.KaplinghatCoredNFWSph and al.mp.KaplinghatCoredNFWMCRLudlowSph in autolens.lens.substructure_util.galaxies_to_halo_arrays.
    • Unsupported profile classes now raise ValueError instead of being implicitly interpreted as truncated NFW profiles.
  • feat: datacube shared-state for AnalysisInterferometer via curvature preloads (#566)
  • Honour PYAUTO_TEST_MODE in LOSSampler to fix los_halos simulator timeouts (#559)
    • autolens.lens.los.negative_kappa_from gains two optional keyword arguments, quad_limit=50 and quad_epsrel=1.49e-8 (both scipy's own quad defaults), threaded into its inner and outer integrals. Existing callers are unaffected. LOSSampler.galaxies_from now reads autoconf.test_mode.is_test_mode() internally; its signature is unchanged. No removals or renames. See full details below.

New Features

  • feat: FitWeak per-galaxy sigma_crit scaling + JAX support (weak series step 10) (#591)
  • feat: WeakDataset catalog IO + reduced shear (weak series step 7a) (#589)
  • feat: tangential/cross shear profiles + Kaiser-Squires map (weak series step 6) (#582)
  • feat: AnalysisWeak — weak lensing modeling (weak series step 4) (#580)
  • feat: cluster-scale visualization — per-plane critical curves/caustics aplt helpers (#578)
  • docs: add signpost llms.txt + consolidate agent instructions into AGENTS.md (#570)
  • test: regression guard for HowToLens tutorial_3 NaN axis-limits crash (#560)

Bug Fixes

  • docs: fix dead HowToLens Colab links + purge stale allowlist entries (#594)
  • fix: write dataset.fits in save_attributes for aggregator (#574)
  • fix(jax): defensive pytree dedup in imaging/interferometer analyses (#561)

Internal

  • docs: document the functional plot API in plot.rst (#596)
  • docs: three-ways-to-learn guide + prune stale API-doc references (#593)
  • fix: mixed-dataset factor graphs crash combined visualization (#587)
  • feat: cap SimulatorShearYX catalogue size under PYAUTO_SMALL_DATASETS (weak series step 9) (#584)
  • docs: add dPIEMassLenstool / dPIEMassLenstoolSph to mass API autosummary (#576)
  • feat: oversampled PSF support in SimulatorImaging.via_tracer_from (#575)
  • ci: call the reusable lib-tests workflow from PyAutoHeart (not PyAutoPulse) (#573)
  • main.yml → thin caller to Pulse reusable lib-tests (Stage 4 Phase A) (#572)
  • Remove url_check.yml: URL hygiene centralised in PyAutoPulse (#571)
  • docs: consolidate agent instructions into canonical AGENTS.md (#569)
  • refactor(latent): LatentLens class + declare Analysis.Latent (Phase 2) (#568)

Upstream Changes

PyAutoFit

  • refactor: dispatch visualize_combined per Visualizer type in FactorGraphModel (#1340)
  • fix: LogUniform NumPy log-prior returns -inf for value<=0 (emcee NaN crash) (#1329)
  • ci: pause routine scheduled (cron) workflow runs (#1325)
  • ci: call the reusable lib-tests workflow from PyAutoHeart (not PyAutoPulse) (#1323)
  • main.yml → thin caller to Pulse reusable lib-tests (Stage 4 Phase A) (#1322)
  • Remove url_check.yml: URL hygiene centralised in PyAutoPulse (#1321)
  • docs: add signpost llms.txt + consolidate agent instructions into AGENTS.md (#1320)
  • docs: consolidate agent instructions into canonical AGENTS.md (#1319)
  • refactor(latent): migrate af.ex.Analysis + cookbook docs to the Latent class (#1318)
  • fix: skip latent computation without keys (#1317)
  • refactor(latent): first-class Latent class + engine extraction (Phase 1) (#1315)
  • fix: expand bypass-mode fake samples (#1314)
  • test: skip NSS tests without optional dependency (#1312)
  • fix(latent): degenerate latent edge cases (quantile n=1, latent exceptions, anti-correlated NaNs) (#1311)
  • fix(latent): global masking in compute_latent_samples to prevent KeyError on per-batch NaN drops (#1310)
  • feat: cross-Analysis shared per-evaluation state in FactorGraphModel (#1308)
  • chore(deps): allow anesthetic>=2.9.0 to unblock jax>=0.7 / numpy>=2 resolution (#1306)
  • fix(nss): chunked algo.init follow-up to #1303 (#1305)
  • feat(nss): chunk_size kwarg for inversion-heavy A100 likelihoods (#1303)
  • fix(jax): structural defense against cached_property pytree/dict leaks (#1302)

PyAutoArray

  • refactor: qhull-only Delaunay callback, exact JAX visibility-walk point location (#368)
  • feat: catalogue-size cap for PYAUTO_SMALL_DATASETS smoke mode (#366)
  • refactor: vectorize k×s segment-id construction (#365)
  • perf: memoize k×s segment-id construction (#364)
  • feat: k×s evaluation/convolution coupling (#363)
  • refactor: consolidate oversampled-PSF convolution helpers (#361)
  • feat: via_image_from image_is_convolved + from_gaussian oversample kwarg (#359)
  • fix: oversampled fine state when the blurring mask is padded (#358)
  • feat: oversampled PSF inversion wiring — mapping formalism (phase 2b) (#357)
  • feat: oversampled PSF convolution core API (convolve_over_sample_size) (#355)
  • ci: call the reusable lib-tests workflow from PyAutoHeart (not PyAutoPulse) (#352)
  • Arcsec ticks: consistent decimal for mixed integer/decimal ticks; centre rotated y-labels (#351)
  • Add optional arcsecond double-prime tick labels (#350)
  • main.yml → thin caller to Pulse reusable lib-tests (Stage 4 Phase A) (#349)
  • Remove url_check.yml: URL hygiene centralised in PyAutoPulse (#348)
  • docs: add signpost llms.txt + consolidate agent instructions into AGENTS.md (#347)
  • docs: consolidate agent instructions into canonical AGENTS.md (#346)
  • feat: Preloads API for reusing channel-invariant inversion quantities (#344)
  • fix(jax): exclude cached_property descriptors from pytree flatten paths (#343)

PyAutoGalaxy

  • docs: document the functional plot API in plot.rst (#494)
  • docs: fix dead HowToGalaxy Colab links + purge stale allowlist entries (#493)
  • docs: prune stale API-doc references (#492)
  • feat: CSV API extensions from the stress-test (light variants, loud guards, table properties, flat cosmology) (#491)
  • refactor: unify the blurred-image evaluate/pre-bin/convolve tail (#489)
  • feat: Lenstool-native dPIE parameterization (from_lenstool + dPIEMassLenstool) and analytic potential (#487)
  • feat: k×s coupling call sites (blurred images, linear override, padded simulation) (#486)
  • refactor: extract the oversampled-PSF evaluation-grid switch (#484)
  • feat: oversampled PSF support in SimulatorImaging (phase: simulator) (#483)
  • feat: oversampled PSF blurred images — operate/image consumer (phase 2c) (#481)
  • fix: restore unconditional dataset.fits output for aggregator (save_attributes) (#479)
  • ci: call the reusable lib-tests workflow from PyAutoHeart (not PyAutoPulse) (#477)
  • main.yml → thin caller to Pulse reusable lib-tests (Stage 4 Phase A) (#476)
  • Remove url_check.yml: URL hygiene centralised in PyAutoPulse (#475)
  • docs: add signpost llms.txt + consolidate agent instructions into AGENTS.md (#474)
  • docs: consolidate agent instructions into canonical AGENTS.md (#473)
  • refactor(latent): LatentGalaxy class + declare Analysis.Latent (Phase 2) (#472)
  • feat: add Kaplinghat SIDM cored NFW profile (#471)
  • Lensing potential for elliptical/spherical dark-matter profiles (NFW/gNFW) + NFWSph fix (#470)
  • fix(jax): defensive pytree dedup in imaging/interferometer analyses (#468)
  • fix(mass): convergence_func on PowerLawBroken, PowerLawMultipole, cNFW family (#467)

Full changelog: 2026.5.29.4...2026.7.9.1