[workspace]
members = [".", "crates/cli", "crates/python", "crates/wasm"]

[package]
name = "sci-form"
version = "0.14.4"
edition = "2021"
authors = ["Sci-Form Team"]
description = "High-performance 3D molecular conformer generation using ETKDG distance geometry"
license = "MIT"
repository = "https://github.com/jigonzalez930209/sci-form"
homepage = "https://sci-form.dev"
documentation = "https://docs.rs/sci-form"
readme = "README.md"
keywords = ["chemistry", "conformer", "3d", "molecule", "etkdg"]
categories = ["science", "algorithms"]
exclude = [
    "rdkit-master/",
    "tests/fixtures/*.json",
    "tests/fixtures/*.json.gz",
    "data/",
    "scripts/",
    "GDB20.50000.smi",
    "docs/",
]

[lib]
crate-type = ["rlib"]

[features]
default = ["parallel"]
parallel = ["rayon"]
experimental-gpu-rendering = ["dep:bytemuck"]
experimental-gpu = ["experimental-gpu-rendering", "dep:wgpu", "dep:pollster"]
# Legacy experimental flags (kept for backwards compatibility)
experimental-cga = ["alpha-cga"]
experimental-randnla = ["beta-randnla"]
experimental-riemannian = ["beta-riemannian"]
experimental-kpm = ["beta-kpm"]
experimental-eeq = []
experimental-alpb = []
experimental-d4 = []
experimental-sdr = ["alpha-sdr"]
experimental-mbh = ["beta-mbh"]
experimental-cpm = ["beta-cpm"]
experimental-gsm = ["alpha-gsm"]
# Alpha — early research, proof-of-concept
alpha-cga = []
alpha-gsm = []
alpha-sdr = []
alpha-dynamics-live = []
alpha-dft = []
alpha-reaxff = []
alpha-obara-saika = []
alpha-mlff = []
alpha-imd = []
alpha-edl = ["experimental-cpm", "experimental-eeq", "experimental-alpb"]
alpha-periodic-linear = ["experimental-kpm", "experimental-randnla"]
alpha-kinetics = ["experimental-gsm", "experimental-mbh"]
alpha-render-bridge = ["experimental-kpm", "experimental-gsm", "experimental-gpu-rendering"]
# Beta — tested, approaching core readiness
beta-kpm = []
beta-mbh = []
beta-cpm = []
beta-randnla = []
beta-riemannian = []

[dependencies]
flate2 = "1.1"
petgraph = "0.6.4"
nalgebra = { version = "0.32", features = ["rand"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
rand = "0.8.5"
rayon = { version = "1.10", optional = true }
bytemuck = { version = "1.21", features = ["derive"], optional = true }
pollster = { version = "0.3", optional = true }
wgpu = { version = "0.19", optional = true }

[dev-dependencies]
rayon = "1.10"
approx = "0.5"

[profile.release]
opt-level = 3
lto = true
strip = true
