[package]
name = "ruvector-solver"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
description = "Sublinear-time solver for RuVector: O(log n) to O(√n) algorithms for sparse linear systems, PageRank, and spectral methods"
keywords = ["linear-algebra", "sparse-matrix", "pagerank", "solver", "sublinear"]
categories = ["mathematics", "science", "algorithms"]
[features]
default = ["neumann", "cg", "forward-push"]
nalgebra-backend = ["nalgebra"]
parallel = ["rayon", "crossbeam"]
simd = []
wasm = []
full = ["nalgebra-backend", "parallel", "all-algorithms"]
neumann = []
forward-push = []
backward-push = []
hybrid-random-walk = ["getrandom"]
true-solver = ["neumann"]
cg = []
bmssp = []
all-algorithms = ["neumann", "forward-push", "backward-push", "hybrid-random-walk", "true-solver", "cg", "bmssp"]
[dependencies]
serde = { workspace = true, features = ["derive"] }
thiserror = { workspace = true }
tracing = { workspace = true }
rand = { workspace = true }
nalgebra = { version = "0.33", default-features = false, features = ["std"], optional = true }
rayon = { workspace = true, optional = true }
crossbeam = { workspace = true, optional = true }
getrandom = { version = "0.2", optional = true }
dashmap = { workspace = true }
parking_lot = { workspace = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
getrandom = { version = "0.2", features = ["js"] }
[dev-dependencies]
criterion = { workspace = true }
proptest = { workspace = true }
approx = "0.5"
[[bench]]
name = "solver_baseline"
harness = false
[[bench]]
name = "solver_neumann"
harness = false
[[bench]]
name = "solver_cg"
harness = false
[[bench]]
name = "solver_push"
harness = false
[[bench]]
name = "solver_e2e"
harness = false
[lints.rust]
unexpected_cfgs = { level = "allow", priority = -1 }
unused_imports = "allow"
dead_code = "allow"
unused_variables = "allow"
[lints.clippy]
pedantic = { level = "allow", priority = -2 }
all = { level = "warn", priority = -1 }
correctness = { level = "deny", priority = 0 }
suspicious = { level = "deny", priority = 0 }
needless_range_loop = "allow"
manual_div_ceil = "allow"
manual_is_multiple_of = "allow"
manual_range_contains = "allow"
redundant_field_names = "allow"
len_zero = "allow"
get_first = "allow"
useless_vec = "allow"
manual_clamp = "allow"
unnecessary_map_or = "allow"
needless_borrow = "allow"
needless_borrows_for_generic_args = "allow"
mut_from_ref = { level = "allow", priority = 1 }