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>
impl<C: Cost + Ord + Eq + Clone + Debug> Extractor<C>
Sourcepub fn compute_costs_from_rootsorts(
rootsorts: Option<Vec<ArcSort>>,
egraph: &EGraph,
cost_model: impl CostModel<C> + 'static,
) -> Self
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.
Sourcepub fn extract_best_with_sort(
&self,
egraph: &EGraph,
termdag: &mut TermDag,
value: Value,
sort: ArcSort,
) -> Option<(C, Term)>
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.
Sourcepub fn extract_best(
&self,
egraph: &EGraph,
termdag: &mut TermDag,
value: Value,
) -> Option<(C, Term)>
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
Sourcepub fn extract_variants_with_sort(
&self,
egraph: &EGraph,
termdag: &mut TermDag,
value: Value,
nvariants: usize,
sort: ArcSort,
) -> Vec<(C, Term)>
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.
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> 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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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