1#![cfg_attr(
9 test,
10 allow(clippy::unwrap_used, clippy::expect_used, clippy::unwrap_in_result)
11)]
12
13use vortex_array::arrays::scalar_fn::plugin::ScalarFnArrayPlugin;
14use vortex_array::dtype::session::DTypeSessionExt;
15use vortex_array::scalar_fn::session::ScalarFnSessionExt;
16use vortex_array::session::ArraySessionExt;
17use vortex_session::VortexSession;
18
19use crate::scalar_fns::cosine_similarity::CosineSimilarity;
20use crate::scalar_fns::inner_product::InnerProduct;
21use crate::scalar_fns::l2_denorm::L2Denorm;
22use crate::scalar_fns::l2_norm::L2Norm;
23use crate::scalar_fns::sorf_transform::SorfTransform;
24use crate::types::fixed_shape_tensor::FixedShapeTensor;
25use crate::types::vector::Vector;
26
27pub mod matcher;
28pub mod scalar_fns;
29
30mod types;
31
32pub use types::fixed_shape_tensor;
33pub use types::vector;
34
35pub mod encodings;
36
37pub mod vector_search;
38
39mod utils;
40
41pub const SCALAR_FN_ARRAY_TENSOR_PLUGIN_ENV: &str = "VX_SCALAR_FN_ARRAY_TENSOR_PLUGIN";
47
48pub fn initialize(session: &VortexSession) {
50 session.dtypes().register(Vector);
51 session.dtypes().register(FixedShapeTensor);
52
53 let session_fns = session.scalar_fns();
54
55 session_fns.register(CosineSimilarity);
56 session_fns.register(InnerProduct);
57 session_fns.register(L2Denorm);
58 session_fns.register(L2Norm);
59 session_fns.register(SorfTransform);
60
61 if std::env::var_os(SCALAR_FN_ARRAY_TENSOR_PLUGIN_ENV).is_some_and(|v| !v.is_empty()) {
66 let session_arrays = session.arrays();
67
68 session_arrays.register(ScalarFnArrayPlugin::new(CosineSimilarity));
69 session_arrays.register(ScalarFnArrayPlugin::new(InnerProduct));
70 session_arrays.register(ScalarFnArrayPlugin::new(L2Denorm));
71 session_arrays.register(ScalarFnArrayPlugin::new(L2Norm));
72 session_arrays.register(ScalarFnArrayPlugin::new(SorfTransform));
73 }
74}
75
76#[cfg(test)]
77mod tests {
78 use std::sync::LazyLock;
79
80 use vortex_array::session::ArraySession;
81 use vortex_session::VortexSession;
82
83 pub static SESSION: LazyLock<VortexSession> = LazyLock::new(|| {
84 let session = VortexSession::empty().with::<ArraySession>();
85 crate::initialize(&session);
86 session
87 });
88}