datarust 0.6.1

Scikit-learn-style preprocessing and classical ML in Rust
Documentation
# Installation

## Cargo

```toml
[dependencies]
datarust = "0.6"
```

The default build has **zero external dependencies** — `cargo add datarust` pulls in nothing but the standard library.

## Optional features

All features are opt-in and independent. Enable the ones you need:

```toml
[dependencies]
datarust = { version = "0.6", features = ["serde", "rayon", "matrixmultiply"] }
```

### `serde`

Enables JSON serialization of fitted transformers via `datarust::serialize::{save_json, load_json, to_json, from_json}`. Models serialize to human-readable JSON (not pickle).

```rust
use datarust::serialize::{save_json, load_json};
use datarust::scaler::StandardScaler;
use datarust::traits::Transformer;

let mut scaler = StandardScaler::new();
scaler.fit(&x)?;

// Save
save_json(&scaler, "model.json")?;

// Load into a fresh instance
let restored: StandardScaler = load_json("model.json")?;
let out = restored.transform(&x)?;
```

### `rayon`

Enables parallel column/row operations for large datasets. Speeds up scaler transforms, encoders, and the KNN imputer on inputs above ~4 000 rows.

### `matrixmultiply`

Enables a tuned pure-Rust GEMM (via the `matrixmultiply` crate, **no system BLAS**) for `Matrix::matmul` and centered-covariance computation. Significantly speeds up PCA, TruncatedSVD, and the linear models on large dense inputs. The default build remains zero-external-dependency; opt in with this feature.

### `datasets`

Embeds four classic toy datasets (Iris, Breast Cancer, Wine, Diabetes) as `const` arrays for examples, tests, and onboarding. No file I/O, no network access — the data is compiled into the binary. See the [Datasets guide](./guide/datasets.md).

## Rust version

datarust targets **Rust 1.70+** (the `rust-version` field in `Cargo.toml`). It is tested against stable, beta, and the MSRV in CI.

## Platform support

CI runs on **Ubuntu** and **macOS** (both x86-64 and arm64). WASM should work for the default build (no system calls, no threading without `rayon`), though it is not formally tested.