pub trait Varswhere
    Self: Clone,{
    // Required methods
    fn vars(&self) -> &Arc<IndexSet<String>>;
    fn to_new_vars(
        &self,
        arc_vars: &Arc<IndexSet<String>>,
        state: Option<VarsRelationship>,
    ) -> Self;
    // Provided methods
    fn vars_cmp(&self, arc_vars: &Arc<IndexSet<String>>) -> VarsRelationship { ... }
    fn to_union_vars(
        &self,
        other: &Self,
        state: Option<VarsRelationship>,
    ) -> (Self, Self)
       where Self: Sized { ... }
    fn to_combined_vars(&self, other: &Self) -> (Self, Self)
       where Self: Sized { ... }
    fn ptr_eq(&self, other: &Self) -> bool { ... }
}Expand description
Manages the vars of the manifold associated with a dual number.
Required Methods§
Sourcefn vars(&self) -> &Arc<IndexSet<String>>
 
fn vars(&self) -> &Arc<IndexSet<String>>
Get a reference to the Arc pointer for the IndexSet containing the struct’s variables.
Sourcefn to_new_vars(
    &self,
    arc_vars: &Arc<IndexSet<String>>,
    state: Option<VarsRelationship>,
) -> Self
 
fn to_new_vars( &self, arc_vars: &Arc<IndexSet<String>>, state: Option<VarsRelationship>, ) -> Self
Create a new dual number with vars aligned with given new Arc pointer.
This method compares the existing vars with the new and reshuffles manifold gradient
values in memory. For large numbers of variables this is one of the least efficient
operations relating different dual numbers and should be avoided where possible.
Provided Methods§
Sourcefn vars_cmp(&self, arc_vars: &Arc<IndexSet<String>>) -> VarsRelationship
 
fn vars_cmp(&self, arc_vars: &Arc<IndexSet<String>>) -> VarsRelationship
Compare the vars on a Dual with a given Arc pointer.
Sourcefn to_union_vars(
    &self,
    other: &Self,
    state: Option<VarsRelationship>,
) -> (Self, Self)where
    Self: Sized,
 
fn to_union_vars(
    &self,
    other: &Self,
    state: Option<VarsRelationship>,
) -> (Self, Self)where
    Self: Sized,
Construct a tuple of 2 Self types whose vars are linked by an Arc pointer.
Gradient values contained in fields may be shuffled in memory if necessary
according to the calculated VarsRelationship. Do not use state directly unless you have
performed a pre-check.
§Examples
let x = Dual::new(1.0, vec!["x".to_string()]);
let y = Dual::new(1.5, vec!["y".to_string()]);
let (a, b) = x.to_union_vars(&y, Some(VarsRelationship::Difference));
// a: <Dual: 1.0, (x, y), [1.0, 0.0]>
// b: <Dual: 1.5, (x, y), [0.0, 1.0]>Sourcefn to_combined_vars(&self, other: &Self) -> (Self, Self)where
    Self: Sized,
 
fn to_combined_vars(&self, other: &Self) -> (Self, Self)where
    Self: Sized,
Construct a tuple of 2 Self types whose vars are linked by the explicit union
of their own variables.
Gradient values contained in fields will be shuffled in memory.
Sourcefn ptr_eq(&self, other: &Self) -> bool
 
fn ptr_eq(&self, other: &Self) -> bool
Compare if two Dual structs share the same vars by Arc pointer equivalence.
§Examples
let x1 = Dual::new(1.5, vec!["x".to_string()]);
let x2 = Dual::new(2.5, vec!["x".to_string()]);
assert_eq!(x1.ptr_eq(&x2), false); // Vars are the same but not a shared Arc pointerDyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.