problemreductions/rules/
closestvectorproblem_casts.rs1use crate::impl_variant_reduction;
4use crate::models::algebraic::ClosestVectorProblem;
5use crate::rules::ReductionError;
6use crate::types::i64_to_exact_f64;
7
8impl_variant_reduction!(
9 ClosestVectorProblem,
10 <i64> => <f64>,
11 fields: [ambient_dimension, num_basis_vectors],
12 |src| {
13 let target = src
14 .target()
15 .iter()
16 .copied()
17 .map(i64_to_exact_f64)
18 .collect::<Result<Vec<_>, _>>()
19 .map_err(|error| {
20 ReductionError::inexact_float_conversion::<
21 ClosestVectorProblem<i64>,
22 ClosestVectorProblem<f64>,
23 >(error)
24 })?;
25 ClosestVectorProblem::new(src.basis().to_vec(), target).map_err(|error| {
26 ReductionError::construction::<ClosestVectorProblem<i64>, ClosestVectorProblem<f64>>(
27 error,
28 )
29 })?
30 }
31);
32
33#[cfg(test)]
34#[path = "../unit_tests/rules/closestvectorproblem_casts.rs"]
35mod tests;