[package]
authors = ["nathanielsimard <nathaniel.simard.42@gmail.com>"]
categories = ["science", "no-std", "embedded", "wasm"]
description = "Flexible and Comprehensive Deep Learning Framework in Rust"
documentation = "https://docs.rs/burn"
edition.workspace = true
keywords = ["deep-learning", "machine-learning", "tensor", "pytorch", "ndarray"]
license.workspace = true
name = "burn"
readme.workspace = true
repository = "https://github.com/tracel-ai/burn"
rust-version = "1.92"
version.workspace = true

[lints]
workspace = true

[features]
default = [
    "std",
    "burn-core/default",
    "burn-train?/default",
    "burn-collective?/default",
    # Backends
    "burn-candle?/default",
    "burn-cpu?/default",
    "burn-ndarray?/default",
    "burn-tch?/default",
    "burn-wgpu?/default",
    "burn-router?/default",
    "burn-remote?/default",
    "burn-cuda?/default",
    "burn-autodiff?/default",
    "burn-rocm?/default",
    "burn-nn/default",
    "burn-optim/default",
    "burn-dispatch?/default",
]
doc = [
    "default",
    "train",
    "burn-core/doc",
    "burn-train/doc",
    "burn-collective/doc",
    "burn-store?/std",
    # Backends
    "burn-candle/doc",
    "burn-cpu?/doc",
    "burn-ndarray/doc",
    "burn-tch/doc",
    "burn-wgpu/doc",
    "burn-router/doc",
    "burn-cuda/doc",
    "burn-autodiff?/std",
    "burn-rocm/doc",
    "burn-nn/doc",
    "burn-optim/doc",
    "burn-dispatch?/doc",
]
std = [
    "burn-core/std",
    # Backends
    "burn-candle?/std",
    "burn-cpu?/std",
    "burn-ndarray?/std",
    "burn-wgpu?/std",
    "burn-router?/std",
    "burn-cuda?/std",
    "burn-autodiff?/std",
    "burn-rocm?/std",
    "burn-store?/std",
    "burn-tch?/std",
    "burn-nn/std",
    "burn-optim/std",
    "burn-dispatch?/std",
]
tracing = [
    "cubecl?/tracing",
    "burn-core/tracing",
    # Backends
    "burn-candle?/tracing",
    "burn-cpu?/tracing",
    "burn-ndarray?/tracing",
    "burn-wgpu?/tracing",
    "burn-router?/tracing",
    "burn-cuda?/tracing",
    "burn-autodiff?/tracing",
    "burn-rocm?/tracing",
    "burn-tch?/tracing",
    "burn-store?/tracing",
    "burn-nn/tracing",
    "burn-optim/tracing",
    "burn-dispatch?/tracing",
]


network = ["burn-core/network"]

# Training with full features
train = ["burn-train", "autodiff", "dataset"]

## Includes the Text UI (progress bars, metric plots)
tui = ["burn-train?/tui"]

##  Includes system info metrics (CPU/GPU usage, etc)
metrics = ["burn-train?/sys-metrics"]

# Datasets
dataset = ["burn-core/dataset"]

sqlite = ["burn-core/sqlite"]
sqlite-bundled = ["burn-core/sqlite-bundled"]

# Custom deserializer for Record that is helpful for importing data, such as PyTorch pt files.
record-item-custom-serde = ["burn-core/record-item-custom-serde"]
# Serialization formats
experimental-named-tensor = ["burn-core/experimental-named-tensor"]

# Model storage and serialization (SafeTensors, PyTorch interop)
store = ["burn-store"]

# CubeCL re-export
cubecl = ["dep:cubecl"]

audio = ["burn-core/audio"]
vision = ["burn-core/vision"]
rl = ["dep:burn-rl", "burn-train?/rl"]

# Backend
ir = ["burn-ir"]
autodiff = ["burn-autodiff", "burn-dispatch?/autodiff"]
fusion = [
    "ir",
    "burn-wgpu?/fusion",
    "burn-cuda?/fusion",
    "burn-rocm?/fusion",
    "burn-cpu?/fusion",
]

## Backend features
accelerate = ["burn-candle?/accelerate", "burn-ndarray?/blas-accelerate"]
autotune = [
    "burn-wgpu?/autotune",
    "burn-cuda?/autotune",
    "burn-rocm?/autotune",
    "burn-cpu?/autotune",
]
autotune-checks = [
    "burn-wgpu?/autotune-checks",
    "burn-cuda?/autotune-checks",
    "burn-rocm?/autotune-checks",
    "burn-cpu?/autotune-checks",
]
blas-netlib = ["burn-ndarray?/blas-netlib"]
openblas = ["burn-ndarray?/blas-openblas"]
openblas-system = ["burn-ndarray?/blas-openblas-system"]
remote = ["burn-remote/client", "ir"]
router = ["burn-router", "ir"]
server = ["burn-remote/server"]
simd = ["burn-ndarray?/simd"]
template = ["burn-wgpu?/template"]
collective = ["burn-collective", "burn-optim/collective", "burn-train?/ddp"]

candle = ["burn-candle"]
candle-cuda = ["candle", "burn-candle/cuda"]
candle-metal = ["burn-candle?/metal"]
cuda = ["burn-cuda", "burn-dispatch?/cuda"]
rocm = ["burn-rocm", "burn-dispatch?/rocm"]
ndarray = ["burn-ndarray", "burn-dispatch?/ndarray"]
tch = ["burn-tch"]
vulkan = ["wgpu", "burn-wgpu/vulkan", "burn-dispatch?/vulkan"]
webgpu = ["wgpu", "burn-wgpu/webgpu", "burn-dispatch?/webgpu"]
metal = ["wgpu", "burn-wgpu/metal", "burn-dispatch?/metal"]
wgpu = ["burn-wgpu"]
cpu = ["burn-cpu", "burn-dispatch?/cpu"]

# Backend dispatch
dispatch = ["burn-dispatch"]

[dependencies]

# ** Please make sure all dependencies support no_std when std is disabled **

burn-core = { path = "../burn-core", version = "=0.21.0-pre.2", default-features = false }
burn-train = { path = "../burn-train", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-collective = { path = "../burn-collective", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-store = { path = "../burn-store", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-nn = { path = "../burn-nn", version = "=0.21.0-pre.2", default-features = false }
burn-optim = { path = "../burn-optim", version = "=0.21.0-pre.2", default-features = false }
burn-rl = { path = "../burn-rl", version = "=0.21.0-pre.2", optional = true, default-features = false }

# Backends
burn-autodiff = { path = "../burn-autodiff", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-candle = { path = "../burn-candle", version = "=0.21.0-pre.2", optional = true }
burn-cuda = { path = "../burn-cuda", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-cpu = { path = "../burn-cpu", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-rocm = { path = "../burn-rocm", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-ndarray = { path = "../burn-ndarray", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-remote = { path = "../burn-remote", version = "=0.21.0-pre.2", default-features = false, optional = true }
burn-router = { path = "../burn-router", version = "=0.21.0-pre.2", default-features = false, optional = true }
burn-tch = { path = "../burn-tch", version = "=0.21.0-pre.2", default-features = false, optional = true }
burn-wgpu = { path = "../burn-wgpu", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-ir = { path = "../burn-ir", version = "=0.21.0-pre.2", optional = true, default-features = false }
burn-dispatch = { path = "../burn-dispatch", version = "=0.21.0-pre.2", optional = true, default-features = false }

cubecl = { workspace = true, default-features = false, optional = true }

