use crate::{CausalMultiVectorError, MultiVector};
use deep_causality_num::RealField;
impl<T> MultiVector<T> for T
where
T: RealField,
{
fn grade_projection(&self, k: u32) -> Self {
if k == 0 { *self } else { T::zero() }
}
fn reversion(&self) -> Self {
*self
}
fn squared_magnitude(&self) -> T {
*self * *self
}
fn inverse(&self) -> Result<Self, CausalMultiVectorError>
where
Self: Sized,
{
if *self == T::zero() {
Err(CausalMultiVectorError::zero_magnitude())
} else {
Ok(T::one() / *self)
}
}
fn dual(&self) -> Result<Self, CausalMultiVectorError>
where
Self: Sized,
{
Ok(*self)
}
fn geometric_product(&self, rhs: &Self) -> Self {
*self * *rhs
}
fn outer_product(&self, rhs: &Self) -> Self {
*self * *rhs
}
fn inner_product(&self, rhs: &Self) -> Self {
*self * *rhs
}
fn commutator_lie(&self, _rhs: &Self) -> Self {
T::zero()
}
fn commutator_geometric(&self, _rhs: &Self) -> Self {
T::zero()
}
fn basis_shift(&self, _index: usize) -> Self {
*self
}
}