#![allow(clippy::doc_markdown)]
#![allow(clippy::cast_precision_loss)]
#![allow(clippy::cast_possible_truncation)]
#![allow(clippy::cast_sign_loss)]
mod backend_adapter;
mod batch_schedule;
pub(crate) mod columnar_distance;
pub(crate) mod columnar_vectors;
mod distance;
mod dual_precision;
mod graph;
mod graph_io;
mod int8_traversal;
pub(crate) mod layer;
mod ordered_float;
mod quantization;
pub(crate) mod rabitq_precision;
mod rabitq_traversal;
mod search;
pub use backend_adapter::{NativeHnswBackend, NativeNeighbour};
pub use distance::{CachedSimdDistance, CpuDistance, DistanceEngine};
pub use dual_precision::{DualPrecisionConfig, DualPrecisionHnsw};
pub use graph::{NativeHnsw, DEFAULT_ALPHA, NO_ENTRY_POINT};
#[cfg(feature = "gpu")]
pub(crate) use graph::locking::{holds_lock as hnsw_holds_lock, LockRank as HnswLockRank};
#[cfg(all(test, feature = "gpu"))]
pub(crate) use graph::locking::{
record_lock_acquire as hnsw_record_lock_acquire,
record_lock_release as hnsw_record_lock_release,
};
pub use layer::{Layer, NodeId};
pub use quantization::{QuantizedVector, QuantizedVectorStore, ScalarQuantizer};
pub use rabitq_precision::{RaBitQPrecisionConfig, RaBitQPrecisionHnsw};
pub use search::SearchResult;
#[cfg(test)]
mod backend_adapter_tests;
#[cfg(test)]
mod columnar_vectors_tests;
#[cfg(test)]
mod distance_tests;
#[cfg(test)]
mod dual_precision_tests;
#[cfg(test)]
mod graph_tests;
#[cfg(test)]
mod layer_tests;
#[cfg(test)]
mod ordered_float_tests;
#[cfg(test)]
mod quantization_tests;
#[cfg(test)]
mod rabitq_precision_tests;
#[cfg(test)]
mod search_pipeline_tests;
#[cfg(test)]
mod tests;