Struct wedged::subspace::SimpleBlade
source · [−]#[repr(transparent)]pub struct SimpleBlade<T: AllocBlade<N, G>, N: Dim, G: Dim> { /* private fields */ }
Expand description
Implementations
Constructs a value with elements from an iterator using a generic shape
Constructs a value from an index function using a generic shape
Constructs a value filled with given element using a generic shape
Constructs a value cloned from a slice
Constructs a value from a Vec
Constructs a blade with all components set to zero using a generic shape
Returns the i
th basis element or panics if i
is out of range
Constructs a value using elements from an iterator
Panics if the iterator has too few elements to fill in the blade
Examples
let array = [0, 1, 2, 3, 4, 5];
let v1 = Vec6::from_iterator(0..); //static dim, static grade
let v2 = VecD::from_iterator(6, 0..); //dynamic dim, static grade
let v3 = Blade6::from_iterator(1, 0..); //static dim, dynamic grade
let v4 = BladeD::from_iterator(6, 1, 0..); //dynamic dim, dynamic grade
assert_eq!(v1.as_slice(), &array);
assert_eq!(v2.as_slice(), &array);
assert_eq!(v3.as_slice(), &array);
assert_eq!(v4.as_slice(), &array);
Constructs a value using a function mapping an index to an element
Examples
//computes the nth fibonnacci number
fn fib(n: usize) -> usize {
if n <= 1 {
1
} else {
fib(n-1) + fib(n-2)
}
}
//5D bivector, so 10 elements
let array = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
let b1 = BiVec5::from_index_fn(fib); //static dim, static grade
let b2 = BiVecD::from_index_fn(5, fib); //dynamic dim, static grade
let b3 = Blade5::from_index_fn(2, fib); //static dim, dynamic grade
let b4 = BladeD::from_index_fn(5, 2, fib); //dynamic dim, dynamic grade
assert_eq!(b1.as_slice(), &array);
assert_eq!(b2.as_slice(), &array);
assert_eq!(b3.as_slice(), &array);
assert_eq!(b4.as_slice(), &array);
Constructs a value where every component is the given element
Examples
//4D Trivector, so 4 elements
let array = [6.28; 4];
let t1 = TriVec4::from_element(6.28); //static dim, static grade
let t2 = TriVecD::from_element(4, 6.28); //dynamic dim, static grade
let t3 = Blade4::from_element(3, 6.28); //static dim, dynamic grade
let t4 = BladeD::from_element(4, 3, 6.28); //dynamic dim, dynamic grade
assert_eq!(t1.as_slice(), &array);
assert_eq!(t2.as_slice(), &array);
assert_eq!(t3.as_slice(), &array);
assert_eq!(t4.as_slice(), &array);
Constructs an elements by cloning values from a slice
Panics if not enough values are provided
let values = [6, 2, 8, 3];
let v1 = Vec4::from_slice(&values);
let v2 = VecD::from_slice(4, &values);
let q = Even3::from_slice(&values);
assert_eq!(v1.as_slice(), &values);
assert_eq!(v2.as_slice(), &values);
assert_eq!(q.as_slice(), &values);
Constructs an elements by moving values from a Vec
Panics if not enough values are provided
let values = vec![6, 2, 8, 3];
let v1 = Vec4::from_vec(values.clone());
let v2 = VecD::from_vec(4, values.clone());
let q = Even3::from_vec(values.clone());
assert_eq!(v1.as_slice(), &*values);
assert_eq!(v2.as_slice(), &*values);
assert_eq!(q.as_slice(), &*values);
Constructs a value with all components set to zero
Examples
let array = [0.0; 4];
let v1 = Vec4::<f64>::zeroed(); //static dim, static grade
let v2 = VecD::<f64>::zeroed(4); //dynamic dim, static grade
let v3 = Blade4::<f64>::zeroed(1); //static dim, dynamic grade
let v4 = BladeD::<f64>::zeroed(4, 1); //dynamic dim, dynamic grade
assert_eq!(v1.as_slice(), &array);
assert_eq!(v2.as_slice(), &array);
assert_eq!(v3.as_slice(), &array);
assert_eq!(v4.as_slice(), &array);
Constructs a value using elements from an iterator
Panics if the iterator has too few elements to fill in the blade
Examples
let array = [0, 1, 2, 3, 4, 5];
let v1 = Vec6::from_iterator(0..); //static dim, static grade
let v2 = VecD::from_iterator(6, 0..); //dynamic dim, static grade
let v3 = Blade6::from_iterator(1, 0..); //static dim, dynamic grade
let v4 = BladeD::from_iterator(6, 1, 0..); //dynamic dim, dynamic grade
assert_eq!(v1.as_slice(), &array);
assert_eq!(v2.as_slice(), &array);
assert_eq!(v3.as_slice(), &array);
assert_eq!(v4.as_slice(), &array);
Constructs a value using a function mapping an index to an element
Examples
//computes the nth fibonnacci number
fn fib(n: usize) -> usize {
if n <= 1 {
1
} else {
fib(n-1) + fib(n-2)
}
}
//5D bivector, so 10 elements
let array = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
let b1 = BiVec5::from_index_fn(fib); //static dim, static grade
let b2 = BiVecD::from_index_fn(5, fib); //dynamic dim, static grade
let b3 = Blade5::from_index_fn(2, fib); //static dim, dynamic grade
let b4 = BladeD::from_index_fn(5, 2, fib); //dynamic dim, dynamic grade
assert_eq!(b1.as_slice(), &array);
assert_eq!(b2.as_slice(), &array);
assert_eq!(b3.as_slice(), &array);
assert_eq!(b4.as_slice(), &array);
Constructs a value where every component is the given element
Examples
//4D Trivector, so 4 elements
let array = [6.28; 4];
let t1 = TriVec4::from_element(6.28); //static dim, static grade
let t2 = TriVecD::from_element(4, 6.28); //dynamic dim, static grade
let t3 = Blade4::from_element(3, 6.28); //static dim, dynamic grade
let t4 = BladeD::from_element(4, 3, 6.28); //dynamic dim, dynamic grade
assert_eq!(t1.as_slice(), &array);
assert_eq!(t2.as_slice(), &array);
assert_eq!(t3.as_slice(), &array);
assert_eq!(t4.as_slice(), &array);
Constructs an elements by cloning values from a slice
Panics if not enough values are provided
let values = [6, 2, 8, 3];
let v1 = Vec4::from_slice(&values);
let v2 = VecD::from_slice(4, &values);
let q = Even3::from_slice(&values);
assert_eq!(v1.as_slice(), &values);
assert_eq!(v2.as_slice(), &values);
assert_eq!(q.as_slice(), &values);
Constructs an elements by moving values from a Vec
Panics if not enough values are provided
let values = vec![6, 2, 8, 3];
let v1 = Vec4::from_vec(values.clone());
let v2 = VecD::from_vec(4, values.clone());
let q = Even3::from_vec(values.clone());
assert_eq!(v1.as_slice(), &*values);
assert_eq!(v2.as_slice(), &*values);
assert_eq!(q.as_slice(), &*values);
Constructs a value with all components set to zero
Examples
let array = [0.0; 4];
let v1 = Vec4::<f64>::zeroed(); //static dim, static grade
let v2 = VecD::<f64>::zeroed(4); //dynamic dim, static grade
let v3 = Blade4::<f64>::zeroed(1); //static dim, dynamic grade
let v4 = BladeD::<f64>::zeroed(4, 1); //dynamic dim, dynamic grade
assert_eq!(v1.as_slice(), &array);
assert_eq!(v2.as_slice(), &array);
assert_eq!(v3.as_slice(), &array);
assert_eq!(v4.as_slice(), &array);
Unrwaps self
into its internal algebraic type
Unrwaps self
into a reference to its internal algebraic type
Creates a new value of Self
from an internal algebraic type
assuming that it satisfies all the guarrantees of this type
Safety
This function is not marked unsafe
since there is no way an invalid
argument could violate any of Rust’s memory safety rules. However, caution
should still be taken since an invalid input can still dramatically break
many other functions of this type.
Unwraps self
and a mutable reference of its inner algebraic struct
Creates a new value of Self
from its inner algebraic struct
Since T:AllocSimpleBlade<N,G>
, this is guarranteed to satisfy all the preconditions of this type
Divides self
by its norm
Divides self
by its norm if it is non-zero
Normalizes self
and returns its norm and normalization
Normalizes self
and returns its norm and normalization if non-zero
Finds the parallel component of b
onto self
Computes the exponential of this bivector as a Rotor
This will produce a Rotor
that performs a simple rotation in the plane of self
by an angle twice the norm of self
This is almost always faster than [BiVecN::exp_rotor()]
, but can only result in
simple rotations.
pub fn cast_dim_generic<N2: Dim>(self, n: N2) -> SimpleBlade<T, N2, G> where
T: AllocBlade<N2, G>,
pub fn cast_dim_generic<N2: Dim>(self, n: N2) -> SimpleBlade<T, N2, G> where
T: AllocBlade<N2, G>,
Embeds self
into a different dimension by either removing elements or inserting zeros
pub fn cast_dim_dyn(self, n: usize) -> SimpleBlade<T, Dynamic, G> where
T: AllocBlade<Dynamic, G>,
pub fn cast_dim_dyn(self, n: usize) -> SimpleBlade<T, Dynamic, G> where
T: AllocBlade<Dynamic, G>,
Embeds self
into a different dimension by either removing elements or inserting zeros
Embeds self
into a different dimension by either removing elements or inserting zeros
impl<T: AllocBlade<N, G>, N: Dim, G: Dim> SimpleBlade<T, N, G> where
N: DimSub<G>,
T: AllocBlade<N, DimDiff<N, G>> + Neg<Output = T>,
impl<T: AllocBlade<N, G>, N: Dim, G: Dim> SimpleBlade<T, N, G> where
N: DimSub<G>,
T: AllocBlade<N, DimDiff<N, G>> + Neg<Output = T>,
Finds the dual of this simple blade. See Blade::dual()
for more information
Finds the inverse dual of this simple blade. See Blade::undual()
for more information
Constructs a SimpleVec1
directly from components
Examples
let arr = [6];
let x = SimpleVec1::new(6);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleVec2
directly from components
Examples
let arr = [6, 2];
let x = SimpleVec2::new(6, 2);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleVec3
directly from components
Examples
let arr = [6, 2, 8];
let x = SimpleVec3::new(6, 2, 8);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleVec4
directly from components
Examples
let arr = [6, 2, 8, 3];
let x = SimpleVec4::new(6, 2, 8, 3);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleVec5
directly from components
Examples
let arr = [6, 2, 8, 3, 1];
let x = SimpleVec5::new(6, 2, 8, 3, 1);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleVec6
directly from components
Examples
let arr = [6, 2, 8, 3, 1, 8];
let x = SimpleVec6::new(6, 2, 8, 3, 1, 8);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleBiVec3
directly from components
Examples
let arr = [6, 2, 8];
let x = SimpleBiVec3::new(6, 2, 8);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleTriVec4
directly from components
Examples
let arr = [6, 2, 8, 3];
let x = SimpleTriVec4::new(6, 2, 8, 3);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleQuadVec5
directly from components
Examples
let arr = [6, 2, 8, 3, 1];
let x = SimpleQuadVec5::new(6, 2, 8, 3, 1);
assert_eq!(x.as_slice(), &arr);
Constructs a SimplePentVec6
directly from components
Examples
let arr = [6, 2, 8, 3, 1, 8];
let x = SimplePentVec6::new(6, 2, 8, 3, 1, 8);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleBiVec2
directly from components
Examples
let arr = [6];
let x = SimpleBiVec2::new(6);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleTriVec3
directly from components
Examples
let arr = [6];
let x = SimpleTriVec3::new(6);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleQuadVec4
directly from components
Examples
let arr = [6];
let x = SimpleQuadVec4::new(6);
assert_eq!(x.as_slice(), &arr);
Constructs a SimplePentVec5
directly from components
Examples
let arr = [6];
let x = SimplePentVec5::new(6);
assert_eq!(x.as_slice(), &arr);
Constructs a SimpleHexVec6
directly from components
Examples
let arr = [6];
let x = SimpleHexVec6::new(6);
assert_eq!(x.as_slice(), &arr);
Creates a psuedoscalar directly from its component
use wedged::subspace::*;
use wedged::base::U3;
let x = 6.2831;
let s = SimpleBlade::<_,U3,U3>::new_psuedoscalar(x);
assert_eq!(s.value, x);
assert_eq!(s.grade(), 3);
Returns the unit psuedoscalar in dimension N
Methods from Deref<Target = Blade<T, N, G>>
Returns the dimension of this value as an instance of the generic type N
This is mostly used internally to unify the codebase between Const
dimensions
and Dynamic
dimensions. Since Dynamic
grades often require a usize
input when
Const
grades do not, this allows a function to take a ZST for static dimensions
and to take a numeric value for dynamic ones
Returns the grade of this Blade as an instance of the generic type G
This is mostly used internally to unify the codebase between Const
grades
and Dynamic
grades. Since Dynamic
grades often require a usize
input when
Const
grades do not, this allows a function to take a ZST for static Blades
and to take a numeric value for dynamic ones
The number of dimensions this value resides in
Note that this differs from both the grade and number of elements. Instead, this describes the dimension of the vector space generating the algebra this blade resides in.
Examples
//All of these live in 3-dimensions
let v = Vec3::new(3, 1, 4);
let b = BiVec3::new(6, 2, 8);
let r = Even3::new(1, 6, 1, 8);
let m = Multivector3::new(0, 5, 7, 7, 2, 1, 5, 6);
assert_eq!(v.dim(), 3);
assert_eq!(b.dim(), 3);
assert_eq!(r.dim(), 3);
assert_eq!(m.dim(), 3);
//whereas these are in 4D
let v = Vec4::from_element(6);
let b = BiVec4::from_element(2);
let r = Even4::from_element(8);
let m = Multivector4::from_element(3);
assert_eq!(v.dim(), 4);
assert_eq!(b.dim(), 4);
assert_eq!(r.dim(), 4);
assert_eq!(m.dim(), 4);
The grade of this blade
This describes the “dimension” of the vector space this blade represents. Note that this is completely different that the dimension of the blade which describes the the dimension of the surrounding space the blade lives in.
More concretely, the grade is the number of vector basis elements multiplied together to get a basis of this blade. So to get a blade of grade 3, you would need to wedge three vectors together.
Examples
//All vectors are grade 1
let v1 = Vec3::new(6, 2, 8);
let v2 = Vec6::new(6, 2, 8, 3, 1, 8);
let v3 = VecD::from_element(2, 0.0);
assert_eq!(v1.grade(), 1);
assert_eq!(v2.grade(), 1);
assert_eq!(v3.grade(), 1);
//All Bivectors are grade 2
let b1 = BiVec4::new(6, 2, 8, 3, 1, 8);
let b2 = BiVecD::from_element(3, 0.0);
assert_eq!(b1.grade(), 2);
assert_eq!(b2.grade(), 2);
//Dynamic blades
let blade1 = Blade6::from_element(5, 0.0);
let blade2 = BladeD::from_element(4, 3, 0.0);
assert_eq!(blade1.grade(), 5);
assert_eq!(blade2.grade(), 3);
The number of coordinates this value has
Note that for all values besides vectors and psuedovectors, this is completely different than the dimension which instead measures the dimension of the space the value lives in.
- For blades, this value is equal to number of combinations of size
self.grade()
you can make fromself.dim()
basis vectors, iebinom(self.dim(), self.grade())
. - For even values, the number of elements is
2^(self.dim()-1)
with the exception of1
when the dimension is0
- For general multivectors, there are
2^self.dim()
components
Finally, note that in all cases, the value returned is either a compile-time constant or cached as the length of some array, so there is no computational overhead to this function.
Examples
let v = Vec4::from_element(0);
let b = BiVec4::from_element(0);
let r = Even4::from_element(0);
let m = Multivector4::from_element(0);
assert_eq!(v.elements(), 4); // (4 choose 1) = 4
assert_eq!(b.elements(), 6); // (4 choose 2) = 6
assert_eq!(r.elements(), 8); // 2^(4-1) = 8
assert_eq!(m.elements(), 16); // 2^4 = 16
Borrows the components of this value as a slice
Borrows the components of this value as a mutable slice
The sum of squares of each element
Note that this does not take into account the conjugate of any complex elements. This is by explicit design:
- We can relax the
ComplexField
requirement and have more possibilies for scalars types (like polynomials!). - For vectors, this should give the quadradic form of the Clifford
algebra, but the function
Q(z) = zz̅
is not a valid quadradic form†
Finds the parallel component of b
onto self
Trait Implementations
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default tolerance to use when testing values that are close together. Read more
A test for equality that uses the absolute difference to compute the approximate equality of two numbers. Read more
The inverse of AbsDiffEq::abs_diff_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default tolerance to use when testing values that are close together. Read more
A test for equality that uses the absolute difference to compute the approximate equality of two numbers. Read more
The inverse of AbsDiffEq::abs_diff_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default tolerance to use when testing values that are close together. Read more
A test for equality that uses the absolute difference to compute the approximate equality of two numbers. Read more
The inverse of AbsDiffEq::abs_diff_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default tolerance to use when testing values that are close together. Read more
A test for equality that uses the absolute difference to compute the approximate equality of two numbers. Read more
The inverse of AbsDiffEq::abs_diff_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> AbsDiffEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + AbsDiffEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default tolerance to use when testing values that are close together. Read more
A test for equality that uses the absolute difference to compute the approximate equality of two numbers. Read more
The inverse of AbsDiffEq::abs_diff_eq
.
impl<'b, T1, T2, U, N: Dim, G: Dim> Add<&'b SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Add<&'b T2, Output = U>,
impl<'b, T1, T2, U, N: Dim, G: Dim> Add<&'b SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Add<&'b T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the +
operator.
Performs the +
operation. Read more
impl<'a, 'b, T1, T2, U, N: Dim, G: Dim> Add<&'b SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefAdd<'a, &'b T2, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G: Dim> Add<&'b SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefAdd<'a, &'b T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the +
operator.
Performs the +
operation. Read more
impl<T1, T2, U, N: Dim, G: Dim> Add<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Add<T2, Output = U>,
impl<T1, T2, U, N: Dim, G: Dim> Add<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Add<T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the +
operator.
Performs the +
operation. Read more
impl<'a, T1, T2, U, N: Dim, G: Dim> Add<SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefAdd<'a, T2, Output = U>,
impl<'a, T1, T2, U, N: Dim, G: Dim> Add<SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefAdd<'a, T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the +
operator.
Performs the +
operation. Read more
impl<'a, T1, T2, N: Dim, G: Dim> AddAssign<&'a SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + AddAssign<&'a T2>,
T2: AllocSimpleBlade<N, G>,
impl<'a, T1, T2, N: Dim, G: Dim> AddAssign<&'a SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + AddAssign<&'a T2>,
T2: AllocSimpleBlade<N, G>,
Performs the +=
operation. Read more
impl<T1, T2, N: Dim, G: Dim> AddAssign<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + AddAssign<T2>,
T2: AllocSimpleBlade<N, G>,
impl<T1, T2, N: Dim, G: Dim> AddAssign<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + AddAssign<T2>,
T2: AllocSimpleBlade<N, G>,
Performs the +=
operation. Read more
impl<T: AllocSimpleBlade<N, G>, N: Dim, G: Dim> AsMut<Blade<T, N, G>> for SimpleBlade<T, N, G>
impl<T: AllocSimpleBlade<N, G>, N: Dim, G: Dim> AsMut<Blade<T, N, G>> for SimpleBlade<T, N, G>
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<&'b SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<&'b SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
The resulting type after applying the ^
operator.
Performs the ^
operation. Read more
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<&'b SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<&'b SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
The resulting type after applying the ^
operator.
Performs the ^
operation. Read more
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
The resulting type after applying the ^
operator.
Performs the ^
operation. Read more
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> BitXor<SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimAdd<G2>,
U: AllocBlade<N, DimSum<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
type Output = SimpleBlade<U, N, DimSum<G1, G2>>
The resulting type after applying the ^
operator.
Performs the ^
operation. Read more
impl<T: AllocSimpleBlade<N, G>, N: Dim, G: Dim> BorrowMut<Blade<T, N, G>> for SimpleBlade<T, N, G>
impl<T: AllocSimpleBlade<N, G>, N: Dim, G: Dim> BorrowMut<Blade<T, N, G>> for SimpleBlade<T, N, G>
Mutably borrows from an owned value. Read more
impl<T: AllocSimpleBlade<N, G> + Default, N: DimName, G: DimName> Default for SimpleBlade<T, N, G>
impl<T: AllocSimpleBlade<N, G> + Default, N: DimName, G: DimName> Default for SimpleBlade<T, N, G>
Returns the “default value” for a type. Read more
impl<T1, T2, U, N: Dim, G: Dim> Div<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Div<T2, Output = U>,
impl<T1, T2, U, N: Dim, G: Dim> Div<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Div<T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the /
operator.
Performs the /
operation. Read more
impl<'a, T1, T2, U, N: Dim, G: Dim> Div<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefDiv<'a, T2, Output = U>,
impl<'a, T1, T2, U, N: Dim, G: Dim> Div<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefDiv<'a, T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the /
operator.
Performs the /
operation. Read more
impl<'a, T: AllocBlade<N, G> + DivAssign<&'a T>, N: Dim, G: Dim> DivAssign<&'a T> for SimpleBlade<T, N, G>
impl<'a, T: AllocBlade<N, G> + DivAssign<&'a T>, N: Dim, G: Dim> DivAssign<&'a T> for SimpleBlade<T, N, G>
Performs the /=
operation. Read more
impl<T: AllocBlade<N, G> + DivAssign<T> + Clone, N: Dim, G: Dim> DivAssign<T> for SimpleBlade<T, N, G>
impl<T: AllocBlade<N, G> + DivAssign<T> + Clone, N: Dim, G: Dim> DivAssign<T> for SimpleBlade<T, N, G>
Performs the /=
operation. Read more
impl<'a, T: AllocBlade<N, G>, N: Dim, G: Dim> From<&'a SimpleBlade<T, N, G>> for &'a Blade<T, N, G>
impl<'a, T: AllocBlade<N, G>, N: Dim, G: Dim> From<&'a SimpleBlade<T, N, G>> for &'a Blade<T, N, G>
Performs the conversion.
impl<'a, T: AllocBlade<N, G>, N: Dim, G: Dim> From<&'a mut SimpleBlade<T, N, G>> for &'a mut Blade<T, N, G>
impl<'a, T: AllocBlade<N, G>, N: Dim, G: Dim> From<&'a mut SimpleBlade<T, N, G>> for &'a mut Blade<T, N, G>
Performs the conversion.
Performs the conversion.
Performs the conversion.
Performs the conversion.
impl<T: AllocSimpleBlade<N, G>, N: DimName, G: DimName> FromIterator<T> for SimpleBlade<T, N, G>
impl<T: AllocSimpleBlade<N, G>, N: DimName, G: DimName> FromIterator<T> for SimpleBlade<T, N, G>
Creates a value from an iterator. Read more
impl<'a, T: AllocSimpleBlade<N, G>, N: Dim, G: Dim> IntoIterator for &'a mut SimpleBlade<T, N, G>
impl<'a, T: AllocSimpleBlade<N, G>, N: Dim, G: Dim> IntoIterator for &'a mut SimpleBlade<T, N, G>
impl<T, N: Dim, G: Dim> Inv for SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
T: Neg<Output = T> + Clone + RefComplexField,
impl<T, N: Dim, G: Dim> Inv for SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
T: Neg<Output = T> + Clone + RefComplexField,
type Output = SimpleBlade<T, N, G>
type Output = SimpleBlade<T, N, G>
The result after applying the operator.
Returns the multiplicative inverse of self
. Read more
impl<'a, T, N: Dim, G: Dim> Inv for &'a SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
T: Clone + Neg<Output = T> + RefComplexField,
SimpleBlade<T, N, G>: Clone,
impl<'a, T, N: Dim, G: Dim> Inv for &'a SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
T: Clone + Neg<Output = T> + RefComplexField,
SimpleBlade<T, N, G>: Clone,
type Output = SimpleBlade<T, N, G>
type Output = SimpleBlade<T, N, G>
The result after applying the operator.
Returns the multiplicative inverse of self
. Read more
impl<T1, T2, U, N: Dim, G: Dim> InvScale<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Div<T2, Output = U>,
impl<T1, T2, U, N: Dim, G: Dim> InvScale<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Div<T2, Output = U>,
type Output = SimpleBlade<U, N, G>
impl<'a, T1, T2, U, N: Dim, G: Dim> InvScale<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefDiv<'a, T2, Output = U>,
impl<'a, T1, T2, U, N: Dim, G: Dim> InvScale<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefDiv<'a, T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<f32, N, G>
type Output = SimpleBlade<f32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<f32, N, G>> for &'a f32 where
f32: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<f32, N, G>> for &'a f32 where
f32: AllocBlade<N, G>,
type Output = SimpleBlade<f32, N, G>
type Output = SimpleBlade<f32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<f64, N, G>
type Output = SimpleBlade<f64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<f64, N, G>> for &'a f64 where
f64: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<f64, N, G>> for &'a f64 where
f64: AllocBlade<N, G>,
type Output = SimpleBlade<f64, N, G>
type Output = SimpleBlade<f64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i128, N, G>> for i128 where
i128: AllocBlade<N, G>,
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i128, N, G>> for i128 where
i128: AllocBlade<N, G>,
type Output = SimpleBlade<i128, N, G>
type Output = SimpleBlade<i128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i128, N, G>> for &'a i128 where
i128: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i128, N, G>> for &'a i128 where
i128: AllocBlade<N, G>,
type Output = SimpleBlade<i128, N, G>
type Output = SimpleBlade<i128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i16, N, G>
type Output = SimpleBlade<i16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i16, N, G>> for &'a i16 where
i16: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i16, N, G>> for &'a i16 where
i16: AllocBlade<N, G>,
type Output = SimpleBlade<i16, N, G>
type Output = SimpleBlade<i16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i32, N, G>
type Output = SimpleBlade<i32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i32, N, G>> for &'a i32 where
i32: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i32, N, G>> for &'a i32 where
i32: AllocBlade<N, G>,
type Output = SimpleBlade<i32, N, G>
type Output = SimpleBlade<i32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i64, N, G>
type Output = SimpleBlade<i64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i64, N, G>> for &'a i64 where
i64: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i64, N, G>> for &'a i64 where
i64: AllocBlade<N, G>,
type Output = SimpleBlade<i64, N, G>
type Output = SimpleBlade<i64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i8, N, G>
type Output = SimpleBlade<i8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i8, N, G>> for &'a i8 where
i8: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<i8, N, G>> for &'a i8 where
i8: AllocBlade<N, G>,
type Output = SimpleBlade<i8, N, G>
type Output = SimpleBlade<i8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<isize, N, G>> for isize where
isize: AllocBlade<N, G>,
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<isize, N, G>> for isize where
isize: AllocBlade<N, G>,
type Output = SimpleBlade<isize, N, G>
type Output = SimpleBlade<isize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<isize, N, G>> for &'a isize where
isize: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<isize, N, G>> for &'a isize where
isize: AllocBlade<N, G>,
type Output = SimpleBlade<isize, N, G>
type Output = SimpleBlade<isize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u128, N, G>> for u128 where
u128: AllocBlade<N, G>,
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u128, N, G>> for u128 where
u128: AllocBlade<N, G>,
type Output = SimpleBlade<u128, N, G>
type Output = SimpleBlade<u128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u128, N, G>> for &'a u128 where
u128: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u128, N, G>> for &'a u128 where
u128: AllocBlade<N, G>,
type Output = SimpleBlade<u128, N, G>
type Output = SimpleBlade<u128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u16, N, G>
type Output = SimpleBlade<u16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u16, N, G>> for &'a u16 where
u16: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u16, N, G>> for &'a u16 where
u16: AllocBlade<N, G>,
type Output = SimpleBlade<u16, N, G>
type Output = SimpleBlade<u16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u32, N, G>
type Output = SimpleBlade<u32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u32, N, G>> for &'a u32 where
u32: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u32, N, G>> for &'a u32 where
u32: AllocBlade<N, G>,
type Output = SimpleBlade<u32, N, G>
type Output = SimpleBlade<u32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u64, N, G>
type Output = SimpleBlade<u64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u64, N, G>> for &'a u64 where
u64: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u64, N, G>> for &'a u64 where
u64: AllocBlade<N, G>,
type Output = SimpleBlade<u64, N, G>
type Output = SimpleBlade<u64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u8, N, G>
type Output = SimpleBlade<u8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u8, N, G>> for &'a u8 where
u8: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<u8, N, G>> for &'a u8 where
u8: AllocBlade<N, G>,
type Output = SimpleBlade<u8, N, G>
type Output = SimpleBlade<u8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<usize, N, G>> for usize where
usize: AllocBlade<N, G>,
impl<'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<usize, N, G>> for usize where
usize: AllocBlade<N, G>,
type Output = SimpleBlade<usize, N, G>
type Output = SimpleBlade<usize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<usize, N, G>> for &'a usize where
usize: AllocBlade<N, G>,
impl<'a, 'b, N: Dim, G: Dim> Mul<&'b SimpleBlade<usize, N, G>> for &'a usize where
usize: AllocBlade<N, G>,
type Output = SimpleBlade<usize, N, G>
type Output = SimpleBlade<usize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<f32, N, G>
type Output = SimpleBlade<f32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<f32, N, G>
type Output = SimpleBlade<f32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<f64, N, G>
type Output = SimpleBlade<f64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<f64, N, G>
type Output = SimpleBlade<f64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i128, N, G>
type Output = SimpleBlade<i128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<i128, N, G>> for &'a i128 where
i128: AllocBlade<N, G>,
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<i128, N, G>> for &'a i128 where
i128: AllocBlade<N, G>,
type Output = SimpleBlade<i128, N, G>
type Output = SimpleBlade<i128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i16, N, G>
type Output = SimpleBlade<i16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i16, N, G>
type Output = SimpleBlade<i16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i32, N, G>
type Output = SimpleBlade<i32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i32, N, G>
type Output = SimpleBlade<i32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i64, N, G>
type Output = SimpleBlade<i64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i64, N, G>
type Output = SimpleBlade<i64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i8, N, G>
type Output = SimpleBlade<i8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<i8, N, G>
type Output = SimpleBlade<i8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<isize, N, G>
type Output = SimpleBlade<isize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<isize, N, G>> for &'a isize where
isize: AllocBlade<N, G>,
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<isize, N, G>> for &'a isize where
isize: AllocBlade<N, G>,
type Output = SimpleBlade<isize, N, G>
type Output = SimpleBlade<isize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u128, N, G>
type Output = SimpleBlade<u128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<u128, N, G>> for &'a u128 where
u128: AllocBlade<N, G>,
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<u128, N, G>> for &'a u128 where
u128: AllocBlade<N, G>,
type Output = SimpleBlade<u128, N, G>
type Output = SimpleBlade<u128, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u16, N, G>
type Output = SimpleBlade<u16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u16, N, G>
type Output = SimpleBlade<u16, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u32, N, G>
type Output = SimpleBlade<u32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u32, N, G>
type Output = SimpleBlade<u32, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u64, N, G>
type Output = SimpleBlade<u64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u64, N, G>
type Output = SimpleBlade<u64, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u8, N, G>
type Output = SimpleBlade<u8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<u8, N, G>
type Output = SimpleBlade<u8, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
type Output = SimpleBlade<usize, N, G>
type Output = SimpleBlade<usize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<usize, N, G>> for &'a usize where
usize: AllocBlade<N, G>,
impl<'a, N: Dim, G: Dim> Mul<SimpleBlade<usize, N, G>> for &'a usize where
usize: AllocBlade<N, G>,
type Output = SimpleBlade<usize, N, G>
type Output = SimpleBlade<usize, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<T1, T2, U, N: Dim, G: Dim> Mul<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Mul<T2, Output = U>,
impl<T1, T2, U, N: Dim, G: Dim> Mul<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Mul<T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, T1, T2, U, N: Dim, G: Dim> Mul<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefMul<'a, T2, Output = U>,
impl<'a, T1, T2, U, N: Dim, G: Dim> Mul<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefMul<'a, T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, T: AllocBlade<N, G> + MulAssign<&'a T>, N: Dim, G: Dim> MulAssign<&'a T> for SimpleBlade<T, N, G>
impl<'a, T: AllocBlade<N, G> + MulAssign<&'a T>, N: Dim, G: Dim> MulAssign<&'a T> for SimpleBlade<T, N, G>
Performs the *=
operation. Read more
impl<T: AllocBlade<N, G> + MulAssign<T> + Clone, N: Dim, G: Dim> MulAssign<T> for SimpleBlade<T, N, G>
impl<T: AllocBlade<N, G> + MulAssign<T> + Clone, N: Dim, G: Dim> MulAssign<T> for SimpleBlade<T, N, G>
Performs the *=
operation. Read more
impl<T, U, N: Dim, G: Dim> Neg for SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
T: Neg<Output = U>,
impl<T, U, N: Dim, G: Dim> Neg for SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
T: Neg<Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the -
operator.
Performs the unary -
operation. Read more
impl<'a, T, U, N: Dim, G: Dim> Neg for &'a SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
T: RefNeg<'a, Output = U>,
impl<'a, T, U, N: Dim, G: Dim> Neg for &'a SimpleBlade<T, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
T: RefNeg<'a, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the -
operator.
Performs the unary -
operation. Read more
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> PartialEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + PartialEq<T2>,
T2: AllocBlade<N2, G2>,
impl<T, N: Dim, G1: Dim, G2: Dim> Project<Blade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Project<Blade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Project<SimpleBlade<T, N, G2>> for Blade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocSimpleBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Project<SimpleBlade<T, N, G2>> for Blade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocSimpleBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T, N: Dim, G1: Dim, G2: Dim> Project<SimpleBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Project<SimpleBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T, N: Dim, G1: Dim, G2: Dim> Project<SimpleBlade<T, N, G2>> for UnitBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Project<SimpleBlade<T, N, G2>> for UnitBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T, N: Dim, G1: Dim, G2: Dim> Project<UnitBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Project<UnitBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimSymSub<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSymDiff<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<Blade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<Blade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<SimpleBlade<T, N, G2>> for Blade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocSimpleBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<SimpleBlade<T, N, G2>> for Blade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocSimpleBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<SimpleBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<SimpleBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<SimpleBlade<T, N, G2>> for UnitBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<SimpleBlade<T, N, G2>> for UnitBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<UnitBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
impl<T, N: Dim, G1: Dim, G2: Dim> Reject<UnitBlade<T, N, G2>> for SimpleBlade<T, N, G1> where
G2: DimAdd<G1>,
T: AllocBlade<N, G1> + AllocBlade<N, G2> + AllocBlade<N, DimSum<G2, G1>> + RefDivRing,
type Output = SimpleBlade<T, N, G2>
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default relative tolerance for testing values that are far-apart. Read more
A test for equality that uses a relative comparison if the values are far apart.
The inverse of RelativeEq::relative_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default relative tolerance for testing values that are far-apart. Read more
fn relative_eq(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
fn relative_eq(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
A test for equality that uses a relative comparison if the values are far apart.
fn relative_ne(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
fn relative_ne(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
The inverse of RelativeEq::relative_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default relative tolerance for testing values that are far-apart. Read more
fn relative_eq(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
fn relative_eq(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
A test for equality that uses a relative comparison if the values are far apart.
fn relative_ne(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
fn relative_ne(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
The inverse of RelativeEq::relative_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default relative tolerance for testing values that are far-apart. Read more
fn relative_eq(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
fn relative_eq(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
A test for equality that uses a relative comparison if the values are far apart.
fn relative_ne(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
fn relative_ne(
&self,
rhs: &SimpleBlade<T2, N2, G2>,
epsilon: T1::Epsilon,
max_relative: T1::Epsilon
) -> bool
The inverse of RelativeEq::relative_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> RelativeEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + RelativeEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default relative tolerance for testing values that are far-apart. Read more
A test for equality that uses a relative comparison if the values are far apart.
The inverse of RelativeEq::relative_eq
.
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<&'b SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<&'b SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
The resulting type after applying the %
operator.
Performs the %
operation. Read more
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<&'b SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<&'b SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
The resulting type after applying the %
operator.
Performs the %
operation. Read more
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
The resulting type after applying the %
operator.
Performs the %
operation. Read more
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> Rem<SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
G1: DimSymSub<G2>,
U: AllocBlade<N, DimSymDiff<G1, G2>> + AddGroup,
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
type Output = SimpleBlade<U, N, DimSymDiff<G1, G2>>
The resulting type after applying the %
operator.
Performs the %
operation. Read more
impl<T1, T2, U, N: Dim, G: Dim> Scale<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Mul<T2, Output = U>,
impl<T1, T2, U, N: Dim, G: Dim> Scale<T2> for SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: Mul<T2, Output = U>,
type Output = SimpleBlade<U, N, G>
impl<'a, T1, T2, U, N: Dim, G: Dim> Scale<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefMul<'a, T2, Output = U>,
impl<'a, T1, T2, U, N: Dim, G: Dim> Scale<T2> for &'a SimpleBlade<T1, N, G> where
T1: AllocBlade<N, G>,
T2: Clone,
U: AllocBlade<N, G>,
T1: RefMul<'a, T2, Output = U>,
type Output = SimpleBlade<U, N, G>
impl<'b, T1, T2, U, N: Dim, G: Dim> Sub<&'b SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Sub<&'b T2, Output = U>,
impl<'b, T1, T2, U, N: Dim, G: Dim> Sub<&'b SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Sub<&'b T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the -
operator.
Performs the -
operation. Read more
impl<'a, 'b, T1, T2, U, N: Dim, G: Dim> Sub<&'b SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefSub<'a, &'b T2, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G: Dim> Sub<&'b SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefSub<'a, &'b T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the -
operator.
Performs the -
operation. Read more
impl<T1, T2, U, N: Dim, G: Dim> Sub<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Sub<T2, Output = U>,
impl<T1, T2, U, N: Dim, G: Dim> Sub<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: Sub<T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the -
operator.
Performs the -
operation. Read more
impl<'a, T1, T2, U, N: Dim, G: Dim> Sub<SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefSub<'a, T2, Output = U>,
impl<'a, T1, T2, U, N: Dim, G: Dim> Sub<SimpleBlade<T2, N, G>> for &'a SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G>,
T2: AllocSimpleBlade<N, G>,
U: AllocSimpleBlade<N, G>,
T1: RefSub<'a, T2, Output = U>,
type Output = SimpleBlade<U, N, G>
type Output = SimpleBlade<U, N, G>
The resulting type after applying the -
operator.
Performs the -
operation. Read more
impl<'a, T1, T2, N: Dim, G: Dim> SubAssign<&'a SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + SubAssign<&'a T2>,
T2: AllocSimpleBlade<N, G>,
impl<'a, T1, T2, N: Dim, G: Dim> SubAssign<&'a SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + SubAssign<&'a T2>,
T2: AllocSimpleBlade<N, G>,
Performs the -=
operation. Read more
impl<T1, T2, N: Dim, G: Dim> SubAssign<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + SubAssign<T2>,
T2: AllocSimpleBlade<N, G>,
impl<T1, T2, N: Dim, G: Dim> SubAssign<SimpleBlade<T2, N, G>> for SimpleBlade<T1, N, G> where
T1: AllocSimpleBlade<N, G> + SubAssign<T2>,
T2: AllocSimpleBlade<N, G>,
Performs the -=
operation. Read more
impl<'a, T, U, N: Dim, G: Dim> Sum<&'a SimpleBlade<T, N, G>> for SimpleBlade<U, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
SimpleBlade<U, N, G>: Add<&'a SimpleBlade<T, N, G>, Output = SimpleBlade<U, N, G>> + Zero,
impl<'a, T, U, N: Dim, G: Dim> Sum<&'a SimpleBlade<T, N, G>> for SimpleBlade<U, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
SimpleBlade<U, N, G>: Add<&'a SimpleBlade<T, N, G>, Output = SimpleBlade<U, N, G>> + Zero,
Method which takes an iterator and generates Self
from the elements by
“summing up” the items. Read more
impl<T, U, N: Dim, G: Dim> Sum<SimpleBlade<T, N, G>> for SimpleBlade<U, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
SimpleBlade<U, N, G>: Add<SimpleBlade<T, N, G>, Output = SimpleBlade<U, N, G>> + Zero,
impl<T, U, N: Dim, G: Dim> Sum<SimpleBlade<T, N, G>> for SimpleBlade<U, N, G> where
T: AllocBlade<N, G>,
U: AllocBlade<N, G>,
SimpleBlade<U, N, G>: Add<SimpleBlade<T, N, G>, Output = SimpleBlade<U, N, G>> + Zero,
Method which takes an iterator and generates Self
from the elements by
“summing up” the items. Read more
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<Blade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default ULPs to tolerate when testing values that are far-apart. Read more
A test for equality that uses units in the last place (ULP) if the values are far apart.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<SimpleBlade<T2, N2, G2>> for Blade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default ULPs to tolerate when testing values that are far-apart. Read more
A test for equality that uses units in the last place (ULP) if the values are far apart.
The inverse of UlpsEq::ulps_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<SimpleBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default ULPs to tolerate when testing values that are far-apart. Read more
A test for equality that uses units in the last place (ULP) if the values are far apart.
The inverse of UlpsEq::ulps_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<SimpleBlade<T2, N2, G2>> for UnitBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default ULPs to tolerate when testing values that are far-apart. Read more
A test for equality that uses units in the last place (ULP) if the values are far apart.
The inverse of UlpsEq::ulps_eq
.
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
impl<T1, T2, N1: Dim, G1: Dim, N2: Dim, G2: Dim> UlpsEq<UnitBlade<T2, N2, G2>> for SimpleBlade<T1, N1, G1> where
T1: AllocBlade<N1, G1> + UlpsEq<T2>,
T2: AllocBlade<N2, G2>,
T1::Epsilon: Clone,
The default ULPs to tolerate when testing values that are far-apart. Read more
A test for equality that uses units in the last place (ULP) if the values are far apart.
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b Blade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b Blade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b Blade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b Blade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Even<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocEven<N>,
U: AllocEven<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Even<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocEven<N>,
U: AllocEven<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Multivector<T2, N>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Multivector<T2, N>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = Multivector<U, N>
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Multivector<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Multivector<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = Multivector<U, N>
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Odd<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocOdd<N>,
U: AllocOdd<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim> VersorMul<&'b Odd<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocOdd<N>,
U: AllocOdd<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'b, T1, T2, U, N: Dim, G: Dim> VersorMul<&'b SimpleBlade<T2, N, G>> for Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'b, T1, T2, U, N: Dim, G: Dim> VersorMul<&'b SimpleBlade<T2, N, G>> for Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G>
impl<'a, 'b, T1, T2, U, N: Dim, G: Dim> VersorMul<&'b SimpleBlade<T2, N, G>> for &'a Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, 'b, T1, T2, U, N: Dim, G: Dim> VersorMul<&'b SimpleBlade<T2, N, G>> for &'a Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G>
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, 'b, T1, T2, U, N: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, 'b, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<&'b SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<Blade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<Blade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<Blade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<Blade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<T1, T2, U, N: Dim, G1: Dim> VersorMul<Multivector<T2, N>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<T1, T2, U, N: Dim, G1: Dim> VersorMul<Multivector<T2, N>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = Multivector<U, N>
impl<'a, T1, T2, U, N: Dim, G1: Dim> VersorMul<Multivector<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, T1, T2, U, N: Dim, G1: Dim> VersorMul<Multivector<T2, N>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocMultivector<N>,
U: AllocMultivector<N> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = Multivector<U, N>
impl<T1, T2, U, N: Dim, G: Dim> VersorMul<SimpleBlade<T2, N, G>> for Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<T1, T2, U, N: Dim, G: Dim> VersorMul<SimpleBlade<T2, N, G>> for Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G>
impl<'a, T1, T2, U, N: Dim, G: Dim> VersorMul<SimpleBlade<T2, N, G>> for &'a Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, T1, T2, U, N: Dim, G: Dim> VersorMul<SimpleBlade<T2, N, G>> for &'a Versor<T1, N> where
T1: AllocVersor<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G>,
U: AllocBlade<N, G> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G>
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a UnitBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Even<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Odd<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
N: ToTypenum,
AsTypenum<N>: IsLessOrEqual<U3, Output = True>,
type Output = SimpleBlade<U, N, G2>
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Rotor<T1, N> where
T1: AllocEven<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
impl<'a, T1, T2, U, N: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Reflector<T1, N> where
T1: AllocOdd<N> + AllRefMul<T2, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
type Output = SimpleBlade<U, N, G2>
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a Blade<T1, N, G1> where
T1: AllocSimpleBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
impl<'a, T1, T2, U, N: Dim, G1: Dim, G2: Dim> VersorMul<SimpleBlade<T2, N, G2>> for &'a SimpleBlade<T1, N, G1> where
T1: AllocBlade<N, G1> + AllRefMul<T2, AllOutput = U> + AllRefMul<T1, AllOutput = U>,
T2: AllocBlade<N, G2>,
U: AllocBlade<N, G2> + for<'c> Mul<&'c T1, Output = U> + AddGroup,
U: for<'c> Div<&'c U, Output = U>,
type Output = SimpleBlade<U, N, G2>
impl<T: AllocBlade<N, G>, N: Dim, G: Dim> Copy for SimpleBlade<T, N, G> where
T: Copy,
Blade<T, N, G>: Copy,
Auto Trait Implementations
impl<T, N, G> RefUnwindSafe for SimpleBlade<T, N, G> where
<T as AllocBlade<N, G>>::Buffer: RefUnwindSafe,
impl<T, N, G> Send for SimpleBlade<T, N, G> where
<T as AllocBlade<N, G>>::Buffer: Send,
impl<T, N, G> Sync for SimpleBlade<T, N, G> where
<T as AllocBlade<N, G>>::Buffer: Sync,
impl<T, N, G> Unpin for SimpleBlade<T, N, G> where
<T as AllocBlade<N, G>>::Buffer: Unpin,
impl<T, N, G> UnwindSafe for SimpleBlade<T, N, G> where
<T as AllocBlade<N, G>>::Buffer: UnwindSafe,
Blanket Implementations
type AllOutput = U
type AllOutput = U
type AllOutput = U
type AllOutput = U
type AllOutput = U
type AllOutput = U
type Buffer = DynBladeStorage<T, Const<N>, Dynamic>
type Buffer = DynBladeStorage<T, Dynamic, Const<G>>
type Buffer = DynBladeStorage<T, Dynamic, Dynamic>
type Buffer = DynMultivectorStorage<T, Dynamic>
Mutably borrows from an owned value. Read more
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.