esca 0.3.0

A chess model that answers what is true about a position: variants, positions, games, and move text.
Documentation
[package]
name = "esca"
version = "0.3.0"
description = "A chess model that answers what is true about a position: variants, positions, games, and move text."
keywords = ["chess", "chess960", "fen", "san", "position"]
categories = ["games", "game-development"]
readme = "README.md"
homepage = "https://github.com/AnglerfishChess/anglerfish"
documentation = "https://docs.rs/esca"
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true

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

[features]
default = []
# The dump reader.
lichess = ["dep:serde", "dep:serde_json", "dep:zstd"]
# The bundled ECO catalogue.
openings = []
# PGN reading and writing.
pgn = []
# Opening books in the Polyglot format.
polyglot = ["dep:memmap2"]
# The PyO3 module and its batch encoders. A wheel adds
# `pyo3/extension-module` on top; a test binary links the interpreter instead.
python = ["dep:numpy", "dep:pyo3", "dep:rayon"]
# The UCI client: the protocol as values, and engines as subprocesses.
uci = ["dep:log"]
# The same client on a tokio runtime: `uci::tokio::Engine`.
tokio = ["uci", "dep:tokio"]

[dependencies]
blake3 = "1"
cozy-chess = "0.3.4"
log = { version = "0.4", optional = true }
memmap2 = { version = "0.9", optional = true }
numpy = { version = "0.29", optional = true }
pyo3 = { version = "0.29", optional = true, features = ["abi3-py312"] }
rayon = { version = "1", optional = true }
serde = { version = "1", optional = true, features = ["derive"] }
serde_json = { version = "1", optional = true }
# `macros` is what `#[tokio::test]` needs; the rest is the client itself.
tokio = { version = "1", optional = true, features = [
    "io-util",
    "macros",
    "process",
    "rt",
    "sync",
    "time",
] }
zstd = { version = "0.13", optional = true }

[dev-dependencies]
criterion = "0.5"
proptest = "1"
rstest = { version = "0.26.1", default-features = false }

[[bench]]
name = "facts"
harness = false