#![doc = " Multivector conversions for quaternion."]
#![doc = ""]
#![doc = " This file is auto-generated by clifford-codegen."]
#![doc = " Do not edit manually."]
use super::types::{Bivector, Imaginary, Quaternion, Scalar};
use crate::algebra::Multivector;
use crate::basis::Blade;
use crate::scalar::Float;
use crate::signature::Cl0_2_0;
impl<T: Float> From<Bivector<T>> for Multivector<T, Cl0_2_0> {
fn from(value: Bivector<T>) -> Self {
Self::from_coeffs(&[T::zero(), T::zero(), T::zero(), value.k()])
}
}
impl<T: Float> From<Imaginary<T>> for Multivector<T, Cl0_2_0> {
fn from(value: Imaginary<T>) -> Self {
Self::from_coeffs(&[T::zero(), value.i(), value.j(), T::zero()])
}
}
impl<T: Float> From<Quaternion<T>> for Multivector<T, Cl0_2_0> {
fn from(value: Quaternion<T>) -> Self {
Self::from_coeffs(&[value.w(), value.i(), value.j(), value.k()])
}
}
impl<T: Float> From<Scalar<T>> for Multivector<T, Cl0_2_0> {
fn from(value: Scalar<T>) -> Self {
Self::from_coeffs(&[value.s(), T::zero(), T::zero(), T::zero()])
}
}
impl<T: Float> From<Multivector<T, Cl0_2_0>> for Bivector<T> {
#[doc = r" Extracts this type from a multivector."]
#[doc = r""]
#[doc = r" Note: This is a lossy projection that only extracts the relevant"]
#[doc = r" grades. Other components of the multivector are discarded."]
fn from(mv: Multivector<T, Cl0_2_0>) -> Self {
Self::new_unchecked(mv.get(Blade::from_index(3usize)))
}
}
impl<T: Float> From<Multivector<T, Cl0_2_0>> for Imaginary<T> {
#[doc = r" Extracts this type from a multivector."]
#[doc = r""]
#[doc = r" Note: This is a lossy projection that only extracts the relevant"]
#[doc = r" grades. Other components of the multivector are discarded."]
fn from(mv: Multivector<T, Cl0_2_0>) -> Self {
Self::new_unchecked(
mv.get(Blade::from_index(1usize)),
mv.get(Blade::from_index(2usize)),
)
}
}
impl<T: Float> From<Multivector<T, Cl0_2_0>> for Quaternion<T> {
#[doc = r" Extracts this type from a multivector."]
#[doc = r""]
#[doc = r" Note: This is a lossy projection that only extracts the relevant"]
#[doc = r" grades. Other components of the multivector are discarded."]
fn from(mv: Multivector<T, Cl0_2_0>) -> Self {
Self::new_unchecked(
mv.get(Blade::from_index(0usize)),
mv.get(Blade::from_index(1usize)),
mv.get(Blade::from_index(2usize)),
mv.get(Blade::from_index(3usize)),
)
}
}
impl<T: Float> From<Multivector<T, Cl0_2_0>> for Scalar<T> {
#[doc = r" Extracts this type from a multivector."]
#[doc = r""]
#[doc = r" Note: This is a lossy projection that only extracts the relevant"]
#[doc = r" grades. Other components of the multivector are discarded."]
fn from(mv: Multivector<T, Cl0_2_0>) -> Self {
Self::new_unchecked(mv.get(Blade::from_index(0usize)))
}
}