problemreductions/rules/
qubo_casts.rs1use crate::impl_variant_reduction;
4use crate::models::algebraic::QUBO;
5use crate::rules::ReductionError;
6use crate::types::i64_to_exact_f64;
7
8impl_variant_reduction!(
9 QUBO,
10 <i64> => <f64>,
11 fields: [num_vars, num_quadratic_terms],
12 |src| {
13 let entries = src
14 .entries()
15 .iter()
16 .map(|&(i, j, value)| i64_to_exact_f64(value).map(|value| (i, j, value)))
17 .collect::<Result<Vec<_>, _>>()
18 .map_err(|error| {
19 ReductionError::inexact_float_conversion::<QUBO<i64>, QUBO<f64>>(error)
20 })?;
21 QUBO::from_entries(src.num_vars(), entries)
22 .map_err(ReductionError::construction::<QUBO<i64>, QUBO<f64>>)?
23 }
24);
25
26#[cfg(test)]
27#[path = "../unit_tests/rules/qubo_casts.rs"]
28mod tests;