in src/rqpoly.rs [198:225]
fn lazy_inverse_ntt(&mut self){
let context = self.context.as_ref().unwrap();
if !self.is_ntt_form {
panic!("is already not in ntt");
}
let n = context.n;
let q = context.q.clone();
let ninv = T::inv_mod(&T::from_u32(n as u32, &q), &q);
let mut coeffs_u64: Vec<u64> = self.coeffs.iter()
.map(|elm| elm.rep())
.collect();
let invroots_u64: Vec<u64> = context.invroots.iter()
.map(|elm| elm.rep())
.collect();
let scaled_invroots_u64: Vec<u64> = context.scaled_invroots.iter()
.map(|elm| elm.rep())
.collect();
lazy_inverse_ntt_u64(&mut coeffs_u64, &invroots_u64, &scaled_invroots_u64, q.rep());
for (coeff, coeff_u64) in self.coeffs.iter_mut().zip(coeffs_u64.iter()){
*coeff = T::mul_mod(&ninv, &T::from(*coeff_u64), &context.q);
}
self.set_ntt_form(false);
}