Struct Extractor

Source
pub struct Extractor<C: Cost + Ord + Eq + Clone + Debug> { /* private fields */ }
Expand description

The default, Bellman-Ford like extractor. This extractor is optimal for CostModel.

Implementations§

Source§

impl<C: Cost + Ord + Eq + Clone + Debug> Extractor<C>

Source

pub fn compute_costs_from_rootsorts( rootsorts: Option<Vec<ArcSort>>, egraph: &EGraph, cost_model: impl CostModel<C> + 'static, ) -> Self

Bulk of the computation happens at initialization time. The later extractions only reuses saved results. This means a new extractor must be created if the egraph changes. Holding a reference to the egraph would enforce this but prevents the extractor being reused.

For convenience, if the rootsorts is None, it defaults to extract all extractable rootsorts.

Source

pub fn extract_best_with_sort( &self, egraph: &EGraph, termdag: &mut TermDag, value: Value, sort: ArcSort, ) -> Option<(C, Term)>

Extract the best term of a value from a given sort.

This function expects the sort to be already computed, which can be one of the rootsorts, or reachable from rootsorts, or primitives, or containers of computed sorts.

Source

pub fn extract_best( &self, egraph: &EGraph, termdag: &mut TermDag, value: Value, ) -> Option<(C, Term)>

A convenience method for extraction.

This expects the value to be of the unique sort the extractor has been initialized with

Source

pub fn extract_variants_with_sort( &self, egraph: &EGraph, termdag: &mut TermDag, value: Value, nvariants: usize, sort: ArcSort, ) -> Vec<(C, Term)>

Extract variants of an e-class.

The variants are selected by first picking nvairants e-nodes with the lowest cost from the e-class and then extracting a term from each e-node.

Source

pub fn extract_variants( &self, egraph: &EGraph, termdag: &mut TermDag, value: Value, nvariants: usize, ) -> Vec<(C, Term)>

A convenience method for extracting variants of a value.

This expects the value to be of the unique sort the extractor has been initialized with.

Auto Trait Implementations§

§

impl<C> Freeze for Extractor<C>

§

impl<C> !RefUnwindSafe for Extractor<C>

§

impl<C> !Send for Extractor<C>

§

impl<C> !Sync for Extractor<C>

§

impl<C> Unpin for Extractor<C>
where C: Unpin,

§

impl<C> !UnwindSafe for Extractor<C>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V