aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2024-10-03 21:48:56 +0200
committerhachem <im@hachem.wtf>2024-10-03 21:48:56 +0200
commitca9fc67ccf7899244ba484c9c99a55985f1f36ac (patch)
tree8e11a7eea1581084585aad43e48c036ef571a191
parentd442a1159d9d29e70e7f80eccf4902655a0df8f4 (diff)
Better printing
-rw-r--r--libpsi-core/src/maths/matrix.rs27
-rw-r--r--libpsi-core/src/maths/vector.rs22
2 files changed, 41 insertions, 8 deletions
diff --git a/libpsi-core/src/maths/matrix.rs b/libpsi-core/src/maths/matrix.rs
index 975c92d..bc91edd 100644
--- a/libpsi-core/src/maths/matrix.rs
+++ b/libpsi-core/src/maths/matrix.rs
@@ -172,15 +172,36 @@ impl<T: Float + fmt::Debug> fmt::Debug for Matrix<T> {
impl<T: Float + fmt::Display> fmt::Display for Matrix<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let max_width = (0..self.rows)
+ .flat_map(|i| (0..self.cols).map(move |j| self.get(i, j)))
+ .map(|x| format!("{:.2}", x).split('.').next().unwrap().len()) // Length of integer part
+ .max()
+ .unwrap_or(0);
+
for i in 0..self.rows {
- write!(f, "[")?;
+ if i == 0 {
+ write!(f, "┌")?;
+ } else if i == self.rows - 1 {
+ write!(f, "└")?;
+ } else {
+ write!(f, "│")?;
+ }
+
for j in 0..self.cols {
- write!(f, "{}", self.get(i, j))?;
+ write!(f, "{:>width$.2}", self.get(i, j), width = max_width + 3)?;
if j != self.cols - 1 {
write!(f, " ")?;
}
}
- write!(f, "]")?;
+
+ if i == 0 {
+ write!(f, "┐")?;
+ } else if i == self.rows - 1 {
+ write!(f, "┘")?;
+ } else {
+ write!(f, "│")?;
+ }
+
if i != self.rows - 1 {
write!(f, "\n")?;
}
diff --git a/libpsi-core/src/maths/vector.rs b/libpsi-core/src/maths/vector.rs
index 07ff7fb..f424e4e 100644
--- a/libpsi-core/src/maths/vector.rs
+++ b/libpsi-core/src/maths/vector.rs
@@ -256,13 +256,25 @@ impl<T: Float + fmt::Display> fmt::Display for RowVector<T> {
impl<T: Float + fmt::Display> fmt::Display for ColumnVector<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "[")?;
+ let max_width = self
+ .0
+ .iter()
+ .map(|x| format!("{:.2}", x).split('.').next().unwrap().len()) // Length of integer part
+ .max()
+ .unwrap_or(0);
+
for (i, x) in self.0.iter().enumerate() {
- if i > 0 {
- write!(f, ",\n ")?;
+ let formatted_x = format!("{:>width$.2}", x, width = max_width + 3); // +3 for ".00"
+
+ if i == 0 {
+ write!(f, "┌{}┐\n", formatted_x)?;
+ } else if i == self.0.len() - 1 {
+ write!(f, "└{}┘\n", formatted_x)?;
+ } else {
+ write!(f, "│{}│\n", formatted_x)?;
}
- write!(f, "{}", x)?;
}
- write!(f, "]")
+
+ Ok(())
}
}