v1.1.x series (next stable)

v1.1.0 (23rd March 2026)

This major release upgrades our codebase to support more Python versions and improve maintainability. This long overdue maintenance notably includes:

  • Full support of Numpy 2. The development environment is now based on Python 3.10.

  • Critical fixes to the CKD database lookup functions, now offloaded to the new AxsDB library, which allow the safe use of recent xarray versions. Before this change, the performance penalty incurred by using xarray 2025 or later would slow down computations to a point where Eradiate would become unusable. For more information about this performance issue, see the AxsDB documentation.

  • The update of our radiometric kernel to Mitsuba v3.7.1. With this, we support Python 3.9 to 3.13.

  • Changes to our dependency tree: we replace the graph management infrastructure of Hamilton, used in our post-processing, with a home-grown solution based on NetworkX, greatly simplifying our pipeline definitions; and we replace astropy with Skyfield, which has a lower footprint and a narrower scope.

  • Addition of a polarized surface reflection model based on the work of Maignan et al. (2009).

Changed

  • ⚠️ The radiometric kernel is upgraded to upstream Mitsuba v3.7.1 (PR531). This has the following consequences:

    • When outputting Stokes vector components and variance, the variance product only contains data for the I component (the others are set to NaN).

    • The kernel log redirection feature was removed and the eradiate.kernel.logging module was deleted.

    • Expert interface users should now use the new arectangle shape plugin instead of rectangle. The latter has been modified to describe rectangles as triangulated meshes, which can be problematic as the native kd-tree used for double-precision ray intersections is lacking safeguards to guarantee that meshes are watertight: arectangle brings back the prior implementation of rectangle, which doesn’t have these problems.

    • The mitsuba.load_dict()’s default behaviour has changed and performs optimizations that are generally not wanted within Eradiate. A new mi_load_dict() wrapper disables these optimizations, preserving prior behaviour, and should be preferred to load Mitsuba objects in Eradiate.

  • The ParticleLayer class’s constructor now warns if the specified reference wavelength (default: 550 nm) is missing from the w coordinate of the aerosol optical property dataset (PR530).

  • ⚠️ Astropy is replaced by Skyfield for astronomical calculations (PR532). In practice, this applies to the SolarIrradianceSpectrum class.

  • The documentation and default parameters of the Hapke BSDF have been updated (PR536).

  • ⚠️ 🖥️ The development environment now uses Python 3.10 (PR539).

  • 🖥️ The suite of system tests was redesigned to improve reliability (PR517). Plots can now be disabled for improved performance.

  • ⚠️ 🖥️ Absorption database lookup is transferred to the AxsDB library (PR545). This notably allows to register custom absorption databases through the radprops.absdb_factory factory instance.

  • ⚠️ 🖥️ Post-processing pipelines now use a home-grown engine that replaces Hamilton (PR551). The underlying motivation is documented in the PR and pipeline engine design note.

  • 🖥️ Updated all source code to use Pinttrs’s new-style API (PR557). This change does not affect users.

  • The make_gaussian() function is transferred to a class method of BandSRF (PR558). The previous entry point is kept for compatibility.

  • The BandSRF now has a name attribute and can be exported to an xarray DataArray (PR558).

Added

  • The AstroObjectIllumination class now has the additional factory alias astroobject, consistent with the associated Mitsuba plugin (PR529).

  • Added the MaignanBSDF class, a polarized surface reflection model introduced by [Maignan et al., 2009] (PR534).

  • RNG seed sequence initialization can now be controlled by the user (PR543).

  • 🖥️ The phase function of the MolecularAtmosphere class can now be forced to a user-defined value for debugging purposes (PR550).

  • The BandSRF class now provides a method to get the associated band central wavelength (PR560).

  • Band-weighted output variables now have a w_srf scalar coordinate that contains the central wavelength of the band (PR560).

Fixed

  • Several dependency caps have been removed (PR539): NumPy 2 is now supported, and recent xarray versions (2025+) are supported.

  • Fixed a bug where the contents of the ERADIATE_PATH environment variable were not converted properly (PR542).

  • Fixed a bug where, when processing simultaneously multiple measures with different SRFs, all kernel sensors were rendered at each iteration of the spectral loop, regardless of whether the sensor is active at the current spectral index (PR555).