pub enum Expression {
Address(MemoryReference),
FunctionCall(FunctionCallExpression),
Infix(InfixExpression),
Number(Complex64),
PiConstant,
Prefix(PrefixExpression),
Variable(String),
}
Expand description
The type of Quil expressions.
Note that when comparing Quil expressions, any embedded NaNs are treated as equal to other NaNs, not unequal, in contravention of the IEEE 754 spec.
Variants§
Address(MemoryReference)
FunctionCall(FunctionCallExpression)
Infix(InfixExpression)
Number(Complex64)
PiConstant
Prefix(PrefixExpression)
Variable(String)
Implementations§
Source§impl Expression
impl Expression
Sourcepub fn simplify(&mut self)
pub fn simplify(&mut self)
Simplify the expression as much as possible, in-place.
§Example
use quil_rs::expression::Expression;
use std::str::FromStr;
use num_complex::Complex64;
let mut expression = Expression::from_str("cos(2 * pi) + 2").unwrap();
expression.simplify();
assert_eq!(expression, Expression::Number(Complex64::from(3.0)));
Sourcepub fn into_simplified(self) -> Self
pub fn into_simplified(self) -> Self
Consume the expression, simplifying it as much as possible.
§Example
use quil_rs::expression::Expression;
use std::str::FromStr;
use num_complex::Complex64;
let simplified = Expression::from_str("cos(2 * pi) + 2").unwrap().into_simplified();
assert_eq!(simplified, Expression::Number(Complex64::from(3.0)));
Sourcepub fn evaluate(
&self,
variables: &HashMap<String, Complex64>,
memory_references: &HashMap<&str, Vec<f64>>,
) -> Result<Complex64, EvaluationError>
pub fn evaluate( &self, variables: &HashMap<String, Complex64>, memory_references: &HashMap<&str, Vec<f64>>, ) -> Result<Complex64, EvaluationError>
Evaluate an expression, expecting that it may be fully reduced to a single complex number. If it cannot be reduced to a complex number, return an error.
§Example
use quil_rs::expression::Expression;
use std::str::FromStr;
use std::collections::HashMap;
use num_complex::Complex64;
let expression = Expression::from_str("%beta + theta[0]").unwrap();
let mut variables = HashMap::with_capacity(1);
variables.insert(String::from("beta"), Complex64::from(1.0));
let mut memory_references = HashMap::with_capacity(1);
memory_references.insert("theta", vec![2.0]);
let evaluated = expression.evaluate(&variables, &memory_references).unwrap();
assert_eq!(evaluated, Complex64::from(3.0))
Sourcepub fn substitute_variables(
self,
variable_values: &HashMap<String, Expression>,
) -> Self
pub fn substitute_variables( self, variable_values: &HashMap<String, Expression>, ) -> Self
Substitute an expression in the place of each matching variable. Consumes the expression and returns a new one.
§Example
use quil_rs::expression::Expression;
use std::str::FromStr;
use std::collections::HashMap;
use num_complex::Complex64;
let expression = Expression::from_str("%x + %y").unwrap();
let mut variables = HashMap::with_capacity(1);
variables.insert(String::from("x"), Expression::Number(Complex64::from(1.0)));
let evaluated = expression.substitute_variables(&variables);
assert_eq!(evaluated, Expression::from_str("1.0 + %y").unwrap())
Sourcepub fn to_real(&self) -> Result<f64, EvaluationError>
pub fn to_real(&self) -> Result<f64, EvaluationError>
If this is a number with imaginary part “equal to” zero (of small absolute value), return that number. Otherwise, error with an evaluation error of a descriptive type.
Source§impl Expression
impl Expression
Sourcepub fn get_memory_references(&self) -> Vec<&MemoryReference>
pub fn get_memory_references(&self) -> Vec<&MemoryReference>
Return, if any, the memory references contained within this Expression.
Trait Implementations§
Source§impl Add for Expression
impl Add for Expression
Source§impl AddAssign for Expression
impl AddAssign for Expression
Source§fn add_assign(&mut self, other: Self)
fn add_assign(&mut self, other: Self)
+=
operation. Read moreSource§impl BitXor for Expression
impl BitXor for Expression
Source§impl BitXorAssign for Expression
impl BitXorAssign for Expression
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
^=
operation. Read moreSource§impl Clone for Expression
impl Clone for Expression
Source§fn clone(&self) -> Expression
fn clone(&self) -> Expression
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for Expression
impl Debug for Expression
Source§impl Div for Expression
impl Div for Expression
Source§impl DivAssign for Expression
impl DivAssign for Expression
Source§fn div_assign(&mut self, other: Self)
fn div_assign(&mut self, other: Self)
/=
operation. Read moreSource§impl FromStr for Expression
impl FromStr for Expression
Source§impl Hash for Expression
impl Hash for Expression
Source§impl Mul for Expression
impl Mul for Expression
Source§impl MulAssign for Expression
impl MulAssign for Expression
Source§fn mul_assign(&mut self, other: Self)
fn mul_assign(&mut self, other: Self)
*=
operation. Read moreSource§impl PartialEq for Expression
impl PartialEq for Expression
Source§impl Quil for Expression
impl Quil for Expression
Source§fn write(
&self,
f: &mut impl Write,
fall_back_to_debug: bool,
) -> Result<(), ToQuilError>
fn write( &self, f: &mut impl Write, fall_back_to_debug: bool, ) -> Result<(), ToQuilError>
fall_back_to_debug
is true
, then it must not return an error.Source§fn to_quil(&self) -> Result<String, ToQuilError>
fn to_quil(&self) -> Result<String, ToQuilError>
Source§fn to_quil_or_debug(&self) -> String
fn to_quil_or_debug(&self) -> String
Debug
representation of that
component.Source§impl Sub for Expression
impl Sub for Expression
Source§impl SubAssign for Expression
impl SubAssign for Expression
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
-=
operation. Read moreimpl Eq for Expression
Auto Trait Implementations§
impl Freeze for Expression
impl RefUnwindSafe for Expression
impl Send for Expression
impl Sync for Expression
impl Unpin for Expression
impl UnwindSafe for Expression
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.