v0.29.x series (current stable)#

v0.29.0 (7th October 2024)#

In this major release, we add official support for polarized radiative transfer simulation. Polarization is currently supported for the atmosphere (molecular and aerosol components), stay tuned for updates on polarized surface models. This feature is controlled by the mode switcher: just call eradiate.set_mode("mono_polarizated") or eradiate.set_mode("ckd_polarizated") when you start setting up your simulation. After post-processing, the four Stokes vector components are added to the output product.

We also heavily refactored the components that handle the spectral dimension. We clarified the spectral discretization model and modified some interface points to make things more explicit. We significantly improved spectral component inspection (typically, the spectral grid and spectral response functions). Have a look at our revamped spectral discretization guide.

Finally, we updated our surface mesh generation component to also add texture coordinates to the produced mesh. This allows to define surface textures, a key feature when it comes to assembling 3D scenes.

Warning

When upgrading, pay attention to the following:

  • When setting up an experiment, the parameter controlling the spectral quadrature point count configuration is changed from quad_spec to ckd_quad_config. This parameter now accepts a CKDQuadConfig instance or a dictionary. You will have to update this if you were using this feature.

  • Instrument spectral response functions are now specified using the SpectralResponseFunction type. The dictionary syntax remains unchanged. SRF objects can now be visualized in Jupyter notebooks.

Removed#

  • ⚠️ The SpectralSet class and children are removed (PR439). Spectral discretization is now handled by the SpectralGrid class and its children.

  • ⚠️ The Atmosphere.spectral_set() method is removed (PR439). The responsibility of deriving a spectral grid from a molecular absorption database is transferred to the SpectralGrid.from_absorption_database() constructor.

  • ⚠️ The MultiDeltaSpectrum class is removed (PR439). Spectral response functions are now modelled using dedicated types (SpectralResponseFunction and children).

  • ⚠️ Several SRF-related methods of the Spectrum family are removed (PR439). The corresponding functionality is transferred to the SpectralResponseFunction family.

  • ⚠️ The QuadSpec class is removed (PR439). Its functionality is transferred to the CKDQuadConfig type.

  • ⚠️ The AbstractHeterogeneousAtmosphere.eval_transmittance_accross_spectral_set() is removed and its functionality transferred to the eval_transmittance_mono() and eval_transmittance_ckd() helpers (PR439).

Added#

  • The mesh_from_dem() function optionally adds texture coordinates to the generated mesh (PR435).

  • The BufferMeshShape class can now initialize texture coordinates as well (PR435).

  • Added polarized mode, Rayleigh and tabulated phase functions (PR438, PR445).

  • A new SpectralGrid type hierarchy is added (PR439). It handles the spectral discretization.

  • A new SpectralResponseFunction type hierarchy is added (PR439). It models the spectral response function of instruments.

  • 🖥️ A new SubtypeDispatcher type is added (PR439). This class is a very simple factory intended to dispatch subtypes of a parent type depending on the current active mode.

  • 🖥️ A new is_sorted() validator is added (PR439).

Changed#

  • The CLI now displays standard stack traces instead of prettifying them with Rich (PR434). The previous behaviour is still available with the --debug CLI option.

  • Improved error reporting when loading absorption databases with corrupt index files (PR434).

  • 🖥️ Updated Mitsuba submodule to v0.3.0 (PR444).

  • ⚠️ The quad_spec parameter of the Experiment constructors is replaced by the ckd_quad_config parameter (PR439).

  • ⚠️ The Measure.srf field is now a SpectralResponseFunction instance (PR439). The dictionary interface used in Measure constructors remains unchanged.

  • ⚠️ The eradiate.spectral subpackage is reorganized (PR439). The main components are still exposed in eradiate.spectral directly.

  • ⚠️ The background spectral grid, formerly exposed as Experiment.default_spectral_set, is now private and renamed _background_spectral_grid (PR439). It can still be configured by the background_spectral_grid parameter.

  • 📖 Overhauled the Spectral discretization guide (PR439).

  • 📖 Improved factory documentation (PR441).

Internal changes#

  • 🖥️ Added an explicit CKD spectral quadrature calculation step to the initialization sequence of Experiment instances (PR439).

  • 🖥️ Switched to Pixi for project management (PR440).

  • 🖥️ Removed unused rad_profile_factory (PR441).

  • ⚠️ 🖥️ Refactored attrs-based features (PR437).

  • ⚠️ 🖥️ The Mode.check() method’s signature is changed (PR439). It accepts now a combination of ModeFlag values.

  • ⚠️ 🖥️ The MultiGenerator is moved to eradiate.util.misc (PR439).

  • ⚠️ 🖥️ Refactored DEM handling infrastructure (PR428).

v0.29.1 (25th October 2024)#

This is a minor feature release. It updates the radiometric kernel to v0.3.1, which adds the selectbsdf plugin, and introduces the transitional expert interface, which allows to inject Mitsuba scene dictionary fragments manually in an experiment.

This interface is called ‘transitional’ because, although its syntax and idioms can be considered stable, it has not been fully propagated through the Eradiate codebase yet. This upgrade is planned for the next major release.

Added#

  • Introducing the transitional expert interface (PR452).

Changed#

  • 🖥️ Updated Mitsuba submodule to v0.3.1.

  • 🖥️ The modes() function now returns a list of identifiers by default (6f9d50).

Fixed#

  • Fixed incorrect CKD absorption database index generation method (PR454).

v0.29.2 (9th November 2024)#

Deprecated#

Added#

Changed#

  • Transferred the Gaussian SRF dataset creation function make_gaussian() to the eradiate.spectral.response subpackage (PR458).

Fixed#

  • Fixed Gaussian SRF padding strategy (PR458).

  • Fixed mi_traverse() name ID override for non-top-level nodes (PR461).