message: implement Dot from linalg
diff: @@ -17,6 +17,7 @@ use std::ops::{Add, Deref, DerefMut, Index, IndexMut, Mul, Range, Sub};
  use std::slice::{self, Iter, Windows};
  use ndarray::{self, Array, ArrayBase, ShapeBuilder};
  +use ndarray::linalg::Dot;
  use {Ix1, Ix2, Shape};
  use array_backend::Array2;
  @@ -1814,6 +1815,24 @@ where
  }
  }
  +impl<'a, 'b, N, I, IpS, IS, DS, DS2> Dot<ArrayBase<DS2, Ix2>>
  + for CsMatBase<N, I, IpS, IS, DS>
  +where
  + N: 'a + Copy + Num + Default,
  + I: 'a + SpIndex,
  + IpS: 'a + Deref<Target = [I]>,
  + IS: 'a + Deref<Target = [I]>,
  + DS: 'a + Deref<Target = [N]>,
  + DS2: 'b + ndarray::Data<Elem = N>,
  +{
  + type Output = Array<N, Ix2>;
  +
  + fn dot(&self, rhs: &ArrayBase<DS2, Ix2>) -> Array<N, Ix2> {
  + Mul::mul(self, rhs)
  + }
  +
  +}
  +
  impl<'a, 'b, N, I, IpS, IS, DS, DS2> Mul<&'b ArrayBase<DS2, Ix1>>
  for &'a CsMatBase<N, I, IpS, IS, DS>
  where
  @@ -1854,6 +1873,24 @@ where
  }
  }
  +impl<'a, 'b, N, I, IpS, IS, DS, DS2> Dot<ArrayBase<DS2, Ix1>>
  + for CsMatBase<N, I, IpS, IS, DS>
  +where
  + N: 'a + Copy + Num + Default,
  + I: 'a + SpIndex,
  + IpS: 'a + Deref<Target = [I]>,
  + IS: 'a + Deref<Target = [I]>,
  + DS: 'a + Deref<Target = [N]>,
  + DS2: 'b + ndarray::Data<Elem = N>,
  +{
  + type Output = Array<N, Ix1>;
  +
  + fn dot(&self, rhs: &ArrayBase<DS2, Ix1>) -> Array<N, Ix1> {
  + Mul::mul(self, rhs)
  + }
  +}
  +
  +
  impl<N, I, IpS, IS, DS> Index<[usize; 2]> for CsMatBase<N, I, IpS, IS, DS>
  where
  I: SpIndex,
  