pub fn equals<T, A, B>(&mut self, left: A, right: B) -> InferenceResult
    where
        T: Output + Factoid + 'static,
        A: IntoExp<T>,
        B: IntoExp<T>,
    {
        let items: Vec<Exp<T>> = vec![left.bex(), right.bex()];

        let rule = EqualsRule::new(items);
        self.rules.push(Box::new(rule));
        Ok(())
    }
/// Ensures that two expressions are equal.
///
/// For instance, one could write:
/// ```text
/// solver.equals(outputs[0].rank, inputs[1].shape[0]);
/// solver.equals(outputs[1].rank, 3);
/// ```
Ensures that two expressions are equal.
Ensures that two expressions are equal .
pub fn equals<T, A, B>(&mut self, left: A, right: B) -> InferenceResult
    where
        T: Output + Factoid + 'static,
        A: IntoExp<T>,
        B: IntoExp<T>,
    {
        let items: Vec<Exp<T>> = vec![left.bex(), right.bex()];
        let rule = EqualsRule::new(items);
        self.rules.push(Box::new(rule));
        Ok(())
    }
pub fn equals < T , A , B > ( & mut self , left : A , right : B ) -> InferenceResult where T : Output + Factoid + ' static , A : IntoExp < T > , B : IntoExp < T > , { let items : Vec < Exp < T > > = vec ! [ left bex ( ) right bex ( ) ] ; let rule = EqualsRule :: new ( items ) ; self . rules . push ( Box :: new ( rule ) ) ; Ok ( ( ) ) }
Ensures that two expressions are equal.
Ensures that two expressions are equal .
&mut self
left
A
right
B
&mut self
left
A
right
B