Compare commits

..

2 Commits

Author SHA1 Message Date
dante
5144991b21 fix: update decompose base type 2025-10-26 14:34:36 -04:00
dante
64acb1d9d6 fix: bump decomp base to integerrep (#1016) 2025-10-25 23:22:12 -04:00

View File

@@ -159,17 +159,18 @@ pub fn diff_less_than<F: PrimeField + TensorType + PartialOrd + std::hash::Hash>
values: &[&ValTensor<F>; 2],
constant: F,
) -> Result<(), CircuitError> {
let diff = pairwise(config, region, values, BaseOp::Sub)?;
let int_rep_constant = felt_to_integer_rep(constant);
range_check(
config,
region,
&[&diff],
&(-int_rep_constant + 1, int_rep_constant - 1),
)?;
let distance = l1_distance(config, region, values)?;
let constant = create_constant_tensor(constant, 1);
let is_less = less(config, region, &[&distance, &constant])?;
// assert the result is 1
let comparison_unit = create_constant_tensor(F::ONE, is_less.len());
enforce_equality(config, region, &[&is_less, &comparison_unit])?;
Ok(())
}
/// Performs division of a tensor by a constant value.
///
/// This function divides each element in a tensor by a scalar divisor value, using
@@ -6228,9 +6229,9 @@ pub(crate) fn recompose<F: PrimeField + TensorType + PartialOrd + std::hash::Has
(0..num_first_dims)
.flat_map(|_| {
(0..n).rev().map(|x| {
let base = (*base).checked_pow(x as u32);
let base = (*base as IntegerRep).checked_pow(x as u32);
if let Some(base) = base {
Ok(ValType::Constant(integer_rep_to_felt(base as IntegerRep)))
Ok(ValType::Constant(integer_rep_to_felt(base)))
} else {
Err(CircuitError::DecompositionBaseOverflow)
}
@@ -6340,9 +6341,9 @@ pub(crate) fn decompose<F: PrimeField + TensorType + PartialOrd + std::hash::Has
(0..input.len())
.flat_map(|_| {
(0..*n).rev().map(|x| {
let base = (*base).checked_pow(x as u32);
let base = (*base as IntegerRep).checked_pow(x as u32);
if let Some(base) = base {
Ok(ValType::Constant(integer_rep_to_felt(base as IntegerRep)))
Ok(ValType::Constant(integer_rep_to_felt(base)))
} else {
Err(CircuitError::DecompositionBaseOverflow)
}