[package]
name = "bixverse-rs"
version = "0.3.6"
edition = "2024"
authors = ["Gregor Lueg <gregorlueg@me.com>"]
license = "MIT"
repository = "https://github.com/GregorLueg/bixverse-rs"
description = "A Rust library with various utilities for computational biology and single cell."

[lib]
name = "bixverse_rs"
path = "src/lib.rs"

############
# Features #
############

[features]
## Enables the single cell features in bixverse-rs
single-cell = ["half", "bincode", "indexmap", "memmap2", "hdf5", "lz4_flex", "ndarray"]
## Tests for large scale diagonistics - for development only!
large_scale_diagnostics = []
## Enables multi-modal single cell analysis (requires single-cell)
multi-modal = ["single-cell"]
## Enable GPU-accelerated algorithms and methods
gpu = ["cubecl", "ann-search-rs/gpu", "half", "cubek"]

#####################
# Compilation flags #
#####################

[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 4

################
# Dependencies #
################

[dependencies]
approx = "0.5.1"
ann-search-rs = { version = "0.4.3" }
bincode = { version = "2.0.1", features = ["serde"], optional = true }
cubecl = { version = "0.10.0", features = ["wgpu", "cpu"], optional = true }
cubek = { version = "0.2.0", features = ["matmul"], optional = true }
document-features = "0.2.12"
either = "1.15.0"
extendr-api = "0.9.0"
faer = "0.23.2"
faer-traits = "0.23.2"
faer-entity = "0.20.1"
fmt = "0.1.0"
half = { version = "2.7.1", optional = true }
hdf5 = { package = "hdf5-metno", version = "0.10.1", features = [
    "static",
    "zlib",
], optional = true }
indexmap = { version = "2.13.0", optional = true }
lz4_flex = { version = "0.12.0", optional = true }
memmap2 = { version = "0.9.9", optional = true }
ndarray = { version = "0.16.1", optional = true }
num-traits = "0.2.19"
once_cell = "1.21.3"
petgraph = "0.8.3"
rand = "0.9.2"
rand_distr = "0.5.1"
rayon = "1.11.0"
rustc-hash = "2.1.1"
serde = { version = "1.0", features = ["derive"] }
statrs = "0.18.0"
thiserror = "2.0.18"
thousands = "0.2.0"
wide = "1.4.0"

#################
# Documentation #
#################

[package.metadata.docs.rs]
features = ["single-cell", "multi-modal"]

###########
# Benches #
###########

[[bench]]
name = "gpu_k_means_bench"
harness = false
required-features = ["gpu"]
