use super::ModulusPolynomialRingZq;
use crate::{
integer::Z,
integer_mod_q::{
Modulus,
ntt_basis_polynomial_ring_zq::{ConvolutionType, NTTBasisPolynomialRingZq},
},
traits::GetCoefficient,
};
use std::rc::Rc;
impl ModulusPolynomialRingZq {
pub fn set_ntt_unchecked(&mut self, root_of_unity: impl Into<Z>) {
let n = self.get_degree();
let one_coeff: Z = self.get_coeff(0).unwrap();
let convolution_type = {
if one_coeff == Z::ONE {
ConvolutionType::Negacyclic
} else {
ConvolutionType::Cyclic
}
};
let ntt_basis = NTTBasisPolynomialRingZq::init(
n as usize,
root_of_unity,
Modulus::from(self.get_q()),
convolution_type,
);
self.ntt_basis = Rc::new(Some(ntt_basis))
}
}