use std::sync::Arc;
use arrow_array::{Float32Array, RecordBatch};
use async_trait::async_trait;
use lance_linalg::MatrixView;
use super::Query;
use crate::{
index::{pb::Transform, prefilter::PreFilter, Index},
io::{object_reader::ObjectReader, object_writer::ObjectWriter},
Result,
};
#[async_trait]
#[allow(clippy::redundant_pub_crate)]
pub(crate) trait VectorIndex: Send + Sync + std::fmt::Debug + Index {
async fn search(&self, query: &Query, pre_filter: &PreFilter) -> Result<RecordBatch>;
fn is_loadable(&self) -> bool;
async fn load(
&self,
reader: &dyn ObjectReader,
offset: usize,
length: usize,
) -> Result<Arc<dyn VectorIndex>>;
}
#[async_trait]
pub trait Transformer: std::fmt::Debug + Sync + Send {
async fn train(&mut self, data: &MatrixView<Float32Array>) -> Result<()>;
async fn transform(&self, data: &MatrixView<Float32Array>) -> Result<MatrixView<Float32Array>>;
async fn save(&self, writer: &mut ObjectWriter) -> Result<Transform>;
}