use super::errors::MoeError;
pub fn top1_gating(scores: &[f32], num_experts: usize) -> Result<usize, MoeError> {
if scores.is_empty() || num_experts == 0 || scores.len() < num_experts {
return Err(MoeError::Empty);
}
let mut best_idx = 0usize;
let mut best = scores[0];
for (i, &v) in scores.iter().enumerate().take(num_experts).skip(1) {
if v > best {
best = v;
best_idx = i;
}
}
Ok(best_idx)
}