pub enum Strategy<S> {
Broadcast(S),
Collection(Box<[S]>),
Indexable(Box<dyn Indexable<S> + Send + Sync>),
}Expand description
A dynamic strategy (e.g. diskann::graph::glue::SearchStrategy) manager for built-in
searcher such as super::KNN, super::Range, and super::MultiHop.
This provides an efficient means for either broadcasting a single strategy to all search queries, or maintaining a collection of strategies, one for each query.
Variants§
Broadcast(S)
Use the same strategy for all queries.
Collection(Box<[S]>)
Use a custom strategy for each query.
Indexable(Box<dyn Indexable<S> + Send + Sync>)
Use a custom strategy for each query via an Indexable trait object.
Implementations§
Source§impl<S> Strategy<S>
impl<S> Strategy<S>
Sourcepub fn broadcast(strategy: S) -> Self
pub fn broadcast(strategy: S) -> Self
Create a strategy that broadcasts strategy to all queries.
Sourcepub fn collection<I>(itr: I) -> Selfwhere
I: IntoIterator<Item = S>,
pub fn collection<I>(itr: I) -> Selfwhere
I: IntoIterator<Item = S>,
Create a strategy that uses the strategies in itr for each query.
Sourcepub fn from_indexable<I>(indexable: I) -> Self
pub fn from_indexable<I>(indexable: I) -> Self
Create a strategy that uses indexable for each query’s strategy.
This method is most useful when the strategies are stored in a custom data structure and can avoid the cost of rematerializing a collection.
Sourcepub fn len(&self) -> Option<usize>
pub fn len(&self) -> Option<usize>
Return the number of strategies contained in self, or None if there are
an unbounded number of strategies.
use diskann_benchmark_core::search::graph::Strategy;
let strategy = Strategy::broadcast(42usize);
assert_eq!(*strategy.get(0).unwrap(), 42);
assert!(
strategy.len().is_none(),
"broadcasted strategies can be retrieved from any index",
);
let strategy = Strategy::collection([42usize, 128usize]);
assert_eq!(*strategy.get(0).unwrap(), 42);
assert_eq!(*strategy.get(1).unwrap(), 128);
assert_eq!(strategy.len(), Some(2));Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Return true only if the number of strategies is bounded and equal to zero.
Sourcepub fn length_compatible(
&self,
expected: usize,
) -> Result<(), LengthIncompatible>
pub fn length_compatible( &self, expected: usize, ) -> Result<(), LengthIncompatible>
Check if the number of strategies in self is compatible with expected.
Self::Broadcast is always compatible. Otherwise, the number of strategies must
exactly match expected.
Trait Implementations§
Auto Trait Implementations§
impl<S> Freeze for Strategy<S>where
S: Freeze,
impl<S> !RefUnwindSafe for Strategy<S>
impl<S> Send for Strategy<S>where
S: Send,
impl<S> Sync for Strategy<S>where
S: Sync,
impl<S> Unpin for Strategy<S>where
S: Unpin,
impl<S> UnsafeUnpin for Strategy<S>where
S: UnsafeUnpin,
impl<S> !UnwindSafe for Strategy<S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> DispatchRule<T> for T
impl<T> DispatchRule<T> for T
Source§type Error = Infallible
type Error = Infallible
convert.Source§fn try_match(_from: &T) -> Result<MatchScore, FailureScore>
fn try_match(_from: &T) -> Result<MatchScore, FailureScore>
Source§fn convert(from: T) -> Result<T, <T as DispatchRule<T>>::Error>
fn convert(from: T) -> Result<T, <T as DispatchRule<T>>::Error>
Source§fn description(f: &mut Formatter<'_>, from: Option<&T>) -> Result<(), Error>
fn description(f: &mut Formatter<'_>, from: Option<&T>) -> Result<(), Error>
Source§fn try_match_verbose<'a>(
from: &'a From,
) -> Result<MatchScore, TaggedFailureScore<'a>>where
Self: 'a,
fn try_match_verbose<'a>(
from: &'a From,
) -> Result<MatchScore, TaggedFailureScore<'a>>where
Self: 'a,
try_match but returns a reason for a failed score. Read more