#![doc = " Multivector conversions for minkowski3."]
#![doc = ""]
#![doc = " This file is auto-generated by clifford-codegen."]
#![doc = " Do not edit manually."]
use super::types::{Bivector, Eventor, Pseudoscalar, Scalar, Trivector, Vector};
use crate::algebra::Multivector;
use crate::basis::Blade;
use crate::scalar::Float;
use crate::signature::Cl3_1_0;
impl<T: Float> From<Bivector<T>> for Multivector<T, Cl3_1_0> {
fn from(value: Bivector<T>) -> Self {
Self::from_coeffs(&[
T::zero(),
T::zero(),
T::zero(),
value.xy(),
T::zero(),
value.xz(),
value.yz(),
T::zero(),
T::zero(),
value.xt(),
value.yt(),
T::zero(),
value.zt(),
T::zero(),
T::zero(),
T::zero(),
])
}
}
impl<T: Float> From<Eventor<T>> for Multivector<T, Cl3_1_0> {
fn from(value: Eventor<T>) -> Self {
Self::from_coeffs(&[
value.s(),
T::zero(),
T::zero(),
value.xy(),
T::zero(),
value.xz(),
value.yz(),
T::zero(),
T::zero(),
value.xt(),
value.yt(),
T::zero(),
value.zt(),
T::zero(),
T::zero(),
value.xyzt(),
])
}
}
impl<T: Float> From<Pseudoscalar<T>> for Multivector<T, Cl3_1_0> {
fn from(value: Pseudoscalar<T>) -> Self {
Self::from_coeffs(&[
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
value.xyzt(),
])
}
}
impl<T: Float> From<Scalar<T>> for Multivector<T, Cl3_1_0> {
fn from(value: Scalar<T>) -> Self {
Self::from_coeffs(&[
value.s(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
])
}
}
impl<T: Float> From<Trivector<T>> for Multivector<T, Cl3_1_0> {
fn from(value: Trivector<T>) -> Self {
Self::from_coeffs(&[
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
value.xyz(),
T::zero(),
T::zero(),
T::zero(),
value.xyt(),
T::zero(),
value.xzt(),
value.yzt(),
T::zero(),
])
}
}
impl<T: Float> From<Vector<T>> for Multivector<T, Cl3_1_0> {
fn from(value: Vector<T>) -> Self {
Self::from_coeffs(&[
T::zero(),
value.x(),
value.y(),
T::zero(),
value.z(),
T::zero(),
T::zero(),
T::zero(),
value.t(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
T::zero(),
])
}
}
impl<T: Float> From<Multivector<T, Cl3_1_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, Cl3_1_0>) -> Self {
Self::new_unchecked(
mv.get(Blade::from_index(3usize)),
mv.get(Blade::from_index(5usize)),
mv.get(Blade::from_index(9usize)),
mv.get(Blade::from_index(6usize)),
mv.get(Blade::from_index(10usize)),
mv.get(Blade::from_index(12usize)),
)
}
}
impl<T: Float> From<Multivector<T, Cl3_1_0>> for Eventor<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, Cl3_1_0>) -> Self {
Self::new_unchecked(
mv.get(Blade::from_index(0usize)),
mv.get(Blade::from_index(3usize)),
mv.get(Blade::from_index(5usize)),
mv.get(Blade::from_index(9usize)),
mv.get(Blade::from_index(6usize)),
mv.get(Blade::from_index(10usize)),
mv.get(Blade::from_index(12usize)),
mv.get(Blade::from_index(15usize)),
)
}
}
impl<T: Float> From<Multivector<T, Cl3_1_0>> for Pseudoscalar<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, Cl3_1_0>) -> Self {
Self::new_unchecked(mv.get(Blade::from_index(15usize)))
}
}
impl<T: Float> From<Multivector<T, Cl3_1_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, Cl3_1_0>) -> Self {
Self::new_unchecked(mv.get(Blade::from_index(0usize)))
}
}
impl<T: Float> From<Multivector<T, Cl3_1_0>> for Trivector<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, Cl3_1_0>) -> Self {
Self::new_unchecked(
mv.get(Blade::from_index(7usize)),
mv.get(Blade::from_index(11usize)),
mv.get(Blade::from_index(13usize)),
mv.get(Blade::from_index(14usize)),
)
}
}
impl<T: Float> From<Multivector<T, Cl3_1_0>> for Vector<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, Cl3_1_0>) -> Self {
Self::new_unchecked(
mv.get(Blade::from_index(1usize)),
mv.get(Blade::from_index(2usize)),
mv.get(Blade::from_index(4usize)),
mv.get(Blade::from_index(8usize)),
)
}
}