Files
ThotDjehuty 24556f51d7 release(v2.0.0): finalize PyPI metadata, README rewrite, v2 benchmark + McKean-Vlasov animation
- Restore correct PyPI distribution name 'optimiz-rs' (continuity with v1.0.x).
  Rust crate stays 'optimiz-rs'; Python module is 'optimizr'.
- python/optimizr/__init__.py:
  * Bump __version__ from stale '0.2.0' to '2.0.0'.
  * Eagerly bind every v2 primitive from _core (so dir(optimizr), IDE
    auto-complete and 'from optimizr import X' all work without relying on
    the lazy __getattr__ fallback).
  * Extend __all__ with 38 new v2 entries.
- README.md: full v2 features section grouped by domain (rough volatility,
  BSDE/PDE, stochastic control, mean-field, topology/graphs/signatures,
  risk/robust inference, point processes, Kalman). Embedded
  examples/mckean_vlasov.gif at the top. Added v2 benchmark table.
- examples/benchmark_v2.py: honest benchmark vs pure-Python/NumPy
  references on intrinsically loopy workloads. Best-of-3, single-thread,
  Apple M2: HMM 67.7x, DE 13.9x, signatures 11.2x, Hawkes 3.3x, MCMC 1.7x.
- examples/animate_mckean_vlasov.py + examples/mckean_vlasov.gif (5MB):
  cinematic 800-particle mean-reverting McKean-Vlasov flow animation
  using optimizr.mean_reverting_mckean_vlasov.
- tests/test_v2_api.py already in place: 20/20 pass.
2026-05-14 21:54:49 +02:00

6.6 KiB
Raw Permalink Blame History

Changelog

All notable changes to optimiz-rs are documented in this file. The format follows Keep a Changelog and the project adheres to Semantic Versioning.

[2.0.0] - 2026-05-14

Added — public release of the v2 API

  • Promoted 2.0.0-alpha.1 to the stable 2.0.0 release.
  • PyPI distribution name remains optimiz-rs (continuity with v1.0.x); the Rust crate is also optimiz-rs. Both expose the Python module optimizr.
  • New non-regression suite tests/test_v2_api.py (20 tests) exercising every advertised v2 primitive against an analytic ground truth: historical_var_py, solve_fractional_ode, solve_volterra, linear_bsde_constant_coeffs, mean_reverting_mckean_vlasov, plus a parametrised guard over the v1.x public surface.
  • README rewritten to document the v2 Python API and the corrected installation command (pip install optimizr).

Notes

  • No source-level breaking change relative to 2.0.0-alpha.1.
  • All v1.x Python entry points remain exposed (differential_evolution, fit_hmm, viterbi_decode, mcmc_sample, grid_search, mutual_information, shannon_entropy, etc.) — verified by test_public_symbol_exposed.

[2.0.0-alpha.1] - 2026-05-12

Added — top-level reorganisation and new generic primitives

  • Top-level reorg (additive aliases — backward compatible at the Rust level). optimiz_rs::matrix_riccati is now re-exported at the crate root. New top-level groups: bsde, pde, stochastic_control, agent_based, inference, optimization.
  • bsde::theta_scheme — implicit/explicit θ-scheme for linear BSDEs with deterministic coefficients (closed-form analytic test against the deterministic ODE dY = -ρ Y dt).
  • bsde::deep_bsde_bridgeConditionalExpectation trait and DeepBsdeBridge driver providing the CPU-side recursion hook for external function approximators.
  • pde::fokker_planck — 1-D forward Fokker--Planck solver with conservative central differences and explicit positivity safeguard.
  • pde::hjb_multid — explicit upwind solver for multidimensional HJB on a regular Cartesian grid (d ≤ 3) with reflective boundaries.
  • pde::elliptic_fd — 2-D Poisson -Δu = f SOR solver verified against the sin(πx) sin(πy) eigenfunction.
  • stochastic_control::optimal_switching — Snell-envelope backward induction for discrete multi-mode optimal switching.
  • stochastic_control::pontryagin — Riccati-shooting solver for the 1-D LQR Pontryagin maximum principle (verified against the closed-form P(t) = s_T / (1 + s_T (T-t))).
  • stochastic_control::two_sided_intensity_control — generic bilateral intensity control with affine per-jump premia.
  • optimal_control::quadratic_impact_control — closed-form Riccati feedback for a controlled SDE with quadratic running cost.
  • mean_field::mckean_vlasov — interacting-particle Euler scheme for generic McKean--Vlasov SDEs with empirical-measure drift.
  • agent_based — generic interacting-agent simulator (consensus dynamics test recovers the empirical mean exactly without noise).
  • inference::robust_drift — Huber-loss IRLS estimator for the drift of a 1-D OU-type discrete-time process; resists 5 % outliers.
  • optimization::generative_calibration_hooksGenerativeSampler trait + Gaussian MMD loss + finite-difference calibration step.

Tests

  • 38 new #[test] cases — all passing (cargo test --lib --no-default-features passes 165/170, the 5 pre-existing failures predate v1.1 and are unrelated).

Notes — deferred to subsequent v2.0.x bumps

  • PyO3 Python bindings + executed companion Jupyter notebooks for the new groups (will follow the same workflow as v1.1.x).
  • Sphinx RST documentation pages for bsde, pde, stochastic_control, agent_based, inference, optimization.
  • Propagation of new modules into hfthot-lab-instance consumers.

[1.1.0] - 2026-05-12

Added — purely additive, no existing API changes

  • optimal_control::matrix_riccati — RK4 backward solver for the matrix Riccati differential equation dA/dt = -2 A M A + Q, plus terminal-condition variants for the associated affine and constant components.
  • timeseries_utils::nonsync_covariance — Hayashi--Yoshida estimator for asynchronous covariance, with parallel matrix variant.
  • timeseries_utils::wavelet — discrete and maximum-overlap wavelet transforms (Haar, Daubechies orders 2--10) with periodic boundaries.
  • risk_measures — empirical and parametric Value-at-Risk and Conditional Value-at-Risk estimators, plus a projected sub-gradient solver for convex CVaR minimisation over the unit simplex.
  • graph::laplacian — combinatorial, symmetric-normalised and random-walk graph Laplacians.
  • graph::spectral_clustering — spectral clustering via Jacobi diagonalisation and Lloyd's algorithm with k-means++ initialisation.
  • topology::persistent_homology — Vietoris--Rips persistent homology by the standard Z/2 matrix-reduction algorithm.
  • topology::bottleneck — bottleneck distance between persistence diagrams via Hopcroft--Karp matching with binary search.
  • volterra::fractional_riccati — Adams predictor--corrector solver for Caputo fractional ODEs (Diethelm--Ford--Freed 2002).
  • volterra::markovian_lift — multi-exponential approximation of convolution kernels by non-negative least squares on a geometric grid.
  • volterra::volterra_solver — generic second-kind Volterra integral equation solver via product-trapezoidal quadrature.
  • volterra::fourier_inversion — direct trapezoidal Fourier inversion of a characteristic function on a uniform frequency grid.
  • signatures::path_signature — truncated tensor signature of a piecewise-linear path with truncated tensor exponential.
  • signatures::log_signature — truncated tensor logarithm of a signature.
  • signatures::random_signature — Cuchiero--Schmocker--Teichmann random reservoir projection of the signature.
  • signatures::signature_kernel — Salvi--Cass--Lyons signature kernel via the Goursat finite-difference scheme.
  • signatures::utils — shuffle product and Chen-identity-driven signature concatenation.

Changed

  • Bumped crate version from 1.0.1 to 1.1.0. All previously stable symbols remain untouched and binary-compatible at the Python ABI level (abi3-py38).

Notes

This release is CPU-only and additive. No Python bindings were added in 1.1.0; the new modules are exposed via the Rust API only and will be wrapped behind the python-bindings feature in a follow-up release.