(
expected: &[f64],
cov: &DMatrix<f64>,
indices: &[usize],
)
| 378 | } |
| 379 | |
| 380 | fn cluster_sharpe( |
| 381 | expected: &[f64], |
| 382 | cov: &DMatrix<f64>, |
| 383 | indices: &[usize], |
| 384 | ) -> Result<f64, HcaaError> { |
| 385 | let w = inverse_variance_weights(cov, indices)?; |
| 386 | let mut mu = 0.0; |
| 387 | for (ii, &i) in indices.iter().enumerate() { |
| 388 | mu += w[ii] * expected[i]; |
| 389 | } |
| 390 | let var = cluster_variance(cov, indices)?; |
| 391 | if var <= 0.0 { |
| 392 | Ok(0.0) |
| 393 | } else { |
| 394 | Ok(mu / var.sqrt()) |
| 395 | } |
| 396 | } |
| 397 | |
| 398 | fn quantile(mut values: Vec<f64>, q: f64) -> f64 { |
| 399 | if values.is_empty() { |
no test coverage detected