egg_stats

Struct LoggingScheduler

source
pub struct LoggingScheduler<'a, S, L, N> { /* private fields */ }

Implementations§

source§

impl<'a, S, L, N> LoggingScheduler<'a, S, L, N>

source

pub fn new(scheduler: S) -> Self

source

pub fn with_identifier(self, id: impl ToString) -> Self

source

pub fn with_out_file<W: Write + 'a>(self, out_file: W) -> Self

Examples found in repository?
examples/simple.rs (lines 51-58)
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
fn simplify_with(
    s: &str,
    scheduler: impl RewriteScheduler<SimpleLanguage, ()> + 'static,
    path: impl AsRef<Path>,
) {
    // parse the expression, the type annotation tells it which Language to use
    let expr: RecExpr<SimpleLanguage> = s.parse().unwrap();

    let mut egraph = EGraph::new(());
    let root = egraph.add_expr(&expr);

    // simplify the expression using a Runner, which creates an e-graph with
    // the given expression and runs the given rules over it
    Runner::default()
        .with_scheduler(
            LoggingScheduler::from(scheduler)
                .with_out_file(
                    OpenOptions::new()
                        .write(true)
                        .create(true)
                        .truncate(true)
                        .open(path.as_ref())
                        .unwrap(),
                )
                .with_logging_enabled(true)
                .with_recorder(recorders::Timestamp::new(Instant::now()))
                .with_recorder(recorders::NumberENodes)
                .with_recorder(recorders::NumberEClasses)
                .with_recorder(recorders::BestProgram::new_with(|| AstSize, root)),
        )
        .with_egraph(egraph)
        .run(&make_rules());

    println!("Wrote {:?}", path.as_ref());
}
source

pub fn with_logging_enabled(self, enabled: bool) -> Self

Examples found in repository?
examples/simple.rs (line 59)
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
fn simplify_with(
    s: &str,
    scheduler: impl RewriteScheduler<SimpleLanguage, ()> + 'static,
    path: impl AsRef<Path>,
) {
    // parse the expression, the type annotation tells it which Language to use
    let expr: RecExpr<SimpleLanguage> = s.parse().unwrap();

    let mut egraph = EGraph::new(());
    let root = egraph.add_expr(&expr);

    // simplify the expression using a Runner, which creates an e-graph with
    // the given expression and runs the given rules over it
    Runner::default()
        .with_scheduler(
            LoggingScheduler::from(scheduler)
                .with_out_file(
                    OpenOptions::new()
                        .write(true)
                        .create(true)
                        .truncate(true)
                        .open(path.as_ref())
                        .unwrap(),
                )
                .with_logging_enabled(true)
                .with_recorder(recorders::Timestamp::new(Instant::now()))
                .with_recorder(recorders::NumberENodes)
                .with_recorder(recorders::NumberEClasses)
                .with_recorder(recorders::BestProgram::new_with(|| AstSize, root)),
        )
        .with_egraph(egraph)
        .run(&make_rules());

    println!("Wrote {:?}", path.as_ref());
}
source

pub fn with_recorder<D: Recorder<L, N> + 'a>(self, datum: D) -> Self
where L: Language, N: Analysis<L>,

Examples found in repository?
examples/simple.rs (line 60)
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
fn simplify_with(
    s: &str,
    scheduler: impl RewriteScheduler<SimpleLanguage, ()> + 'static,
    path: impl AsRef<Path>,
) {
    // parse the expression, the type annotation tells it which Language to use
    let expr: RecExpr<SimpleLanguage> = s.parse().unwrap();

    let mut egraph = EGraph::new(());
    let root = egraph.add_expr(&expr);

    // simplify the expression using a Runner, which creates an e-graph with
    // the given expression and runs the given rules over it
    Runner::default()
        .with_scheduler(
            LoggingScheduler::from(scheduler)
                .with_out_file(
                    OpenOptions::new()
                        .write(true)
                        .create(true)
                        .truncate(true)
                        .open(path.as_ref())
                        .unwrap(),
                )
                .with_logging_enabled(true)
                .with_recorder(recorders::Timestamp::new(Instant::now()))
                .with_recorder(recorders::NumberENodes)
                .with_recorder(recorders::NumberEClasses)
                .with_recorder(recorders::BestProgram::new_with(|| AstSize, root)),
        )
        .with_egraph(egraph)
        .run(&make_rules());

    println!("Wrote {:?}", path.as_ref());
}
source

pub fn identifier(&mut self, id: impl ToString) -> &mut Self

source

pub fn out_file(&mut self, out_file: impl Write + 'a) -> &mut Self

source

pub fn logging_enabled(&mut self, enabled: bool) -> &mut Self

source

pub fn record<D: Recorder<L, N> + 'a>(&mut self, datum: D) -> &mut Self
where L: Language, N: Analysis<L>,

Trait Implementations§

source§

impl<'a, S, L, N> From<S> for LoggingScheduler<'a, S, L, N>
where S: RewriteScheduler<L, N>, L: Language, N: Analysis<L>,

source§

fn from(value: S) -> Self

Converts to this type from the input type.
source§

impl<'a, S, L, N> RewriteScheduler<L, N> for LoggingScheduler<'a, S, L, N>
where S: RewriteScheduler<L, N>, L: Language, N: Analysis<L>,

source§

fn can_stop(&mut self, iteration: usize) -> bool

Whether or not the Runner is allowed to say it has saturated. Read more
source§

fn search_rewrite<'s>( &mut self, iteration: usize, egraph: &EGraph<L, N>, rewrite: &'s Rewrite<L, N>, ) -> Vec<SearchMatches<'s, L>>

A hook allowing you to customize rewrite searching behavior. Useful to implement rule management. Read more
source§

fn apply_rewrite( &mut self, iteration: usize, egraph: &mut EGraph<L, N>, rewrite: &Rewrite<L, N>, matches: Vec<SearchMatches<'_, L>>, ) -> usize

A hook allowing you to customize rewrite application behavior. Useful to implement rule management. Read more

Auto Trait Implementations§

§

impl<'a, S, L, N> Freeze for LoggingScheduler<'a, S, L, N>
where S: Freeze,

§

impl<'a, S, L, N> !RefUnwindSafe for LoggingScheduler<'a, S, L, N>

§

impl<'a, S, L, N> !Send for LoggingScheduler<'a, S, L, N>

§

impl<'a, S, L, N> !Sync for LoggingScheduler<'a, S, L, N>

§

impl<'a, S, L, N> Unpin for LoggingScheduler<'a, S, L, N>
where S: Unpin, L: Unpin, N: Unpin,

§

impl<'a, S, L, N> !UnwindSafe for LoggingScheduler<'a, S, L, N>

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, 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.