Changelog

All notable changes to astroARIADNE will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.5.1] - 2026-05-31

Fixed

  • BMA model weights: the evidence softmax now shifts by the maximum log-evidence instead of the minimum, preventing exp() overflow to nan weights when one grid dominates by a large margin (Δln Z ≳ 709).

  • _make_transform (prior transform) read only keyword arguments, so a positionally-constructed prior (truncnorm(a, b, loc, scale)) raised a KeyError and norm(mu, sigma) silently became a standard normal. It now normalises parameters via _parse_args, supporting both styles exactly.

  • SEDPlotter could not plot fits from the BOSZ, SPHINX or TLUSTY grids: the interpolator dispatch was missing those grids (AttributeError), and SED() had no fallback for grids without cached spectra. The interpolator path now covers all grids, and SED() skips the continuous model spectrum with a warning (still drawing photometry and synthetic fluxes) when a grid has no spectra available.

[1.5.0] - 2026-05-23

Added

  • New photometry/astrometry librarian (now a librarian/ package): Gaia DR3 best_neighbour cross-matching with a VizieR XMatch fallback, per-catalogue quality-control, robust coordinate→source_id resolution via a Gaia TAP cone query, and Hypatia-Catalog [Fe/H] spectroscopic priors. The Star lookup and prior construction were adapted accordingly, including per-field null-safe spectroscopic priors (a Hypatia [Fe/H]-only result no longer requires a spectroscopic Teff/logg). Filter names are bridged to the ARIADNE convention (Gaia DR3 → GaiaDR2v2_*).

  • Three new model grids:

    • BOSZ (Mészáros et al. 2024) — MARCS+ATLAS9 atmospheres synthesised with Synspec, Teff 2800–16000 K, full 0.05–32 µm coverage. Added to the BMA set (temperature-gated to its validity range); brings independent MARCS/Synspec physics to the FGK regime.

    • SPHINX-II (Iyer et al. 2025) — M-dwarf grid (Teff 2000–4000 K), gray cloud log κ = −29 / C/O = 0.5 fiducial slice. Standalone (f.grid = 'sphinx').

    • TLUSTY OSTAR2002 + BSTAR2006 (Lanz & Hubeny) — NLTE hot O/B stars (Teff 15000–55000 K). Standalone; uses a wide uniform Teff prior since the FGK population prior cannot reach the hot regime.

  • Tunable sampler/parallelism knobs (defaults preserve prior behaviour):

    • walks — number of rwalk MCMC steps per proposal (also setup[7]).

    • n_grid_jobs — number of BMA model grids fit concurrently (one core each).

    • isochrone_dlogz — evidence tolerance for the MIST isochrone age/mass fit.

  • grid_wave_coverage in config.py: standalone fits with a limited-coverage grid (e.g. Coelho) now exclude out-of-coverage bands instead of using extrapolated fluxes.

  • Blackbody quality-control overlay on the raw SED plot: the photometry QC blackbody fit (temperature + flagged bands) is persisted on the Star and drawn on SED_no_model.png, with QC-flagged bands outlined in red so SED outliers (blends, bad cross-matches, IR excess) can be inspected visually.

Changed

  • Major fitting speedups (~12–25× on the benchmark BMA run):

    • Prior transform now uses closed-form inverse CDFs instead of scipy frozen .ppf (~80× faster per call — the dominant cost).

    • nogil numba trilinear interpolator replaces the per-call DFInterpolator path (~18× faster, bit-identical for in-bounds inputs).

    • Parameter order, prior transforms and the extinction curve are cached on object identity (extinction is linear in Av → precomputed once).

    • The MIST isochrone age/mass fit is parallelised across threads.

Fixed

  • KeyError in the non-BMA save()/end() path (best_fit_averaged keys).

  • dynesty queue_size off-by-one left one pool worker idle.

Deprecated

  • The 'multinest' sampling engine is deprecated and will be removed entirely in v2.0. It only ever supported single-grid fits (not BMA), and dynesty is now both faster and the only engine exercised by the BMA path. Use engine='dynesty' (the default).

[1.4.6] - 2026-04-07

Fixed

  • Photometry QC outlier detection used a monochromatic Planck function with incorrect lambda^-3 scaling and no zero-point calibration, causing false positives in NIR/MIR bands (2MASS, WISE). Replaced with _synth_mags() that uses the correct lambda^-5 Planck formula and per-filter zero-point fluxes (Vega or AB as appropriate for PS1, SDSS, GALEX).

[1.4.5] - 2026-04-05

Added

  • BMA-weighted gray sampled spectra on SED plot: when running in Bayesian Model Averaging mode, plot_SED() now draws 100 gray model spectra sampled from each grid’s posterior proportionally to its BMA weight, visualizing the combined model + parameter uncertainty behind the best-fit spectrum.

Changed

  • Rewrote end() output in utils.py as a LACHESIS-style columnar table with proper units (Teff (K), log(g) (dex), [Fe/H] (dex), etc.), column header, separator rule, and a dedicated noise-parameter block.

  • Model weights now display as a proper table with probabilities and logZ per grid, replacing the bare phoenix probability : 0.0360 lines.

  • show_priors() restyled to match the new LACHESIS table format (no more box-drawing characters) and is now called automatically from initialize().

Fixed

  • _format_prior_notation() previously looked at type(prior_obj).__name__, which always returns rv_continuous_frozen for frozen scipy distributions. Switched to inspecting type(prior_obj.dist).__name__ and pulling parameters from .kwds/.args.

  • RAVE population priors (stored as InterpolatedUnivariateSpline from teff_ppf.pkl) now display as RAVE (population) instead of the raw scipy class name, even when using create_priors_from_setup.

  • Removed three redundant local colors = [...] lists in utils.py / fitter.py that were shadowing the shared list imported from config.py.

[1.4.3] - 2026-04-04

Added

  • Spectroscopic prior support from APOGEE DR17, GALAH DR3, and LAMOST DR5, with automatic survey priority cascade (APOGEE > GALAH > LAMOST > RAVE).

  • save_bma now automatically writes ariadne_result.nc (arviz InferenceData) to the output folder alongside the existing pickle and .dat files.

Fixed

  • Multiprocessing crash on macOS with Python 3.12+ caused by spawn start method breaking the module-level globals that dynesty callbacks depend on. Forced fork unconditionally.

  • to_netcdf() was never called and self.out was never populated by save_bma, making the netCDF export path dead code since 1.4.0.

  • pyphot compatibility: replaced .magnitude (pint API) with .value (astropy API) in phot_utils.py to match current pyphot releases.

  • Cached pyphot.get_library() at module level to avoid redundant HDF5 reads (~3 per filter per star).

[1.4.1] - 2026-03-25

Changed

  • to_dict() / to_netcdf() now include MIST isochrone posterior samples (age, iso_mass, eep), filter names, filter bandwidths, best-fit model SED fluxes, and summary statistics (best_fit_averaged, uncertainties_averaged, confidence_interval_averaged). The .nc file is now a fully self-contained data product for both downstream tools and frontend visualization.

  • Model SED fluxes can be injected via fitter.out['model_sed'] before calling to_netcdf(), allowing the host application to include the best-fit model evaluated at observed filter wavelengths.

[1.4.0] - 2026-03-24

Added

  • Fitter.to_dict() — export BMA results as a structured dictionary matching the ecosystem output spec (posterior samples, observed photometry, model weights).

  • Fitter.to_netcdf(path) — export BMA results as an arviz.InferenceData object in netCDF4 format, the canonical inter-tool format for the ARIADNE → LACHESIS → PROTEUS pipeline.

  • arviz added as a dependency.

[1.3.4] - 2026-03-24

Fixed

  • _get_gaia_id() Vizier query excluded the _r (angular distance) column when restricting to columns=['Source'], causing ValueError on sort. Added '+_r' to the column list so the nearest-source lookup works correctly.

[1.3.3] - 2026-03-15

Added

  • Precomputed spectra cache download from Zenodo for faster first-run setup.

Fixed

  • Excluded spectra_cache.h5 from package distribution to keep PyPI package small.

[1.3.2] - 2026-03-02

Added

  • Automatic fallback to VizieR XMatch / cone search when the Gaia TAP service is unavailable (503, 502, 500, or timeout). Affected catalogs: 2MASS, WISE, Pan-STARRS, SDSS, TYCHO2, APASS, RAVE, SkyMapper.

Changed

  • Migrated all print() / direct console output to Python’s logging module across error.py, fitter.py, and plotter.py, allowing host applications to control verbosity via standard log configuration.

  • gaia_params() now uses VizieR cone search instead of a direct Gaia TAP query, removing the dependency on Gaia TAP for basic stellar parameter lookup.

  • Distance query (_get_distance()) rewritten to use direct VizieR constraints on the Bailer-Jones EDR3 catalog — simpler and more reliable.

  • Gaia ID retrieval (_get_gaia_id()) switched from async Gaia cone search to VizieR cone search.

Fixed

  • Parallax error messages now distinguish between a masked value (no astrometric solution) and a non-positive measured parallax.

[1.3.1] - 2025-12-28

Fixed

  • Matplotlib 3.1+ compatibility issue in corner plot generation (tick.label → tick.label1)

[1.3.0] - 2025-12-28

Added

  • Gaia DR3 support - Complete upgrade from Gaia DR2 to DR3

  • Direct TAP queries for APASS photometry via Gaia external.apassdr9

  • Direct TAP queries for SkyMapper DR2 photometry

  • RAVE DR6 stellar parameter priors support

Fixed

  • APASS photometry retrieval broken by Vizier removing recno field (Issue #73)

  • SkyMapper photometry mismatch between DR2 crossmatch and DR1.1 catalog

  • 2MASS Vizier column name compatibility issues

  • IndexError when star exists in Gaia DR3 but not in DR2

  • Catalog crossmatch robustness improvements

Changed

  • Updated Gaia query system to use DR3 tables and best_neighbour crossmatches

  • Replaced Vizier queries with direct TAP service queries for APASS and SkyMapper

  • Modernized README installation instructions

[1.2.1] - 2024-12-01

Fixed

  • 2MASS Vizier column name compatibility

  • Modernized for Python 3.11+

[1.1.2] - 2024-11-01

Fixed

  • Temporary workaround for APASS recno issue (disabled APASS retrieval)

[1.1.1] - 2024-08-01

Fixed

  • Deprecation warning

  • Updated README examples

Changed

  • Deepened residual panel on SED plots

  • Made error bars more apparent in sigma terms