rssn 0.2.2

A comprehensive scientific computing library for Rust, aiming for feature parity with NumPy, SciPy, and SymPy.
Documentation
[package]
name = "rssn"
version = "0.2.2"
edition = "2024"
rust-version = "1.89.0"
authors = ["The rssn developers"]
description = "A comprehensive scientific computing library for Rust, aiming for feature parity with NumPy, SciPy, and SymPy."
license = "Apache-2.0"
repository = "https://github.com/Apich-Organization/rssn"
homepage = "https://github.com/Apich-Organization/rssn"
readme = "README.md"
keywords = [
    "scientific-computing",
    "symbolic-math",
    "numerical-analysis",
    "physics-simulation",
    "optimization",
]
categories = [
    "science",
    "mathematics",
    "data-structures",
    "simulation",
    "algorithms",
]
exclude = [
    "examples/*",
    "tests/*",
    "benches/*",
    "doc/*",
    ".gitea/*",
    ".github/*",
    ".vscode/*",
    ".idea/*",
    "*.sh",
    "*.bat",
    "scripts/*",
    "docs/*",
    "rssn.h",
    "rssn.hpp"
]

[lib]
crate-type = ["cdylib", "rlib", "staticlib"]

[profile.dev]
lto = false
opt-level = 0
debug = true

[profile.release]
lto = true
codegen-units = 1
panic = "abort"
opt-level = 3
strip = true
debug = false

[dependencies]
uuid = { version = "1.4", features = ["v4"] }
libc = { version = "0.2", optional = true }
ndarray = { version = "0.16.1", features = ["serde"] }
statrs = "0.18"
argmin-math = { version = "0.5", features = [
    "ndarray_latest-nolinalg",
    "nalgebra_latest",
] }
argmin = { version = "0.11", features = ["serde", "serde1"] }
nalgebra = { version = "0.34", features = ["serde-serialize"] }
quadrature = "0.1"
interp = "2.1"
itertools = "0.14"
rustfft = "6.1"
sprs-rssn = "0.11"
uom = { version = "0.37", features = [
    "use_serde",
    "num-bigint",
    "std",
    "usize",
    "si",
] }
bigdecimal = { version = "0.4", features = ["serde"] }
special = "0.11"
errorfunctions = "0.2"
ndarray-npy = { version = "0.9", optional = true }
rayon = "1.8"
bincode-next = { version = "2", features = ["serde"] }
# NOTE: Both rand 0.8.5 and 0.9.2 are required.
# `rand` 0.8.5 is used for compatibility with existing dependencies and safe upgrade path.
# `rand_v09` (rand 0.9.2) is needed by INSERT DEPENDENCY.
rand_v09 = { package = "rand", version = "0.9.2" }
rand = "0.8.5"
ordered-float = { version = "5", features = ["serde"] }
num-complex = { version = "0.4", features = ["serde"] }
num-bigint = { version = "0.4", features = ["serde", "rand"] }
num-rational = { version = "0.4", features = ["serde"] }
num-traits = "0.2"
serde = { version = "1.0", features = ["derive", "rc"] }
serde_json = "1.0"
libloading = { version = "0.8", optional = true }
dashmap = "6"
once_cell = "1.19"
lazy_static = "1.4"
# Not updating nom for compatibility issues.
nom = "7"

plotters = { version = "0.3", features = [
    "image",
    "chrono",
    "ttf",
    "font-kit",
    "evcxr",
], optional = true }
ahash = { version = "0.8", features = ["serde"] }
abi_stable = { version = "0.11", optional = true }
instability = "0.3"
faer = "0.23"
cranelift-frontend = { version = "0.127", optional = true }
cranelift-native = { version = "0.127", optional = true }
cranelift-codegen = { version = "0.127", optional = true }
cranelift-module = { version = "0.127", optional = true }
cranelift-jit = { version = "0.127", optional = true }
pulp = { version = "0.22", features = [
    "macro",
    "x86-v4",
    "nightly",
], optional = true }
simba = { version = "0.9", features = [
    "libm",
    "cordic",
    "decimal",
    "rand",
], optional = true }

[build-dependencies]
cbindgen = "0.29"
vergen = { version = "9", features = [
    "build",
    "cargo",
    "cargo_metadata",
    "emit_and_set",
    "regex",
    "rustc",
    "rustc_version",
    "si",
    "sysinfo",
    "time",
] }
vergen-gitcl = { version = "1", features = [
    "build",
    "cargo",
    "emit_and_set",
    "rustc",
    "si",
] }

[features]
default = []
compute = []
output = ["dep:plotters", "dep:ndarray-npy"]
physics = []
plugins = ["dep:libloading", "dep:abi_stable"]
jit = [
    "dep:cranelift-codegen",
    "dep:cranelift-frontend",
    "dep:cranelift-jit",
    "dep:cranelift-module",
    "dep:cranelift-native",
]
ffi_api = []
# Will be available at v0.3.0 release.
ffi_blinding = ["dep:libc"]
# Experimental features
experimental = ["ffi_blinding", "jit", "dep:pulp", "dep:simba"]
nightly = ["dep:pulp"]
full = [
    "default",
    "output",
    "physics",
    "plugins",
    "compute",
    "ffi_blinding",
    "jit",
    "experimental",
]

[dev-dependencies]
criterion = { version = "0.7", features = ["html_reports"] }
proptest = "1.2"
assert_approx_eq = "1.1"

[[bench]]
name = "rssn_benches"
harness = false

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--html-in-header", "doc-header.html"]

[lints.clippy]
empty-line-after-doc-comments = "allow"

[lints.rust]
# Allowed here because of kani.
unexpected_cfgs = { level = "allow", check-cfg = ['cfg(has_foo)'] }