# Release v0.12.0

## Breaking Changes

- This library requires C++23 from this version.
- Removed concepts in `base` module that are implemented by concepts in C++ standard library.
- Separated `constants` module into existing `base` and `functions` module.
  - Constants are in `base` module.
  - Mathematical functions are in `functions` module and they are updated for use in both compile time and runtime (for runtime, they use functions in C++ standard library).

## Features

- `logging` module
  - Asynchronous logging (see documentation of logging configuration).
- `multi_double` module
  - Added some mathematical functions for `num_collect::multi_double::quad` class.
- `rbf` module
  - Computation of first, second, third, and fourth-order derivatives of RBF interpolation (classes in `num_collect::rbf::operators` namespace and `evaluate` function in classes of RBF interpolation).
  - Thin plate spline (`num_collect::rbf::thin_plate_spline_interpolator` class).
  - RBFs derived from Gaussian RBF for better precision when used with constant and polynomial terms (`num_collect::rbf::rbfs::gaussian_m1_rbf`, `num_collect::rbf::rbfs::gaussian_from_square_rbf` classes).
  - Support of more vector types in `rbf` module.
- `regularization` module
  - Approximate L-curve (`num_collect::regularization::approx_l_curve` class).
- `util` module
  - Faster implementation of vectors for trivially copyable types (`num_collect::util::trivial_vector` class).
    - This implementation is automatically used in `num_collect::util::vector` class if possible.
    - Some algorithms may work faster thanks to this implementation.
  - Nearest neighbor search (`num_collect::util::nearest_neighbor_searcher` class).
    - This class is a wrapper of nanoflann library to use in algorithms in this project.
    - CSRBF interpolation in `rbf` module uses this class for better performance.

## Improvements

- Common improvements
  - Refactored some implementations and documentations.
- `multi_double` module
  - Fixed accuracy issue of `num_collect::multi_double::quad` class in some cases.
  - Some existing operators in `num_collect::multi_double::quad` class are now invocable at compile time.
- `opt` module
  - Prevent sampling of duplicate points in `num_collect::opt::gaussian_process_optimizer` class.
- `rbf` module
  - Performance improvements of `rbf` module using parallelization via OpenMP.
- `regularization` module
  - Performance improvements of `num_collect::regularization::tv_admm` and `num_collect::regularization::tgv2_admm` classes.