# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2021"
rust-version = "1.70"
name = "evoc"
version = "0.0.1"
authors = ["Eugene Hauptmann"]
build = "build.rs"
exclude = [
    "/.venv-parity",
    "/examples/output",
    "/examples/*.py",
    "/tests/fixtures",
    "/benches/history",
    "/scripts",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Embedding Vector Oriented Clustering — fast clustering of high-dimensional embedding vectors (Rust port of EVōC)"
homepage = "https://github.com/eugenehp/evoc-rs"
documentation = "https://docs.rs/evoc"
readme = "README.md"
keywords = [
    "clustering",
    "embeddings",
    "knn",
    "hdbscan",
    "umap",
]
categories = [
    "science",
    "algorithms",
]
license = "BSD-2-Clause"
repository = "https://github.com/eugenehp/evoc-rs"

[package.metadata.docs.rs]
all-features = true

[features]
bench-json = ["dep:serde_json"]
cluster = ["embed"]
datasets = [
    "npy",
    "dep:ureq",
    "dep:flate2",
    "dep:tar",
    "dep:zip",
]
default = ["full"]
embed = ["init"]
full = [
    "cluster",
    "npy",
    "datasets",
]
graph = ["knn"]
init = ["graph"]
knn = ["dep:rlx-cpu"]
npy = ["dep:ndarray-npy"]
rlx-all = [
    "rlx-cpu",
    "rlx-cuda",
    "rlx-mlx",
    "rlx-rocm",
    "rlx-wgpu",
]
rlx-cpu = ["cluster"]
rlx-cuda = [
    "cluster",
    "dep:rlx",
    "rlx/cpu",
    "rlx/cuda",
]
rlx-mlx = [
    "cluster",
    "dep:rlx",
    "rlx/cpu",
    "rlx/mlx",
]
rlx-rocm = [
    "cluster",
    "dep:rlx",
    "rlx/cpu",
    "rlx/rocm",
]
rlx-wgpu = [
    "cluster",
    "dep:rlx",
    "rlx/cpu",
    "rlx/gpu",
]
rlx_metal = ["rlx-mlx"]

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

[[bin]]
name = "backend_smoke"
path = "src/bin/backend_smoke.rs"
required-features = [
    "cluster",
    "npy",
]

[[bin]]
name = "bench"
path = "src/bin/bench.rs"
required-features = [
    "cluster",
    "npy",
]

[[bin]]
name = "bench_backends"
path = "src/bin/bench_backends.rs"
required-features = [
    "cluster",
    "npy",
    "bench-json",
]

[[bin]]
name = "bench_huge"
path = "src/bin/bench_huge.rs"
required-features = ["cluster"]

[[bin]]
name = "emb_epoch_diff"
path = "src/bin/emb_epoch_diff.rs"
required-features = [
    "cluster",
    "npy",
]

[[bin]]
name = "fashion_mnist_fetch"
path = "src/bin/fashion_mnist_fetch.rs"
required-features = ["datasets"]

[[bin]]
name = "mnist_fetch"
path = "src/bin/mnist_fetch.rs"
required-features = ["datasets"]

[[bin]]
name = "mnist_labels"
path = "src/bin/mnist_labels.rs"
required-features = [
    "cluster",
    "datasets",
    "npy",
]

[[example]]
name = "bbc_news_clustering"
path = "examples/bbc_news_clustering.rs"
required-features = [
    "cluster",
    "datasets",
]

[[example]]
name = "cluster_in_memory"
path = "examples/cluster_in_memory.rs"
required-features = ["cluster"]

[[example]]
name = "fashion_mnist_clustering"
path = "examples/fashion_mnist_clustering.rs"
required-features = [
    "cluster",
    "datasets",
]

[[example]]
name = "news_clustering"
path = "examples/news_clustering.rs"
required-features = [
    "cluster",
    "datasets",
]

[[example]]
name = "user_clustering"
path = "examples/user_clustering.rs"
required-features = [
    "cluster",
    "npy",
]

[[test]]
name = "backend_metal_smoke"
path = "tests/backend_metal_smoke.rs"

[[test]]
name = "backend_resolve"
path = "tests/backend_resolve.rs"

[[test]]
name = "backend_strict_equivalence"
path = "tests/backend_strict_equivalence.rs"

[[test]]
name = "graph_parity"
path = "tests/graph_parity.rs"

[[test]]
name = "parity"
path = "tests/parity.rs"

[[test]]
name = "parity_intermediates"
path = "tests/parity_intermediates.rs"

[[test]]
name = "parity_reduced_init_canned"
path = "tests/parity_reduced_init_canned.rs"

[[test]]
name = "smoke"
path = "tests/smoke.rs"

[[bench]]
name = "evoc_bench"
path = "benches/evoc_bench.rs"
harness = false
required-features = [
    "cluster",
    "npy",
]

[dependencies.faer]
version = "0.20"
features = [
    "std",
    "svd",
    "evd",
]
default-features = false

[dependencies.flate2]
version = "1.1"
optional = true

[dependencies.ndarray]
version = "0.16"
features = ["rayon"]

[dependencies.ndarray-npy]
version = "0.9"
optional = true

[dependencies.rand]
version = "0.8"

[dependencies.rayon]
version = "1.10"

[dependencies.rlx]
version = "0.2.1"
optional = true
default-features = false

[dependencies.rlx-cpu]
version = "0.2.1"
optional = true

[dependencies.rustc-hash]
version = "2"

[dependencies.serde_json]
version = "1"
optional = true

[dependencies.sprs]
version = "0.11"

[dependencies.tar]
version = "0.4"
optional = true

[dependencies.thiserror]
version = "2"

[dependencies.ureq]
version = "2.12"
features = [
    "gzip",
    "tls",
]
optional = true
default-features = false

[dependencies.zip]
version = "2.2"
features = ["deflate"]
optional = true
default-features = false

[dev-dependencies.approx]
version = "0.5"

[dev-dependencies.criterion]
version = "0.5"

[dev-dependencies.ndarray]
version = "0.16"
features = ["rayon"]

[dev-dependencies.ndarray-npy]
version = "0.9"

[dev-dependencies.rand_chacha]
version = "0.3"

[dev-dependencies.serde_json]
version = "1"

[build-dependencies.cc]
version = "1.2"
