pub trait Matrix: VectorSpace {
type Row: DualSpace + FiniteDimensional + VectorSpace<Scalar = Self::Scalar>;
type Column: DualSpace + FiniteDimensional + VectorSpace<Scalar = Self::Scalar>;
type Transpose: Matrix<Scalar = Self::Scalar, Row = <Self::Column as DualSpace>::Dual, Column = <Self::Row as DualSpace>::Dual>;
fn row_component(&self, index: usize) -> Option<Self::Row>;
fn column_component(&self, index: usize) -> Option<Self::Column>;
fn transpose(self) -> Self::Transpose;
fn row_count() -> usize { ... }
fn column_count() -> usize { ... }
fn scalar_component(
&self,
row: usize,
column: usize
) -> Option<Self::Scalar> { ... }
}