Skip to main content

Crate peroxide

Crate peroxide 

Source
Expand description

peroxide is a comprehensive numerical computing library for Rust.

Scientific computing workflows rarely stay inside a single numerical domain: a typical pipeline may solve an ODE, interpolate the result onto an irregular grid, evaluate a quadrature, find a root of a derived quantity, and serialize the output for downstream analysis. In Python, the SciPy + NumPy stack consolidates these capabilities under one namespace. In Rust the equivalent functionality is spread across specialist crates whose type systems and trait hierarchies do not always align.

Peroxide fills that integration gap. It bundles linear algebra (with optional BLAS / LAPACK acceleration), ODE integrators, quadrature, splines, root finding, optimization, statistics and distributions, const-generic forward-mode automatic differentiation (Jet<N>), a DataFrame with parquet / NetCDF / CSV I/O, and an R / MATLAB / Python style macro surface. All of these are designed to interoperate through a shared Real trait and a compile-time-constant Butcher-tableau interface.

The crate is aimed at researchers and engineers who want a batteries-included numerical toolbox in Rust without composing several specialist crates and reconciling their conventions.

See the examples/ directory for 40+ self-contained programs spanning every component, and the companion Peroxide_Gallery repository for longer worked examples (plotting, splines, ODE applications, …).

§Components

peroxide has various components for scientific computation.

  • Linear Algebra (with BLAS & LAPACK)
    • Matrix operations
      • +,-,*,/
      • LU Decomposition, Determinant, Inverse
      • QR Decomposition (O3 feature needed)
      • Singular Value Decomposition (O3 feature needed)
      • Cholesky Decomposition (O3 feature needed)
      • Reduced Row Echelon Form
    • Vector operations
    • Eigenvalue, Eigenvector algorithms
  • Statistics
  • Special functions (Using puruspe crate)
    • Gaussian
    • Gamma
    • Beta
    • Error
    • Incomplete Gamma
    • Incomplete Beta
    • Lambert W
  • Automatic Differentiation
    • Const-generic Jet<N> forward AD (arbitrary-order Taylor mode)
    • Type aliases: Dual = Jet<1>, HyperDual = Jet<2>
    • #[ad_function] proc macro for automatic gradient/hessian
  • Numerical Utils
  • Optimization
    • Gradient Descent
    • Levenberg-Marquardt
  • Root Finding
    • Bisection
    • False Position
    • Secant
    • Newton
    • Broyden
  • Ordinary Differential Equations
    • Explicit
      • Ralston’s 3rd order
      • Runge-Kutta 4th order
      • Ralston’s 4th order
      • Runge-Kutta 5th order
    • Embedded
      • Bogacki-Shampine 3(2)
      • Runge-Kutta-Fehlberg 4(5)
      • Dormand-Prince 5(4)
      • Tsitouras 5(4)
      • Runge-Kutta-Fehlberg 7(8)
    • Implicit
      • Gauss-Legendre 4th order
  • Communication with Python
  • DataFrame
    • Read & Write with parquet or netcdf or csv format
    • Shape & info: nrow, ncol, shape, dtypes, is_empty, contains
    • Row operations: head, tail, slice
    • Column operations: select, rename, column_names, select_dtypes
    • Statistics: describe, sum, mean
    • Series statistics: sum, mean, var, sd, min, max
  • Macros

And all these things are built on mathematical traits.

§Import all at once

Peroxide has two options.

  • prelude : To simple use
  • fuga : To control numerical algorithms

To see differences, follow above two links.

You can import all functions & structures at once

  • prelude
#[macro_use]
extern crate peroxide;
use peroxide::prelude::*;

fn main() {
    // Write what you want
}
  • fuga
#[macro_use]
extern crate peroxide;
use peroxide::fuga::*;

fn main() {
    // Write what you want
}

§Useful tips for features

  • If you want to use QR, SVD, or Cholesky Decomposition, you should use the O3 feature. These decompositions are not implemented in the default feature.

  • If you want to save your numerical results, consider using the parquet or nc features, which correspond to the parquet and netcdf file formats, respectively. These formats are much more efficient than csv and json.

  • For plotting, it is recommended to use the plot feature. However, if you require more customization, you can use the parquet or nc feature to export your data in the parquet or netcdf format and then use Python to create the plots.

    • To read parquet files in Python, you can use the pandas and pyarrow libraries.

    • A template for Python code that works with netcdf files can be found in the Socialst repository.

Modules§

complex
fuga
Choose what you want.
macros
Useful macros
ml
Machine learning tools
numerical
Differential equations & Numerical Analysis tools
prelude
Do not disturbed. Just use.
special
Special functions module
statistics
Statistical Modules
structure
Main structures for peroxide
traits
util
Utility - plot, print, pickle and etc.

Macros§

bisection
High level macro for bisection
c
R like concatenate (Type: Vec<f64>)
cbind
R like cbind
dnorm
R like dnorm
dt
R like dt
eye
MATLAB like eye - identity matrix
false_position
High level macro for false position
hstack
linspace
MATLAB like linspace
lm
R like lm
matrix
More R like Matrix constructor (Macro)
newton
High level macro for newton (using Automatic differentiation)
pnorm
R like pnorm
pt
R like pt
rand
MATLAB like rand - random matrix
rbind
R like rbind
rnorm
R like random normal
rt
R like random Student’s t
runif
R like random uniform
secant
High level macro for secant
seq
R like seq macro
single_derivative
Macro for single derivative
single_function
Macro for single function
vstack
zeros
MATLAB like zeros - zero matrix