use crate::RealField;
use crate::complex::octonion_number::Octonion;
use core::fmt::Display;
impl<F: RealField + Display> Display for Octonion<F> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let mut is_first_term = true;
if !self.s.is_zero() {
write!(f, "{}", self.s)?;
is_first_term = false;
}
let components = [
(self.e1, "e₁"),
(self.e2, "e₂"),
(self.e3, "e₃"),
(self.e4, "e₄"),
(self.e5, "e₅"),
(self.e6, "e₆"),
(self.e7, "e₇"),
];
for (value, symbol) in components.iter() {
if !value.is_zero() {
if is_first_term {
if value < &F::zero() {
write!(f, "-{}{}", value.abs(), symbol)?;
} else {
write!(f, "{}{}", value.abs(), symbol)?;
}
is_first_term = false;
} else if *value < F::zero() {
write!(f, " - {}{}", value.abs(), symbol)?;
} else {
write!(f, " + {}{}", value.abs(), symbol)?;
}
}
}
if is_first_term {
write!(f, "0")
} else {
Ok(())
}
}
}