pub enum Expression {
Address(MemoryReference),
FunctionCall(FunctionCallExpression),
Infix(InfixExpression),
Number(Complex64),
PiConstant,
Prefix(PrefixExpression),
Variable(String),
}
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)
Performs the
+=
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)
Performs the
^=
operation. Read moreSource§impl Clone for Expression
impl Clone for Expression
Source§fn clone(&self) -> Expression
fn clone(&self) -> Expression
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
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)
Performs the
/=
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)
Performs the
*=
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>
Write the Quil representation of the item to the given writer. If
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>
Return a string in valid Quil syntax or an error if the item cannot be represented with valid Quil.
Source§fn to_quil_or_debug(&self) -> String
fn to_quil_or_debug(&self) -> String
Return a string in valid Quil syntax if possible. Any individual component of this object
which cannot be represented in Quil will be replaced with a
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)
Performs the
-=
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)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
Compare self to
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>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
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
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.