v0.23.x and older#

v0.23.2 (8th July 2023)#

Release highlights:

  • Eradiate is now published on PyPI and can be installed using Pip. See the new installation instructions This is still experimental and feedback is welcome.

  • The spectral configuration of measures has changed. The new behaviour is documented in the Spectral discretization guide.

  • A new AstroObjectIllumination model has been added. It models the illumination by a distant celestial body with a finite apparent size in the sky. Support for this illumination model is currently experimental.

  • The DEMExperiment now supports the spherical-shell geometry.

  • The command-line interface now uses the Typer framework for improved user experience.

Breaking changes#

  • Removed the Docker images implementation, deployment and documentation from the Eradiate repository (PR322). Docker builds are no longer supported for now.

  • Measure no longer takes a spectral_cfg parameter but instead a srf parameter (PR311).

  • In CKD modes with absorbing molecular atmospheres, the way to control the bin set is to set the atmosphere’s absorption_dataset with an absorption dataset that has the corresponding desired bin set (PR311).

  • UniformSpectrum is no longer a valid spectrum type to use for spectral response functions (PR311).

  • The MultiDistantMeasure.from_viewing_angles() constructor is removed (PR315). Use one of the other MultiDistantMeasure constructors instead.

  • The ertdata and ertshow command-line entry points are removed (PR324). Instead, use eradiate data and eradiate show.

  • The KernelDictContext class is renamed KernelContext (PR324).

  • The absorption_dataset parameter of AFGL1986RadProfile and US76ApproxRadProfile is now required (PR334).

Deprecations and removals#

  • ⚠️ Removed SpectralContext and subclasses (PR311).

  • ⚠️ Removed MeasureSpectralConfig and subclasses (PR311).

  • ⚠️ Removed the MultiDistantMeasure.from_viewing_angles() constructor (PR315).

  • ⚠️ Removed ertdata and ertshow command-line entry points (PR324).

Improvements and fixes#

  • Added MultiDeltaSpectrum spectrum type (PR311).

  • Exposed several API members in the top-level namespace (PR324).

  • Exposed the eradiate.spectral.* subpackage members in the eradiate.spectral namespace (PR324).

  • Fixed incorrect Mitsuba scene parameter drop and lookup (PR329).

  • Added spherical-shell geometry support to DEM components PR320.

  • Fixed broken symmetry between Spectrum dictionary and object conversion protocols (PR336).

  • Provided an Eradiate PyPI package (PR328).

  • Added AstroObjectIllumination illumination type (PR331, PR346).

  • Fixed a bug where Layout constructors would not raise if passed invalid azimuth values (i.e. outside the [0, 180]° range) (PR345).

  • Added wavelength_range optional parameter to MolecularAtmosphere.ussa_1976() constructor to automatically open absorption datasets and restore working default constructor (PR334).


  • Added a user guide page on spectral discretization.

Internal changes#

  • Spectral dispatch with functools.singledispatchmethod (PR311).

  • Experiments define the spectral discretization, based on information from its measure, its atmosphere components if applicable, and a default spectral set (PR311).

  • Rewrote the CLI using the Typer framework (PR326).

  • Refactored Layout constructor code (PR345).

v0.23.1 (21 April 2023)#

Breaking changes#

  • The coddington_2021-1_nm dataset is now the default solar irradiance spectrum (PR300). If you used to work with the default value when defining the illumination in your experiments, this change might affect the measured radiance values.

  • The newly introduced DEMExperiment now holds the support for digital elevation models. Accordingly, the AtmosphereExperiment does no longer support digital elevation models.

Deprecations and removals#

  • The MultiDistantMeasure.from_viewing_angles() constructor is deprecated and will be removed in v0.23.2.

  • Removed EradiateConfig.data_path (PR292).

  • Measure: Sample count split is retired (PR296).

  • Removed the AggregateSampleCount pipeline step (PR296).

  • RadProfile: The ArrayRadProfile class is retired (PR296).

Improvements and fixes#

  • Added support for loading spectral response function data sets from custom paths (PR270).

  • ⚠️ Complete rewrite of the MultiDistantMeasure construction code (PR274, PR281). Previous functionality is preserved in the form of more specialized and simpler interfaces, and we now support a gridded coverage of the hemisphere specified as the Cartesian product of zenith and azimuth lists of values.

  • Added a helper to grid against VZA and VAA the results obtained with a MultiDistantMeasure with a grid layout (PR274). See unstack_mdistant_grid().

  • MeasureSpectralConfig.srf’s converter loads the prepared SRF version first, by default, and falls back to the raw version if the former does not exist, in the case where srf is specified by a keyword (PR278).

  • Fixed the behaviour of the MeshTreeElement constructor when no units are specified (PR279).

  • Extended the distant measure line with the possibility to control the distance between ray origins and the target (PR275). The default behaviour is unchanged, effectively positioning ray origins at an infinite distance from the target.

  • All measures can now be attached a non-default sampler (PR280).

  • Fixed unnecessary memory allocations (PR282).

  • Added utility functions to srf_tools module (PR283).

  • Added MQDiffuseBSDF reflection model (PR286).

  • Fixed a bug where the bilambertian BSDF plugin would produce incorrect results when used with LLVM Mitsuba variants (PR297).

  • ⚠️ Refactoring of the Mode infrastructure (PR298).

  • Added versions 1 and 2 and the full spectrum extension of the TSIS-1 HSRS solar irradiance spectra (PR300).

  • The coddington_2021-1_nm dataset is now the default solar irradiance spectrum (PR300).

  • Introduced the DEMExperiment to handle scenes with digital elevation models. At this point it only supports plane-parallel atmospheric geometries (PR289).

  • ⚠️ Rewrite of the kernel interface (PR296).

  • ⚠️ Updates to the scene type hierarchy (PR296).

  • ⚠️ All measures are now batch-computed at each iteration of the spectral loop (PR296).

  • ⚠️ Atmosphere type hierarchy updates: altitude grid control, common spectral evaluation interface (PR296).

  • BlendPhaseFunction code was transitioned from a recursive to an iterative loop-based implementation (PR296).

  • RadProfile evaluation on arbitrary altitude grids is now permitted (PR296).

  • Introduced the SpotIllumination, which points a beam of light of fixed angular width at a target location (PR302).

  • Added a new module eradiate.constants to store physical constants used in Eradiate (PR312).

  • Added absorption and scattering bypass switches to the ParticleLayer class (PR316).

  • ⚠️ Moved Mitsuba logs to the mitsuba logger (PR318).

  • ⚠️ Centralized geometric information to SceneGeometry (PR319).

  • ⚠️ Made Atmosphere’s _params_* properties abstract for improved safety (PR319).

  • Fixed a major issue in volume definitions and parameter updates of BlendPhaseFunction (PR319).


  • Upgraded Sphinx Book theme to v1.0.0 (PR306).

Internal changes#

v0.22.5 (17 October 2022)#

New features#

  • Added support for various azimuth definition conventions (PR247).

  • Added an offline mode which disables all data file downloads (PR249).

  • Added support for Digital Elevation Models (DEM) (PR246).

Breaking changes#

  • Dropped the xarray metadata validation system (PR266).

Deprecations and removals#

  • Removed the deprecated Experiment.run() method (PR210).

  • Removed the path resolver component (PR251).

  • Renamed Experiment classes (PR252).

    • OneDimExperimentAtmosphereExperiment

    • RamiExperimentCanopyExperiment

    • Rami4ATMExperimentCanopyAtmosphereExperiment

Improvements and fixes#

  • Added the atmo-centimeter, a.k.a. atm-cm, to the unit registry (PR245).

  • Added spectral response functions for the VIIRS instrument onboard JPSS1 and NPP platforms (PR253).

  • Submodules and packages are now imported lazily (PR254, PR261). This significantly decreases import time for most use cases.

  • Optimized calls to Quantity.m_as() in InstancedCanopyElement.kernel_instances() (PR256).

  • Fixed incorrect scaling formula for datetime-based scaling of Solar irradiance spectra (PR258).

  • Added system information report to the eradiate show command-line utility (PR264).

  • Some dependencies are now optional, although recommended (PR266).

  • Added new sahara and continental particle radiative properties including the full scattering phase matrix (PR259).

  • Allow mixing a purely absorbing MolecularAtmosphere with a ParticleLayer (PR239).

  • Change the ExponentialParticleDistribution formulation to rate-based; allow scale-based parametrization for initialization (PR271).

  • Fixed missing parameters in the LeafCloud.sphere() constructor (PR272).

  • Add spectral response function filtering utility (PR269).


  • Dependencies are now listed explicitly (PR266).

  • Major tutorial overhaul (PR209).

  • Rendered tutorial notebooks and added thumbnail galleries (PR273).

Internal changes#

  • Updated Mitsuba submodule to v3.0.2 (PR250, PR255, PR267). This notably fixes the sampling method of the tabphase plugin and a Dr.Jit warning on some Linux machines.

  • Aligned the tabphase_irregular plugin with the fix tabphase code (PR255).

  • Updated codebase to use attrsnext-generation APIs (PR268).

v0.22.4 (17 June 2022)#

New features#

  • Added a InterpolatedSpectrum.from_dataarray() class method constructor (PR243).

Breaking changes#

  • Removed temporary volume files used by the AbstractHeterogeneousAtmosphere line and the BlendPhaseFunction class (replaced by in-memory buffers). Corresponding file name and cache directory control parameters were removed as well (PR231).

Deprecations and removals#

  • Updated all tests to use eradiate.run() instead of the deprecated Experiment.run() method (PR227).

Improvements and fixes#

  • Added spectral response function data sets for POLDER instrument onboard PARASOL platform (PR232).

  • Added an extrapolated version of the thuillier_2003 solar irradiance spectrum to cover the full wavelength range of Eradiate (PR233).

  • Fixed a bug where converting an integer to a Spectrum would fail (PR236).

  • Fixed a bug where the two BSDFs in the CentralPatchSurface would be assigned in the wrong order (PR237).

  • Raise an exception when molecular concentrations are out of bounds (PR237).

  • Various fixes to the rpv plugin, among which a missing PDF term in the sample() method (PR240).

  • Fix incorrect spectral indexing of result datasets in CKD mode (PR241).

  • Improve the Solar irradiance spectrum initialization sequence (PR242).

  • The thuillier_2003_extrapolated dataset is now the default Solar irradiance spectrum (PR242).

Internal changes#

  • Transitioned dependency management to pyproject.toml following PEP 621 (PR203).

  • Updated Mitsuba submodule (PR228).

  • Removed the angular regridding feature in TabulatedPhaseFunction and replaced with plugin selection (PR229).

v0.22.3 (22 May 2022)#

New features#

  • Added entry point eradiate.run(), which executes a full experiment pipeline and returns results as an xarray dataset (PR210).

Breaking changes#

  • Changed the ParticleLayer.dataset field’s default value to the more useful the continental aerosol dataset spectra/particles/govaerts_2021-continental.nc (PR212).

  • Changed the interface of the ParticleLayer: the tau_550 field is replaced by a more general tau_ref which sets the extinction optical thickness of the particle layer at a reference wavelength specified by the w_ref field. w_ref defaults to 550 nm, thus preserving prior behaviour (PR221).

Deprecations and removals#

  • Removed deprecated function ensure_array() (6228214).

  • Deprecated instance method Experiment.run() (PR210).

Improvements and fixes#

  • Added support for all missing AFGL 1986 reference atmospheres in CKD mode (PR185).

  • Fixed incorrect phase function blending in multi-component atmospheres (PR197, PR206).

  • Fixed incorrect volume data transform for spherical heterogeneous atmospheres (PR199).

  • Added default value for CKDSpectralContext.bin_set (PR205).

  • Added a -l option to the eradiate data info command-line utility. If this flag is set, the tool displays the list of files registered to each data store (PR208).

  • Added an optional DATA_STORES argument to the eradiate data info command-line utility which may be used to select the data stores for which information is requested (PR208).

  • Added a new load_dataset() converter. It allows to set fields expecting an x array dataset using a path to a file or a data store resource (PR212).

  • The ParticleLayer class no longer opens a dataset upon collision coefficient evaluation; instead, its dataset field now holds an xarray dataset (instead of a path), which does not change over the instance lifetime. This reduces the amount of time spent on I/O (PR212).

  • Added the possibility to optionally export extra fields useful for analysis and debugging upon calling AbstractHeterogeneousAtmosphere.eval_radprops() (PR206, PR212).

  • Re-formatted spectra/particles/govaerts_2021-*-extrapolated.nc data sets (PR213).

  • Replaced leftover calls to deprecated eradiate.data.open with eradiate.data.open_dataset (PR220).

  • Improved TabulatedPhaseFunction’s behaviour. If the phase function lookup table coordinate mu defines a regular grid, the phase function is no longer resampled on a regular grid, which results in improved performance. Otherwise, i.e. if mu defines an irregular grid, phase function data is resampled on a regular mu grid with a step equal to the smallest detected step in the mu coordinate array, which preserves accuracy (PR226).


  • Added tutorials on homogeneous and molecular atmospheres (PR194).

  • Added uninstallation instructions (PR217).

  • ParticleLayer: document format of dataset attribute (PR223).

Internal changes#

  • The progress configuration variable is now an IntEnum, allowing for string-based setting while retaining comparison capabilities (PR202).

  • Internal _util library is now util.misc (5a593d3).

  • Added a Numpydoc docstring parsing module (PR200).

  • Added a deprecated() decorator to mark a component for deprecation (PR200).

  • Updated regression testing interface for improved robustness and ease of use (PR207).

  • Rewrote eradiate data info CLI for improved maintainability (PR208).

  • Refactored ParticleLayer unit tests and added system tests (PR219, PR222, PR224).

v0.22.2 (23 March 2022)#

New features#

Improvements and fixes#

  • Account for spectral dependency of the King correction factor (PR187).

  • Fix wrong atmosphere shape size in plane parallel geometry with no scattering (PR195).


  • Major update of all documentation contents (PR192, PR193 and many commits).

  • Add Sphinx roles for GitHub links (2789499).

  • Add SVG to PNG export script (9e942a4).

  • Update logos with a more modern style (a3dfe36).

Internal changes#

  • Refactor regression testing framework to handle more use cases and make it more robust (PR188).

v0.22.1 (14 March 2022)#

This is the first official release of Eradiate.