Feature flags
Cargo features in stochastic-rs — what each one pulls in, how they propagate across the workspace, and which features your crates need.
Feature flags
Cargo features in this workspace are opt-in. The default build links no GPU, no BLAS, no Python, no neural surrogates — just the pure Rust core.
The matrix
| Feature | Owner crate | Pulls in | Use when |
|---|---|---|---|
ai | umbrella | stochastic-rs-ai, candle-core | NN volatility surrogates |
cuda | -stochastic | cudarc, cuda-runtime | NVIDIA GPU FGN / fBM samplers |
metal | -stochastic | metal-rs | macOS GPU FGN / fBM samplers |
openblas | -stats, -quant | ndarray-linalg/openblas | MLE, multivariate copulas, Cholesky-heavy |
viz | umbrella | stochastic-rs-viz, plotly | Quick HTML plots |
python | -py (cdylib) | pyo3, numpy | Building the wheel via maturin |
hotpath | umbrella | tracing-subscriber | Hot-path profiling helpers |
Propagation
A feature on the umbrella stochastic-rs crate maps to a feature on the
relevant sub-crate. Example from the umbrella Cargo.toml:
[features]
default = []
ai = ["stochastic-rs-ai"]
viz = ["stochastic-rs-viz"]
cuda = ["stochastic-rs-stochastic/cuda"]
metal = ["stochastic-rs-stochastic/metal"]
openblas = [
"stochastic-rs-stats/openblas",
"stochastic-rs-quant/openblas",
]If you depend on a sub-crate directly (recommended for lean builds), you enable the feature on that sub-crate:
stochastic-rs-stats = { version = "2.0.0", features = ["openblas"] }Common gotchas
openblasis platform-specific. On macOS useRUSTFLAGS=-L/opt/homebrew/opt/openblas/libor thesystemlinkage. On Linuxapt install libopenblas-dev.cudarequires the CUDA toolkit on the build machine. CI builds do not install it by default.aiis heavy. It pulls incandle-core, which is a substantial ML stack. Only enable when you actually need NN surrogates.
Defining a new feature
When adding a new optional dependency, follow the feature-flag-management SKILL. The short version:
- Add the feature on the owner sub-crate (where the optional dependency lives).
- Re-export the feature on the umbrella via
feature_x = ["stochastic-rs-sub/feature_x"]. - Update the matrix above and the per-feature CI job.
- Add a
cfg-gated module so default builds don't pull in the dep.
PricerExt and ModelPricer
The two pricer trait surfaces — date-aware PricerExt for vanilla flow, and concrete-typed ModelPricer for fast Greeks and calibration without &dyn.
Design philosophy
Why the library is shaped the way it is — generic over float, no statrs, paper-anchored implementations, comparison-test mandatory, plus non-goals.