# v0.27.x series

## v0.27.0 (29th May 2024)

This is a major release. It brings a new molecular absorption database
infrastructure that drastically improves performance, in particular for
hyperspectral runs. The molecular absorption database configuration interface is
modified, but compatibility with prior syntax will be maintained for a few
versions to let users migrate to the new (simpler) interface without trouble.

We also introduce a new library to handle the configuration of Eradiate. This
notably adds the possibility to configure Eradiate using a configuration file
written in the TOML language.

```{warning}
When upgrading, please check the following:

* Settings are now accessed through the {data}`.config.settings` mapping. Check
  the {ref}`configuration guide <sec-user_guide-config>` to learn more about the
  new options available to configure Eradiate.
* The new molecular absorption handling infrastructure now requires ancillary
  files that will be shipped in the future, but still have to be generated at
  the moment. Be sure to check the updated
  {ref}`installation <sec-user_guide-install>` and
  {ref}`data download <sec-data-intro-download>` instructions.
* The new molecular absorption data configuration now uses a single keyword and
  no longer requires specifying the covered spectral range. For more details,
  check the {class}`.MolecularAtmosphere` reference, the
  {class}`.AbsorptionDatabase` reference  (in particular the
  {meth}`.AbsorptionDatabase.from_name` and {meth}`.AbsorptionDatabase.from_directory`
  constructors), as well as the
  {doc}`molecular atmosphere tutorial </tutorials/getting_started/molecular_atmosphere>`.
* The `distant` keyword is now assigned to the {class}`.DistantMeasure` type. To
  reference the {class}`.MultiDistantMeasure` type in dict-based constructors,
  use the `mdistant` keyword.
```

### Deprecated

* ⚠️ Specifying the spectral range for atmospheric absorption database
  configuration is no longer required. The previous behaviour is removed and
  the corresponding interface is deprecated, but still maintained for
  compatibility (the spectral range will be ignored).

### Removed

* ⚠️ Specifying atmospheric absorption databases using loaded data is no longer
  supported. Instead, instantiate an {class}`.AbsorptionDatabase` object.

### Added

* Introduced a new {class}`.AbsorptionDatabase` abstraction in charge of
  managing atmospheric molecular absorption data ({ghpr}`397`).
* Eradiate can now be configured using TOML files ({ghpr}`397`).
* The `eradiate data fetch` command-line interface now accepts keywords to
  facilitate absorption database downloads ({ghpr}`397`).
* Gaussian SRF datasets can now be dynamically generated using the
  {func}`.srf_tools.make_gaussian` function ({ghpr}`401`).
* All `.Shape` classes now support a `to_world` member, which defines an
  arbitrary transformation of the object ({ghpr}`381`).
* The `eradiate data fetch` command is extended with the possibility to fetch
  groups of files (*e.g.* `eradiate data fetch monotropa`) ({ghpr}`405`).
* An experimental validation framework based on the Cerberus library is now in
  available ({ghpr}`404`). The schema library will be gradually extended. This
  is an alpha-stage feature.
* Added a new `eradiate data check` command to perform checks and fixes on
  molecular absorption databases ({ghpr}`412`).

### Changed

* ⚠️ Most settings are now accessed through the {data}`.settings` mapping
  ({ghpr}`397`).
* 📖 The Data documentation content is extracted from the user guide and moved
  to its own section ({ghpr}`405`).
* Illumination azimuth values out of the [0°, 360°[ range are now allowed and
  issue a warning instead of raising an exception ({ghpr}`409`).

### Fixed

* Large absorption databases are now handled with little to no performance
  penalty ({ghpr}`397`).
* DEM Surfaces would not behave correctly when used with a
  {class}`.SphericalShellGeometry` ({ghpr}`402`).
* CKD bin selection no longer crashes if theoretically identical min and max
  bounds of two adjacent bins have an actual mismatch due to floating point
  precision issues ({ghpr}`406`).
* The SRF weighting operation is removed from monochromatic post-processing
  pipelines ({ghpr}`406`).
* Exponential and Gaussian particle distributions now correctly evaluate to 0
  when queried for values outside the [0, 1] interval ({ghpr}`408`).
* Fixed a bug where geometry vs atmosphere extent check would not work as
  intended ({ghpr}`407`).

### Internal changes

* 🖥️ Settings are now powered by the Dynaconf library ({ghpr}`397`).
* 🖥️ Renamed and refactored atmosphere fixtures for performance and clarity
  ({ghpr}`397`).
* 🖥️ Reorganized test code and fixtures for clarity ({ghpr}`399`).
* 🖥️ Introduced in intermediate abstraction for directional-like illuminants
  ({ghpr}`409`).
* 🖥️ `autodocsumm` is now vendored ({ghpr}`410`).

## v0.27.1 (20th June 2024)

This is a minor feature release. It adds popular aerosol classes from the 6SV
radiative transfer model, a new multi-pixel distant sensor and optimized SRF
data for several instruments.

### Added

* Added 6SV aerosol models (continental, maritime, desert, biomass burning,
  urban and stratospheric) ({ghpr}`415`).
* Optimized spectral response functions for Sentinel-3/OLCI & SLSTR,
  MSG 1 & 4/SEVIRI and PARASOL/POLDER ({ghpr}`417`).

### Changed

* Update data documentation with more details on data formats and built-in data
  content ({ghpr}`415`).
* ⚠️ The `distant` Mitsuba sensor plugin is now exposed as the `distant` measure,
  implemented by the {class}`.DistantMeasure` class. This is a breaking change,
  as the `distant` factory keyword was previously assigned to the
  {class}`MultiDistantMeasure` class. This action contributes to aligning
  measure factory keywords with their corresponding Mitsuba plugin IDs
  ({ghpr}`416`).
* Added the {class}`.MultiPixelDistantMeasure` class (keyword `mpdistant`)
  ({ghpr}`416`).

### Fixed

* Fixed the {func}`.unstack_mdistant_grid()` after a regression due to "recent"
  changes in xarray internals that broke multi-index-based reindexing ({ghpr}`416`).

### Internal changes

* 📖 Generated documentation pages now use Jinja templates ({ghpr}`415`).
* 🖥️ Refactored the distant measure line. The common abstract class is now named
  {class}`.AbstractDistantMeasure` ({ghpr}`416`).
* 🖥️ Refactored the tests for the `frame` module ({ghpr}`416`).
* 🖥️ Added built-in conversion protocol for the {class}`.AzimuthConvention` and
  {class}`.ProgressLevel` enums ({ghpr}`416`).

## v0.27.2 (21st June 2024)

This is a fix release. It fixes broken kernel version requirements.
