use std::collections::HashMap; use crate::poly::Poly; use crate::ring::Ring; use crate::modulus::ONCE; impl Ring{ // Generates a vector storing {X^{2^0}, X^{2^1}, .., X^{2^log_n}}. pub fn gen_x_pow_2(&self, log_n: usize) -> Vec>{ let mut x_pow: Vec> = Vec::>::with_capacity(log_n); (0..log_n).for_each(|i|{ let mut idx: usize = 1<(&mut x_pow[i]); }else{ let (left, right) = x_pow.split_at_mut(i); self.a_mul_b_montgomery_into_c::(&left[i-1], &left[i-1], &mut right[0]); } }); if INV{ self.a_neg_into_a::<1, ONCE>(&mut x_pow[0]); } if !NTT{ x_pow.iter_mut().for_each(|x| self.intt_inplace::(x)); } x_pow } pub fn pack(&self, polys: HashMap, usize>, log_gap: usize) -> Poly{ let log_n = self.log_n(); let log_start = log_n - log_gap; let log_end = log_n; /* if !ZEROGARBAGE{ if gap > 0 { log_end -= log_gap; } } */ let n_inv = self.modulus.inv(1<<(log_end - log_start)); Poly::::default() } }