Skip to main content

use_eigen/
eigenpair.rs

1use crate::{Eigenvalue, Eigenvector};
2
3/// An eigenvalue paired with one eigenvector.
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub struct Eigenpair<T> {
6    value: Eigenvalue<T>,
7    vector: Eigenvector<T>,
8}
9
10impl<T> Eigenpair<T> {
11    /// Creates a new eigenpair.
12    #[must_use]
13    pub const fn new(value: Eigenvalue<T>, vector: Eigenvector<T>) -> Self {
14        Self { value, vector }
15    }
16
17    /// Returns the stored eigenvalue.
18    #[must_use]
19    pub const fn value(&self) -> &Eigenvalue<T> {
20        &self.value
21    }
22
23    /// Returns the stored eigenvector.
24    #[must_use]
25    pub const fn vector(&self) -> &Eigenvector<T> {
26        &self.vector
27    }
28
29    /// Returns the stored eigenvalue and eigenvector.
30    #[must_use]
31    pub fn into_inner(self) -> (Eigenvalue<T>, Eigenvector<T>) {
32        (self.value, self.vector)
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::Eigenpair;
39    use crate::{Eigenvalue, Eigenvector};
40
41    #[test]
42    fn pairs_an_eigenvalue_with_an_eigenvector() {
43        let pair = Eigenpair::new(
44            Eigenvalue::new(3_i32),
45            Eigenvector::new(vec![1_i32, 0]).expect("valid eigenvector"),
46        );
47
48        assert_eq!(*pair.value().as_ref(), 3);
49        assert_eq!(pair.vector().coordinates(), &[1, 0]);
50    }
51}