24556f51d7
- 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.
6.6 KiB
6.6 KiB
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.1to the stable2.0.0release. - PyPI distribution name remains
optimiz-rs(continuity with v1.0.x); the Rust crate is alsooptimiz-rs. Both expose the Python moduleoptimizr. - 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 bytest_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_riccatiis 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 ODEdY = -ρ Y dt).bsde::deep_bsde_bridge—ConditionalExpectationtrait andDeepBsdeBridgedriver 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 = fSOR solver verified against thesin(π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-formP(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_hooks—GenerativeSamplertrait + Gaussian MMD loss + finite-difference calibration step.
Tests
- 38 new
#[test]cases — all passing (cargo test --lib --no-default-featurespasses 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-instanceconsumers.
[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 equationdA/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 standardZ/2matrix-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.1to1.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.