dupehell 0.6.0

Synthetic multi-domain dataset generator for record linkage benchmarking
Documentation
[package]
name = "dupehell"
version = "0.6.0"
edition = "2024"
license = "MIT"
description = "Synthetic multi-domain dataset generator for record linkage benchmarking"
authors = ["DupeHell Contributors"]
repository = "https://github.com/vntoinekaio/DupeHell"
readme = "README.md"
keywords = ["synthetic-data", "record-linkage", "entity-resolution", "deduplication"]
categories = ["command-line-utilities", "science"]
exclude = ["python/", "pyproject.toml", ".github/", "tests/test_graph_gen.py", "sz.rs", "sz.pdb", "docs/superpowers/"]

[lib]
name = "dupehell_core"
crate-type = ["cdylib", "rlib"]

[[bin]]
name = "dupehell"
path = "src/main.rs"

[dependencies]
clap = { version = "4", features = ["derive"] }
arrow = "60"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
rand = "0.10"
rand_pcg = "0.10"
rayon = "1"
parquet = "60"
log = "0.4"
env_logger = "0.11"
rustc-hash = "2"
sha2 = "0.11"
sysinfo = "0.40"
pyo3 = { version = "0.30", features = ["extension-module", "abi3-py310"], optional = true }

[features]
python = ["dep:pyo3"]

[profile.release]
lto = "fat"
codegen-units = 1
opt-level = 3
strip = "symbols"

# CLI-only profile: `panic = "abort"` shaves a bit of binary size and startup
# cost (no unwind tables/landing pads) since the CLI never needs to unwind.
# It must NOT apply to the default `release` profile, which also builds the
# `cdylib` PyO3 extension module — aborting on panic there would kill the
# embedding Python interpreter outright instead of raising a catchable
# exception. Build with: `cargo build --profile release-cli --bin dupehell`
# (restricting to the bin target so the cdylib is never built under this
# profile in the first place).
[profile.release-cli]
inherits = "release"
panic = "abort"

# Profiling profile: same codegen as release (lto=fat, codegen-units=1,
# opt-level=3) so hot-path measurements stay representative of production
# behavior, but keeps debug symbols (no strip) so VTune/perf can resolve
# frames to function names instead of raw addresses.
[profile.profiling]
inherits = "release-cli"
strip = false
debug = true

[target."cfg(windows)".dependencies]
windows = { version = "0.62.2", features = ["Win32_System_Threading", "Win32_System_SystemInformation", "Win32_Foundation"] }