in math/src/utils/mod.rs [219:238]
fn serial_batch_inversion<E: FieldElement>(values: &[E], result: &mut [E]) {
let mut last = E::ONE;
for (result, &value) in result.iter_mut().zip(values.iter()) {
*result = last;
if value != E::ZERO {
last *= value;
}
}
last = last.inv();
for i in (0..values.len()).rev() {
if values[i] == E::ZERO {
result[i] = E::ZERO;
} else {
result[i] *= last;
last *= values[i];
}
}
}