///|
pub fn robust_covariance(
x : Array[Double],
y : Array[Double],
trim_percent : Double,
) -> Double {
if x.length() != y.length() || x.length() == 0 {
return 0.0
}
let w_x = winsorize(x, trim_percent)
let w_y = winsorize(y, trim_percent)
let n = w_x.length().to_double()
let mut sum_x = 0.0
let mut sum_y = 0.0
for v in w_x {
sum_x += v
}
for v in w_y {
sum_y += v
}
let mean_x = sum_x / n
let mean_y = sum_y / n
let mut cov = 0.0
for i = 0; i < w_x.length(); i = i + 1 {
cov += (w_x[i] - mean_x) * (w_y[i] - mean_y)
}
if n <= 1.0 {
0.0
} else {
cov / (n - 1.0)
}
}