scimath 0.1.2

A scientific computing library. WIP
Documentation
// import traits
use std::ops::{Index, IndexMut, Add, Sub, Mul};
use std::cmp::{PartialEq};
use std::fmt::{self, Display};
use std::marker::Copy;
use crate::types::matrix::Matrix;

#[derive(Clone)]
pub struct Vector {
    m_data: Matrix,
    m_len: usize,
}
impl Vector {
    pub fn new(len: usize) -> Vector{
        let n: usize = len;
        let m : Vector = Vector {
            m_data: Matrix::new(n,1),
            m_len : n,
        };
        return m;  
    }
}
impl Index<usize> for Vector {
    type Output = f64;
    fn index(&self, i: usize) -> &Self::Output {
        return &self.m_data[(i,0)];
    }
}

impl IndexMut<usize> for Vector {
    fn index_mut(&mut self, i: usize) -> &mut Self::Output {
        return &mut self.m_data[(i,0)];
    }
}

impl fmt::Display for Vector {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        for row in 0..self.m_len {   
            write!(f, "{:?}\n", self[row]);
        }
        Ok(())
    }
}

impl PartialEq for Vector {
    fn eq(&self, other: &Vector) -> bool {
        return self.m_data == other.m_data;
    }
}

impl Mul<f64> for &Vector {
    type Output = Vector;
    fn mul(self, rhs: f64) -> Self::Output {
        let mut m: Vector = Vector::new(self.m_len);
        for i in 0..self.m_len {
            m[i] = self[i] * rhs;
        }
        return m;
    }
}

impl Mul<&Vector> for f64 {
    type Output = Vector;
    fn mul(self, rhs: &Vector) -> Self::Output {
        let mut m: Vector = Vector::new(rhs.m_len);
        for i in 0..rhs.m_len {
            m[i] = rhs[i] * self;
        }
        return m;
    }
}

impl Add for &Vector {
    type Output = Vector;
    fn add(self, other: &Vector) -> Vector {
        let mut m: Vector = Vector::new(self.m_len);
        for i in 0..self.m_len {
            m[i] = self[i] + other[i];
        }
        return m;
    }
}

impl Sub for &Vector {
    type Output = Vector;
    fn sub(self, other: &Vector) -> Vector {
        let mut m: Vector = Vector::new(self.m_len);
        m = self + &(-1.0f64 * other);
        return m;
    }
}