Skip to content

v2026.7.9.1

Latest

Choose a tag to compare

@Jammy2211 Jammy2211 released this 09 Jul 18:47
15f8c79

PyAutoGalaxy v2026.7.9.1

What's New

Breaking Changes

  • feat: CSV API extensions from the stress-test (light variants, loud guards, table properties, flat cosmology) (#491)
    • Added: qualified light-variant class names in light.csv (linear.Sersic, operated.Gaussian, linear_operated.* — plain names stay standard); GalaxyTable.properties (extra catalogue columns load as float/string lists — nothing silently dropped) + galaxy_table_to_csv(properties=); dPIEMassLenstool(Sph) gain H0/Om0 float args (Planck15-value defaults, so a Lenstool run's cosmology is CSV-able) with prior-config entries. Behaviour changed (loud guards): duplicate (galaxy, attr_name) rows and typo'd parameter columns in model CSVs now raise ValueError (both previously silent — a typo left the profile at its default value). dPIEMassLenstool wrapper prior_count grows 9→11 (fix H0/Om0 for the old count).
  • feat: Lenstool-native dPIE parameterization (from_lenstool + dPIEMassLenstool) and analytic potential (#487)
    • Added Lenstool-parameterized construction and fitting for the dPIE family: from_lenstool(...) classmethods on dPIEMass / dPIEMassSph, and new model-fittable wrapper profiles dPIEMassLenstool / dPIEMassLenstoolSph (with prior configs). dPIEMass.potential_2d_from values change (MGE approximation → exact analytic potential); dPIE deflections at |ell_comps| < 1e-5 change from NaN to the tiny-ellipticity limit. No removals or renames.
  • feat: add Kaplinghat SIDM cored NFW profile (#471)
    • Adds two public dark-matter mass profiles, ag.mp.KaplinghatCoredNFWSph and ag.mp.KaplinghatCoredNFWMCRLudlowSph, plus default prior configs. Existing profile APIs are unchanged. See full details below.
  • Lensing potential for elliptical/spherical dark-matter profiles (NFW/gNFW) + NFWSph fix (#470)
    • Adds a working potential_2d_from to the elliptical/spherical dark-matter profiles (via a single MGE-decomposition method on gNFW, inherited by NFW, gNFWSph, and all MCR/Virial variants). Corrects NFWSph.potential_2d_from (it returned values a factor of r_s too small). No public signatures removed or renamed; MassProfile.potential_2d_from now accepts xp/**kwargs (additive). Behaviour change: NFWSph potential values are now correct (≈ r_s× larger than before). See full details below.
  • fix(mass): convergence_func on PowerLawBroken, PowerLawMultipole, cNFW family (#467)
    • Added convergence_func overrides on PowerLawBroken, PowerLawBrokenSph (inherited), PowerLawMultipole, and the cNFW family (cNFWSph + MCR variants inherit). PowerLawBroken._convergence is a new private radial helper. PowerLawBroken.potential_2d_from now raises NotImplementedError explicitly (it was already non-functional). No signatures of existing public methods changed. See full details below.

New Features

  • feat: oversampled PSF blurred images — operate/image consumer (phase 2c) (#481)
  • docs: add signpost llms.txt + consolidate agent instructions into AGENTS.md (#474)

Bug Fixes

  • docs: fix dead HowToGalaxy Colab links + purge stale allowlist entries (#493)
  • fix: restore unconditional dataset.fits output for aggregator (save_attributes) (#479)
  • fix(jax): defensive pytree dedup in imaging/interferometer analyses (#468)

Internal

  • docs: document the functional plot API in plot.rst (#494)
  • docs: prune stale API-doc references (#492)
  • refactor: unify the blurred-image evaluate/pre-bin/convolve tail (#489)
  • 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)
  • 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: consolidate agent instructions into canonical AGENTS.md (#473)
  • refactor(latent): LatentGalaxy class + declare Analysis.Latent (Phase 2) (#472)

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)

Full changelog: 2026.5.29.4...2026.7.9.1