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.0] - 2026-05-23
Added
New photometry/astrometry librarian (now a
librarian/package): Gaia DR3best_neighbourcross-matching with a VizieR XMatch fallback, per-catalogue quality-control, robust coordinate→source_idresolution via a Gaia TAP cone query, and Hypatia-Catalog [Fe/H] spectroscopic priors. TheStarlookup 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 ofrwalkMCMC steps per proposal (alsosetup[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_coverageinconfig.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
Starand drawn onSED_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).nogilnumba 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
KeyErrorin the non-BMAsave()/end()path (best_fit_averagedkeys).dynesty
queue_sizeoff-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), anddynestyis now both faster and the only engine exercised by the BMA path. Useengine='dynesty'(the default).
[1.4.6] - 2026-04-07
Fixed
Photometry QC outlier detection used a monochromatic Planck function with incorrect
lambda^-3scaling and no zero-point calibration, causing false positives in NIR/MIR bands (2MASS, WISE). Replaced with_synth_mags()that uses the correctlambda^-5Planck 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 inutils.pyas 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.0360lines.show_priors()restyled to match the new LACHESIS table format (no more box-drawing characters) and is now called automatically frominitialize().
Fixed
_format_prior_notation()previously looked attype(prior_obj).__name__, which always returnsrv_continuous_frozenfor frozen scipy distributions. Switched to inspectingtype(prior_obj.dist).__name__and pulling parameters from.kwds/.args.RAVE population priors (stored as
InterpolatedUnivariateSplinefromteff_ppf.pkl) now display asRAVE (population)instead of the raw scipy class name, even when usingcreate_priors_from_setup.Removed three redundant local
colors = [...]lists inutils.py/fitter.pythat were shadowing the shared list imported fromconfig.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_bmanow automatically writesariadne_result.nc(arviz InferenceData) to the output folder alongside the existing pickle and.datfiles.
Fixed
Multiprocessing crash on macOS with Python 3.12+ caused by
spawnstart method breaking the module-level globals that dynesty callbacks depend on. Forcedforkunconditionally.to_netcdf()was never called andself.outwas never populated bysave_bma, making the netCDF export path dead code since 1.4.0.pyphotcompatibility: replaced.magnitude(pint API) with.value(astropy API) inphot_utils.pyto 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.ncfile 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 callingto_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 anarviz.InferenceDataobject in netCDF4 format, the canonical inter-tool format for the ARIADNE → LACHESIS → PROTEUS pipeline.arvizadded as a dependency.
[1.3.4] - 2026-03-24
Fixed
_get_gaia_id()Vizier query excluded the_r(angular distance) column when restricting tocolumns=['Source'], causingValueErroron 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.h5from 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’sloggingmodule acrosserror.py,fitter.py, andplotter.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