diff options
| author | hachem <im@hachem.wtf> | 2024-09-16 21:22:44 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2024-09-16 21:22:44 +0200 |
| commit | a3e3971bcf5cc938db1fcae1e24e1c72f5a10038 (patch) | |
| tree | dcc73c9514bdb69cccb76b53e8cff4cd53a35b8a /libmu | |
| parent | 5abda23c3ed21db3c0a4541b85b6e2e916ce569e (diff) | |
refactor and fix bugs
Diffstat (limited to 'libmu')
| -rw-r--r-- | libmu/src/lib.rs | 5 | ||||
| -rw-r--r-- | libmu/src/maths/complex.rs | 2 | ||||
| -rw-r--r-- | libmu/src/maths/matrix.rs | 39 | ||||
| -rw-r--r-- | libmu/src/maths/mod.rs | 1 | ||||
| -rw-r--r-- | libmu/src/maths/vector.rs | 45 |
5 files changed, 64 insertions, 28 deletions
diff --git a/libmu/src/lib.rs b/libmu/src/lib.rs index 1dea3c3..00ac5b6 100644 --- a/libmu/src/lib.rs +++ b/libmu/src/lib.rs @@ -1,3 +1,6 @@ mod maths; -pub use maths::*; +pub use maths::complex::*; +pub use maths::matrix::*; +pub use maths::numeric_types::*; +pub use maths::vector::*; diff --git a/libmu/src/maths/complex.rs b/libmu/src/maths/complex.rs index ccae000..28a3121 100644 --- a/libmu/src/maths/complex.rs +++ b/libmu/src/maths/complex.rs @@ -1,4 +1,4 @@ -use crate::numeric_types::Float; +use crate::Float; use core::{fmt, ops}; #[macro_export] diff --git a/libmu/src/maths/matrix.rs b/libmu/src/maths/matrix.rs index 9724086..9932895 100644 --- a/libmu/src/maths/matrix.rs +++ b/libmu/src/maths/matrix.rs @@ -1,38 +1,29 @@ +// TODO(Hachem): Refactor + use super::Float; use core::{fmt, ops}; #[macro_export] macro_rules! matrix { - ($( $( $x:expr ),* );* ) => {{ - let data = vec![ - $( - $( - $x, - )* - )* - ]; + ( $( $( $x:expr ),* );* ) => {{ + let mut data = Vec::new(); + let mut rows = 0; + let mut cols = 0; - let rows = <[()]>::len(&[$( $crate::count_items!($($x),*) ),*]); - let cols = $crate::count_items!($($x),*); + $( + let row_data = $( $x )*; + if cols == 0 { + cols = row_data.len(); + } + assert_eq!(cols, row_data.len(), "All rows must have the same number of columns."); + data.extend(row_data); + rows += 1; + )* $crate::Matrix::new(rows, cols, data) }}; } -#[macro_export] -macro_rules! count_items { - ($($item:expr),*) => { - <[()]>::len(&[$( $crate::replace_expr!($item ())),*]) - }; -} - -#[macro_export] -macro_rules! replace_expr { - ($_t:tt $sub:expr) => { - $sub - }; -} - pub struct Matrix<T: Float> { pub data: Vec<T>, pub rows: usize, diff --git a/libmu/src/maths/mod.rs b/libmu/src/maths/mod.rs index 651fcf2..734cfb4 100644 --- a/libmu/src/maths/mod.rs +++ b/libmu/src/maths/mod.rs @@ -6,4 +6,3 @@ pub mod vector; pub use complex::*; pub use matrix::*; pub use numeric_types::*; -pub use vector::*; diff --git a/libmu/src/maths/vector.rs b/libmu/src/maths/vector.rs index 682907e..c97b415 100644 --- a/libmu/src/maths/vector.rs +++ b/libmu/src/maths/vector.rs @@ -1,5 +1,8 @@ +// TODO(Hachem): Operators Matrix/Vector don't work +// TODO(Hachem): Refactor + use super::{Float, Matrix}; -use core::ops; +use core::{fmt, ops}; #[macro_export] macro_rules! row_vector { @@ -330,3 +333,43 @@ impl<T: Float> ops::MulAssign<&Matrix<T>> for ColumnVector<T> { } } } + +impl<T: Float + fmt::Debug> fmt::Debug for RowVector<T> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "RowVector({:?})", self.0) + } +} + +impl<T: Float + fmt::Debug> fmt::Debug for ColumnVector<T> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "ColumnVector({:?})", self.0) + } +} + +impl<T: Float + fmt::Display> fmt::Display for RowVector<T> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "[{}]", + self.0 + .iter() + .map(|x| x.to_string()) + .collect::<Vec<String>>() + .join(", ") + ) + } +} + +impl<T: Float + fmt::Display> fmt::Display for ColumnVector<T> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "[{}]", + self.0 + .iter() + .map(|x| x.to_string()) + .collect::<Vec<String>>() + .join(", ") + ) + } +} |
