[package]
name = "outfit"
version = "1.0.0"
edition = "2021"
license-file = "LICENSE"
rust-version = "1.82"
description = "Orbit determination toolkit in Rust. Provides astrometric parsing, observer management, and initial orbit determination (Gauss method) with JPL ephemeris support."
readme = "README.md"
repository = "https://github.com/FusRoman/Outfit"
homepage = "https://github.com/FusRoman/Outfit"
documentation = "https://docs.rs/outfit"
keywords = ["astronomy", "orbit-determination", "asteroid", "ephemeris", "astrometry"]
categories = ["science", "parsing", "data-structures"]
authors = ["Roman Le Montagner <roman.le-montagner@ijclab.in2p3.fr>"]

[dependencies]
aberth = { version = "0.4.1", default-features = false }
ahash = { version = "0.8.11", default-features = false }
arrow-array = { version = "54.3.1", default-features = false }
camino = { version = "1.1.9", default-features = false }
directories = "6.0.0"
hifitime = { version = "4.2.0", default-features = false, features = [
    "ut1",
    "std",
] }
itertools = { version = "0.14.0", default-features = false, features = [
    "use_std",
] }
nalgebra = { version = "0.33.2" }
ordered-float = { version = "5.0.0", default-features = false }
parquet = { version = "54.2.1", default-features = false, features = [
    "arrow",
    "snap",
] }
quick-xml = { version = "0.37.3", features = [
    "serialize",
], default-features = false }
serde = { version = "1.0", features = ["derive"], default-features = false }
smallvec = { version = "1.14.0", default-features = false }
thiserror = { version = "2.0.12", default-features = false }
ureq = { version = "3.0.10", default-features = false, features = ["rustls"] }
nom = { version = "8.0.0" }
once_cell = { version = "1.21.3", default-features = false }
roots = { version = "0.0.8", default-features = false }
rand = { version = "0.9.2", default-features = false, features = ["std_rng"] }
rand_distr = { version = "0.5.1", default-features = false }

reqwest = { version = "0.12.15", default-features = false, optional = true, features = [
    "http2",
    "rustls-tls",
    "stream",
] }
tokio = { version = "1.44.1", default-features = false, optional = true, features = [
    "fs",
    "rt",
    "rt-multi-thread",
    "io-util",
] }
tokio-stream = { version = "0.1.17", default-features = false, optional = true }
indicatif = { version = "0.18", optional = true }

[dev-dependencies]
approx = { version = "0.5.1", default-features = false }
criterion = { version = "0.5.1", features = ["html_reports"] }
husky-rs = "0.1.5"
proptest = "1.7.0"

[features]
jpl-download = ["dep:reqwest", "dep:tokio", "dep:tokio-stream"]
progress = ["dep:indicatif"]

[[test]]
name = "reader_80col_test"
path = "tests/reader_80col_test.rs"
required-features = ["jpl-download"]

[[test]]
name = "test_read_ades"
path = "tests/test_read_ades.rs"
required-features = ["jpl-download"]

[[test]]
name = "test_large_parquet"
path = "tests/trajectories_from_parquet.rs"
required-features = ["jpl-download"]

[[test]]
name = "test_trajectories_from_vec"
path = "tests/trajectories_from_vec.rs"
required-features = ["jpl-download"]

[[example]]
name = "gauss_iod_once"
path = "examples/gauss_iod_once.rs"
required-features = ["jpl-download"]

[[example]]
name = "parquet_to_orbit"
path = "examples/parquet_to_orbit.rs"
required-features = ["jpl-download"]

[[bench]]
name = "load_parquet"
harness = false
required-features = ["jpl-download"]

[[bench]]
name = "outfit_gauss_iod"
harness = false
required-features = ["jpl-download"]

[[bench]]
name = "solve_kepler_equation"
harness = false
required-features = ["jpl-download"]

[[bench]]
name = "gauss_prelim_orbit"
harness = false
required-features = ["jpl-download"]

[profile.bench]
opt-level = 3
lto = "thin"
codegen-units = 1
debug = true

[profile.release]
debug = false
lto = "fat"
codegen-units = 1
strip = true

[package.metadata.docs.rs]
features = ["jpl-download"]
rustdoc-args = ["--cfg", "docsrs"]
