[badges.maintenance]
status = "actively-developed"
[[bench]]
harness = false
name = "rangebar_bench"
path = "benches/rangebar_bench.rs"
[[bin]]
name = "data-structure-validator"
path = "src/bin/data_structure_validator.rs"
[[bin]]
name = "polars-benchmark"
path = "src/bin/polars_benchmark.rs"
[[bin]]
name = "rangebar-analyze"
path = "src/bin/parallel_tier1_analysis.rs"
[[bin]]
name = "rangebar_api"
path = "src/bin/rangebar_api.rs"
[[bin]]
name = "spot-tier1-processor"
path = "src/bin/spot_tier1_processor.rs"
[[bin]]
name = "temporal-integrity-validator"
path = "src/bin/temporal_integrity_test_only.rs"
[[bin]]
name = "tier1-symbol-discovery"
path = "src/bin/tier1_symbol_discovery.rs"
[dependencies.async-trait]
version = "0.1"
[dependencies.axum]
features = ["json", "multipart", "ws"]
optional = true
version = "0.7"
[dependencies.chrono]
features = ["serde"]
version = "^0.4"
[dependencies.clap]
features = ["derive", "env"]
version = "^4.0"
[dependencies.config]
version = "0.14"
[dependencies.csv]
version = "1.3"
[dependencies.futures]
version = "0.3"
[dependencies.futures-util]
version = "0.3"
[dependencies.md5]
optional = true
version = "0.7"
[dependencies.num_cpus]
version = "1.16"
[dependencies.polars]
features = ["lazy", "temporal", "strings", "parquet", "csv", "ipc", "rolling_window"]
optional = true
version = "^0.51.0"
[dependencies.pyo3]
features = ["extension-module", "abi3-py38"]
optional = true
version = "0.26"
[dependencies.rayon]
version = "^1.11"
[dependencies.reqwest]
features = ["stream"]
version = "^0.12"
[dependencies.rolling-stats]
optional = true
version = "0.1"
[dependencies.serde]
features = ["derive"]
version = "^1.0"
[dependencies.serde_json]
features = ["arbitrary_precision"]
version = "1.0"
[dependencies.sha2]
optional = true
version = "0.10"
[dependencies.tdigests]
optional = true
version = "1.0"
[dependencies.thiserror]
version = "2.0"
[dependencies.tokio]
features = ["full"]
version = "^1.0"
[dependencies.tokio-stream]
version = "0.1"
[dependencies.tokio-tungstenite]
features = ["native-tls"]
version = "0.23"
[dependencies.tower]
features = ["limit", "timeout"]
optional = true
version = "0.4"
[dependencies.tower-http]
features = ["cors", "trace", "compression-br"]
optional = true
version = "0.5"
[dependencies.tracing]
optional = true
version = "0.1"
[dependencies.tracing-subscriber]
features = ["env-filter", "json"]
optional = true
version = "0.3"
[dependencies.utoipa]
features = ["axum_extras", "chrono", "uuid"]
optional = true
version = "4.2"
[dependencies.uuid]
features = ["v4", "serde"]
optional = true
version = "1.6"
[dependencies.validator]
features = ["derive"]
optional = true
version = "0.19"
[dependencies.zip]
version = "2.2"
[dev-dependencies.criterion]
features = ["html_reports"]
version = "0.5"
[dev-dependencies.tempfile]
version = "3.8"
[dev-dependencies.toml]
version = "0.8"
[[example]]
name = "basic-usage"
path = "examples/educational/basic_usage.rs"
[[example]]
name = "terminology-clarification"
path = "examples/educational/terminology_clarification.rs"
[features]
analytics = ["polars-analytics", "streaming-stats"]
api = ["dep:axum", "dep:tower", "dep:tower-http", "dep:utoipa", "dep:tracing", "dep:tracing-subscriber", "dep:validator", "dep:uuid"]
batch-mode = ["polars-analytics"]
data-integrity = ["dep:sha2", "dep:md5"]
debug = []
default = ["streaming-v2", "data-integrity"]
export-formats = ["polars-io"]
full = ["researcher", "trader", "python"]
hybrid-mode = ["streaming-mode", "batch-mode"]
polars-analytics = ["polars-io"]
polars-io = ["dep:polars"]
production = ["streaming-v2", "data-integrity"]
python = ["dep:pyo3", "polars-analytics"]
real-time-indicators = []
researcher = ["analytics", "export-formats"]
simd = []
streaming-mode = ["streaming-stats", "real-time-indicators"]
streaming-stats = ["dep:rolling-stats", "dep:tdigests"]
streaming-v2 = []
test-utils = []
trader = ["streaming-mode", "api"]
[lib]
crate-type = ["rlib"]
name = "rangebar"
path = "src/lib.rs"
[package]
authors = ["Terry Li <terry@eonlabs.com>"]
autobenches = false
autobins = false
autoexamples = false
autolib = false
autotests = false
build = false
categories = ["algorithms", "data-structures", "finance"]
description = "Non-lookahead range bar construction for cryptocurrency trading with temporal integrity guarantees"
documentation = "https://docs.rs/rangebar"
edition = "2024"
exclude = ["CLAUDE.md", "docs/", "src/bin/rangebar_export.rs", "src/data/", "examples/analysis/", "examples/investigation/", "examples/interactive/", "examples/validation/", "test_date_investigation.rs", "*.py", "*.ipynb", "test_data/", "test_output/", "test_regression/", "test_single/", "test_spot/", "test_thresholds/", "data/", "output/", "range_bar_charts/", "statistical_analysis/", "visualization/", "web/", "adversarial_test_output/", "milestones/", ".venv/", "repos/", ".pytest_cache/", "benchmark_data/", "binance_futures_*.txt"]
homepage = "https://github.com/Eon-Labs/rangebar"
keywords = ["finance", "trading", "range-bars", "cryptocurrency", "binance"]
license = "MIT"
name = "rangebar"
readme = "README.md"
repository = "https://github.com/Eon-Labs/rangebar"
rust-version = "1.90"
version = "2.0.0"
[profile.dev]
overflow-checks = true
[profile.release]
codegen-units = 1
lto = true
overflow-checks = false
panic = "abort"
[[test]]
name = "boundary_consistency_tests"
path = "tests/boundary_consistency_tests.rs"
[[test]]
name = "bps_conversion_tests"
path = "tests/bps_conversion_tests.rs"
[[test]]
name = "cross_year_speed_comparison"
path = "tests/cross_year_speed_comparison.rs"
[[test]]
name = "integration_test"
path = "tests/integration_test.rs"
[[test]]
name = "large_boundary_tests"
path = "tests/large_boundary_tests.rs"
[[test]]
name = "multi_month_memory_tests"
path = "tests/multi_month_memory_tests.rs"
[[test]]
name = "production_streaming_validation"
path = "tests/production_streaming_validation.rs"
[[test]]
name = "statistics_v2_validation"
path = "tests/statistics_v2_validation.rs"