///|
/// Returns the arithmetic mean of `x`. Returns `0.0` for an empty array.
pub fn mean(x : Array[Double]) -> Double {
  let n = x.length()
  if n == 0 {
    return 0.0
  }
  let mut sum = 0.0
  for i in 0.. Double {
  let n = x.length()
  if n == 0 {
    return 0.0
  }
  let m = mean(x)
  let mut s = 0.0
  for i in 0.. Double {
  variance(x, sample~).sqrt()
}

///|
/// Root-mean-square value of `x`: `sqrt(mean(x^2))`.
pub fn rms(x : Array[Double]) -> Double {
  let n = x.length()
  if n == 0 {
    return 0.0
  }
  let mut s = 0.0
  for i in 0.. Double {
  let mut s = 0.0
  for i in 0.. Double {
  let mut m = 0.0
  for i in 0.. m {
      m = a
    }
  }
  m
}

///|
/// Scales `x` so that its maximum absolute value becomes `1.0`.
///
/// Returns a copy; the input is not modified. An all-zero (or empty) input
/// is returned unchanged.
pub fn normalize(x : Array[Double]) -> Array[Double] {
  let m = max_abs(x)
  if m <= 1.0e-15 {
    return x.copy()
  }
  Array::makei(x.length(), fn(i) { x[i] / m })
}