use decomposer_iter

This commit is contained in:
Janmajaya Mall
2024-06-05 17:28:36 +05:30
parent a05e959e75
commit 3b0fa8bf25
2 changed files with 28 additions and 11 deletions

View File

@@ -231,9 +231,8 @@ impl<T: PrimInt> Iterator for DecomposerIter<T> {
// T::one()) == T::one())), );
// self.value = self.value + carry;
// Some(
// (self.q & ((carry << self.logq) - (T::one() & carry))) + k_i
// - (carry << self.logb), )
// Some((self.q & ((carry << 55) - (T::one() & carry))) + k_i -
// (carry << self.logb))
// Some(k_i)
} else {
@@ -254,6 +253,7 @@ fn round_value<T: PrimInt>(value: T, ignore_bits: usize) -> T {
#[cfg(test)]
mod tests {
use itertools::Itertools;
use rand::{thread_rng, Rng};
use crate::{
@@ -285,6 +285,8 @@ mod tests {
for _ in 0..100000 {
let value = rng.gen_range(0..q);
let limbs = decomposer.decompose_to_vec(&value);
let limbs_from_iter = decomposer.decompose_iter(&value).collect_vec();
assert_eq!(limbs, limbs_from_iter);
let value_back = round_value(
decomposer.recompose(&limbs, &modq_op),
decomposer.ignore_bits,

View File

@@ -518,11 +518,18 @@ pub(crate) fn decompose_r<R: RowMut, D: Decomposer<Element = R::Element>>(
let d = decomposer.decomposition_count();
for ri in 0..ring_size {
let el_decomposed = decomposer.decompose_to_vec(&r[ri]);
// let el_decomposed = decomposer.decompose_to_vec(&r[ri]);
for j in 0..d {
decomp_r[j].as_mut()[ri] = el_decomposed[j];
}
decomposer
.decompose_iter(&r[ri])
.enumerate()
.for_each(|(index, el)| {
decomp_r[index].as_mut()[ri] = el;
});
// for j in 0..d {
// decomp_r[j].as_mut()[ri] = el_decomposed[j];
// }
}
}
@@ -571,10 +578,18 @@ pub(crate) fn galois_auto<
.for_each(|(el_in, to_index, sign)| {
let el_out = if !*sign { mod_op.neg(el_in) } else { *el_in };
let el_out_decomposed = decomposer.decompose_to_vec(&el_out);
for j in 0..d {
scratch_matrix_d_ring[j].as_mut()[*to_index] = el_out_decomposed[j];
}
// let el_out_decomposed = decomposer.decompose_to_vec(&el_out);
decomposer
.decompose_iter(&el_out)
.enumerate()
.for_each(|(index, el)| {
scratch_matrix_d_ring[index].as_mut()[*to_index] = el;
});
// for j in 0..d {
// scratch_matrix_d_ring[j].as_mut()[*to_index] =
// el_out_decomposed[j]; }
});
// transform decomposed a(X^k) to evaluation domain