Skip to content

Releases: Axect/Peroxide

v0.41.0

15 Mar 09:01

Choose a tag to compare

Release 0.41.0 (2026-03-15)

Replace enum AD with const-generic Jet<N> (Breaking Change)

Core

  • Replace enum AD { AD0(f64), AD1(f64,f64), AD2(f64,f64,f64) } with struct Jet<const N: usize>
  • Normalized Taylor coefficients — all arithmetic uses simple convolution (no binomial coefficients)
  • Arbitrary-order forward AD: Jet<1>, Jet<2>, ..., Jet<10>, etc.
  • Type aliases: Dual = Jet<1>, HyperDual = Jet<2>
  • Direct sqrt recurrence (instead of powf(0.5))

Proc Macro (peroxide-ad)

  • #[ad_function] now generates f_ad<const JET_ORDER: usize>(x: Jet<JET_ORDER>) -> Jet<JET_ORDER> — arbitrary-order differentiation
  • ad_closure! generates Jet<1> closure

Backward Compatibility

  • AD type alias (= Jet<2>), AD0, AD1, AD2 constructor functions preserved
  • ADFn, ADVec, StableFn impls preserved
  • Real trait implemented for Jet<2> (via AD alias)

Integration Updates

  • jacobian(), newton(), Optimizer updated to use Jet<1> internally
  • newton! macro works with new proc macro output

Documentation

  • KaTeX-rendered math in all doc comments (recurrences for exp, ln, sin/cos, sqrt, inverse trig)
  • Accuracy plot: Jet<N> vs finite differences
  • Taylor convergence plot: sin(x) polynomial approximation
  • New examples: jet_ad.rs, higher_order_ad.rs
  • Updated examples: hessian.rs, real_trait_test.rs
  • 115 new Jet-specific unit tests

Migration Guide

Old (0.40.x) New (0.41.0)
AD1(x, dx) AD1(x, dx) (still works) or Jet::<1>::var(x)
AD2(x, dx, ddx) AD2(x, dx, ddx) (still works) or Jet::<2>::var(x)
fn f(x: AD) -> AD fn f(x: AD) -> AD (still works) or fn f(x: Jet<2>) -> Jet<2>
f_ad(x: AD) (macro) f_ad::<N>(x: Jet<N>) (now generic)
Fn(&Vec<AD>) -> Vec<AD> Fn(&Vec<AD>) -> Vec<AD> (still works)

v0.40.0

24 Jul 03:35

Choose a tag to compare

Release 0.40.0 (2025-07-24)

Move from arrow2 to arrow & parquet

  • Remove arrow2 dependency
  • Add arrow and parquet dependencies
  • Update WithParquet implementation
  • On user side, there are almost no changes in DataFrame API, but there is one change for fuga user:
    • CompressionOptions -> UNCOMPRESSED, SNAPPY, GZIP(level), LZ4, ZSTD(level), BROTLI(level), LZO, LZ4_RAW
    • For prelude user, there are completely no changes. Default compression is SNAPPY.

Release 0.39.11 (2025-07-22)

  • Implement derivative and integral of B-Spline

Full Changelog: v0.39.11...v0.40.0

v0.39.10

11 Jul 01:55

Choose a tag to compare

Release 0.39.10 (2025-07-11)

  • Fixed a bug in the adaptive step size control for all embedded Runge-Kutta methods.
  • Corrected the BU coefficient vector for the 7th order solution in the RKF78 implementation.

Release 0.39.9 (2025-07-10)

  • Change implementation of Gauss-Legendre 4th order method

Full Changelog: v0.39.8...v0.39.10

v0.39.8

23 Jun 11:10

Choose a tag to compare

Release 0.39.8 (2025-06-23)

  • Implement LogNormal distribution
    • LogNormal(mu: f64, sigma: f64)
  • Fix sampling method for Gamma

Full Changelog: v0.39.7...v0.39.8

v0.39.7

27 May 08:49

Choose a tag to compare

Release 0.39.7 (2025-05-27)

  • Add some methods for DataFrame
    • filter_by<F: Fn(Scalar) -> bool>(&self, column: &str, f: F) -> anyhow::Result<DataFrame>
      : Filter rows by a condition on a specific column
    • mask(&self, mask: &Series) -> anyhow::Result<DataFrame>
      : Filter rows by a boolean mask
    • select_rows(&self, indices: &[usize]) -> DataFrame
      : Select specific rows by indices

Release 0.39.6 (2025-05-16)

  • New ODESolver: RKF78
    • Implement RKF78 method for ODESolver

Full Changelog: v0.39.5...v0.39.7

v0.39.5

21 Apr 01:52

Choose a tag to compare

Release 0.39.5 (2025-04-21)

  • New feature rkyv
    • Implement rkyv::{Archive, Serialize, Deserialize} for Matrix, Polynomial, Spline, ODE

Full Changelog: v0.39.4...v0.39.5

v0.39.4

11 Apr 07:22

Choose a tag to compare

Release 0.39.4 (2025-04-11)

Optimize integrate

  • Replace the output signature of gauss_legendre_table and kronrod_table to &'static [f64] to avoid unnecessary allocations.
  • Hard code symmetry of weights and nodes into source code to avoid unnecessary allocations.
  • New helper function - compute_gauss_kronrod_sum_stored
    • Reduce the number of function calls (G+K -> K)
  • Change update method of subinterval tolerance (divide by 2 -> divide by sqrt(2))
  • These changes improve the performance of integrate by 1.2x - 50x (to integrate highly oscillatory functions)

Update dependencies

  • Update rand to 0.9
  • Update rand_distr to 0.5

Full Changelog: v0.39.3...v0.39.4

v0.39.3

13 Mar 01:34

Choose a tag to compare

Release 0.39.3 (2025-03-13)

  • Update puruspe to 0.4.0

Full Changelog: v0.39.2...v0.39.3

v0.39.2

08 Feb 03:32

Choose a tag to compare

Release 0.39.2 (2025-02-06)

  • Implement Broyden method for GL4

Full Changelog: v0.39.1...v0.39.2

v0.39.1

06 Feb 07:54

Choose a tag to compare

Release 0.39.1 (2025-02-06)

  • Add lambert_w doc for crate docs #82 (Thanks to @JSorngard)

  • Add default signature for linspace! #85 (Thanks to @tarolling)

  • Fix a bug in ButcherTableau::step

  • Add another example for ODE (examples/ode_test_orbit.rs)

What's Changed

  • Add Lambert W function to list of special functions in crate docs by @JSorngard in #82
  • ADD: add default signature for linspace macro by @tarolling in #85

New Contributors

Full Changelog: v0.39.0...v0.39.1