InterpreterAndEmbedderState

Struct InterpreterAndEmbedderState 

Source
pub struct InterpreterAndEmbedderState<'a> {
    pub interpreter_state: InterpreterState<'a>,
    pub embedder_state: EmbedderState<'a>,
    pub newly_evaluated_terms: NewlyEvaluatedTerms,
}
Expand description

A more convenient, stateful wrapper around an InterpreterState and EmbedderState which automatically tracks any NewlyEvaluatedTerms originating from evaluations, and an interface which allows for using these to update the wrapped EmbedderState at a caller-chosen time.

Fields§

§interpreter_state: InterpreterState<'a>§embedder_state: EmbedderState<'a>§newly_evaluated_terms: NewlyEvaluatedTerms

Implementations§

Source§

impl<'a> InterpreterAndEmbedderState<'a>

Source

pub fn get_context(&self) -> &Context

Gets the Context that this InterpreterAndEmbedderState exists in.

Source

pub fn evaluate(&mut self, term_app: &TermApplication) -> TermReference

Given a TermApplication, uses the wrapped InterpreterState to evaluate the application, returning a TermReference for the result of the evaluation. Any newly-evaluated terms which result from evaluation will be added to this InterpreterAndEmbedderState’s newly_evaluated_terms member variable.

Source

pub fn ensure_every_type_has_a_term_on_init(&mut self)

Convenience method to force the wrapped InterpreterState to have at least one term inhabiting every type, assuming that it doesn’t really matter what these are. Calling this method will result in every newly-added term being added to the wrapped NewlyEvaluatedTerms

Source

pub fn bayesian_update_step(&mut self)

Uses the wrapped NewlyEvaluatedTerms and InterpreterState to update the embeddings within the wrapped EmbedderState. Calling this method will not modfiy the wrapped NewlyEvaluatedTerms, in case they are still of use after an embedding update in your particular use-case.

Source

pub fn clear_newly_received(&mut self)

Clears out the wrapped NewlyEvaluatedTerms, which typically will indicate that a new cycle of evaluations of terms against the InterpreterState is about to begin.

Source

pub fn new( model_prior_specification: &'a dyn PriorSpecification, elaborator_prior_specification: &'a dyn PriorSpecification, ctxt: &'a Context, ) -> InterpreterAndEmbedderState<'a>

Auto Trait Implementations§

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

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

Source§

fn vzip(self) -> V