Skip to main content

Strategy

Enum Strategy 

Source
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>

Source

pub fn broadcast(strategy: S) -> Self

Create a strategy that broadcasts strategy to all queries.

Source

pub fn collection<I>(itr: I) -> Self
where I: IntoIterator<Item = S>,

Create a strategy that uses the strategies in itr for each query.

Source

pub fn from_indexable<I>(indexable: I) -> Self
where S: Debug, I: Indexable<S> + Send + Sync + 'static,

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.

Source

pub fn get(&self, index: usize) -> Result<&S, Error>

Get the strategy for the query at index.

Source

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));
Source

pub fn is_empty(&self) -> bool

Return true only if the number of strategies is bounded and equal to zero.

Source

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§

Source§

impl<S: Debug> Debug for Strategy<S>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> DispatchRule<T> for T

Source§

type Error = Infallible

Errors that can occur during convert.
Source§

fn try_match(_from: &T) -> Result<MatchScore, FailureScore>

Attempt to match the value From to the type represented by Self. Read more
Source§

fn convert(from: T) -> Result<T, <T as DispatchRule<T>>::Error>

Perform the actual conversion. Read more
Source§

fn description(f: &mut Formatter<'_>, from: Option<&T>) -> Result<(), Error>

Write a description of the dispatch rule and outcome to the formatter. Read more
Source§

fn try_match_verbose<'a>( from: &'a From, ) -> Result<MatchScore, TaggedFailureScore<'a>>
where Self: 'a,

The equivalent of try_match but returns a reason for a failed score. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> AsyncFriendly for T
where T: Send + Sync + 'static,