///|
/// Compute a determinant with partial pivoting. The method is intended for
/// small online covariance matrices, not for large dense linear algebra.
pub fn Matrix::determinant(self : Matrix) -> Double {
  if self.rows != self.cols {
    0.0
  } else {
    let work = Matrix::{
      rows: self.rows,
      cols: self.cols,
      values: copy_vector(self.values),
    }
    let mut sign = 1.0
    let mut result = 1.0
    for column in 0.. magnitude {
          pivot = row
          magnitude = candidate
        }
      }
      if magnitude <= 1.0e-15 {
        result = 0.0
      } else {
        if pivot != column {
          for j in 0.. Array[Double]? {
  if self.rows != self.cols || right_hand_side.length() != self.rows {
    None
  } else {
    let work = Matrix::{
      rows: self.rows,
      cols: self.cols,
      values: copy_vector(self.values),
    }
    let result = copy_vector(right_hand_side)
    let mut solvable = true
    for column in 0.. magnitude {
          pivot = row
          magnitude = candidate
        }
      }
      if magnitude <= 1.0e-15 {
        solvable = false
      } else {
        if pivot != column {
          for j in column.. Matrix? {
  if self.rows != self.cols {
    None
  } else {
    let result = Matrix::new(self.rows, self.cols)
    let mut valid = true
    for column in 0.. valid = false
        Some(solution) =>
          for row in 0.. Matrix {
  let result = Matrix::new(left.length(), right.length())
  for row in 0.. Unit {
  let rows = if vector.length() < matrix.rows {
    vector.length()
  } else {
    matrix.rows
  }
  let cols = if vector.length() < matrix.cols {
    vector.length()
  } else {
    matrix.cols
  }
  for row in 0.. Array[Double] {
  Array::makei(matrix.rows, row => {
    let mut total = 0.0
    for col in 0..