# 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.93"
name = "echidna"
version = "0.12.0"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "A high-performance automatic differentiation library for Rust"
documentation = "https://docs.rs/echidna"
readme = "README.md"
keywords = [
    "autodiff",
    "differentiation",
    "gradient",
    "jacobian",
    "scientific",
]
categories = [
    "mathematics",
    "science",
    "algorithms",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/Entrolution/echidna"

[package.metadata.docs.rs]
features = [
    "simba",
    "bytecode",
    "parallel",
    "serde",
    "ndarray",
    "faer",
    "nalgebra",
    "taylor",
    "laurent",
    "stde",
    "diffop",
    "gpu-wgpu",
]
rustdoc-args = [
    "--cfg",
    "docsrs",
]

[features]
bytecode = ["dep:bumpalo"]
default = ["simba"]
diffop = [
    "bytecode",
    "taylor",
]
faer = [
    "dep:faer",
    "bytecode",
]
gpu-cuda = [
    "dep:cudarc",
    "bytecode",
]
gpu-wgpu = [
    "dep:wgpu",
    "dep:bytemuck",
    "dep:pollster",
    "bytecode",
]
laurent = ["taylor"]
nalgebra = [
    "dep:nalgebra",
    "bytecode",
]
ndarray = [
    "dep:ndarray",
    "bytecode",
]
parallel = [
    "dep:rayon",
    "bytecode",
]
serde = ["dep:serde"]
simba = [
    "dep:simba",
    "dep:approx",
]
stde = [
    "bytecode",
    "taylor",
]
taylor = []

[lib]
name = "echidna"
path = "src/lib.rs"
bench = false

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[[bench]]
name = "advanced"
path = "benches/advanced.rs"
harness = false
required-features = ["bytecode"]

[[bench]]
name = "bytecode"
path = "benches/bytecode.rs"
harness = false
required-features = ["bytecode"]

[[bench]]
name = "comparison"
path = "benches/comparison.rs"
harness = false
required-features = ["bytecode"]

[[bench]]
name = "diffop"
path = "benches/diffop.rs"
harness = false
required-features = ["diffop"]

[[bench]]
name = "forward"
path = "benches/forward.rs"
harness = false

[[bench]]
name = "gpu"
path = "benches/gpu.rs"
harness = false
required-features = ["gpu-wgpu"]

[[bench]]
name = "reverse"
path = "benches/reverse.rs"
harness = false

[[bench]]
name = "stde"
path = "benches/stde.rs"
harness = false
required-features = ["stde"]

[[bench]]
name = "taylor"
path = "benches/taylor.rs"
harness = false
required-features = ["stde"]

[dependencies.approx]
version = "0.5"
optional = true

[dependencies.bumpalo]
version = "3"
features = ["collections"]
optional = true

[dependencies.bytemuck]
version = "1"
features = ["derive"]
optional = true

[dependencies.cudarc]
version = "0.19"
features = ["cuda-version-from-build-system"]
optional = true

[dependencies.faer]
version = "0.24"
optional = true

[dependencies.nalgebra]
version = "0.34"
optional = true

[dependencies.ndarray]
version = "0.17"
optional = true

[dependencies.num-traits]
version = "0.2"

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

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

[dependencies.serde]
version = "1"
features = ["derive"]
optional = true

[dependencies.simba]
version = "0.9"
optional = true

[dependencies.wgpu]
version = "29"
optional = true

[dev-dependencies.ad_trait]
version = "0.3.0"

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

[dev-dependencies.ciborium]
version = "0.2"

[dev-dependencies.criterion]
version = "0.8"
features = ["html_reports"]

[dev-dependencies.nalgebra]
version = "0.34"

[dev-dependencies.num-dual]
version = "0.13"

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

[dev-dependencies.tempfile]
version = "3"
