From 0ce1a4c5eb818cc11e9bce7b59874c7a6a90ab7d Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Wed, 19 May 2021 15:13:33 -0700 Subject: [PATCH] Minor --- src/gates/interpolation_quartic.rs | 17 +++++++++++++---- src/witness.rs | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/gates/interpolation_quartic.rs b/src/gates/interpolation_quartic.rs index f3056f01..0dcf22eb 100644 --- a/src/gates/interpolation_quartic.rs +++ b/src/gates/interpolation_quartic.rs @@ -174,14 +174,16 @@ impl, const D: usize> SimpleGenerator fn run_once(&self, witness: &PartialWitness) -> PartialWitness { let n = self.gate.num_points; + + let local_wire = |input| { + Wire { gate: self.gate_index, input } + }; + let lookup_fe = |wire_range: Range| { debug_assert_eq!(wire_range.len(), D); let values = wire_range .map(|input| { - witness.get_wire(Wire { - gate: self.gate_index, - input, - }) + witness.get_wire(local_wire(input)) }) .collect::>(); let arr = values.try_into().unwrap(); @@ -202,6 +204,13 @@ impl, const D: usize> SimpleGenerator .collect::>(); let interpolant = interpolant(&points); + let mut result = PartialWitness::::new(); + for (i, &coeff) in interpolant.coeffs.iter().enumerate() { + let wire_range = self.gate.wires_coeff(i); + let wires = wire_range.map(|i| local_wire(i)).collect::>(); + result.set_ext_wires(&wires, coeff); + } + todo!() } } diff --git a/src/witness.rs b/src/witness.rs index 42b7150c..e0afb77c 100644 --- a/src/witness.rs +++ b/src/witness.rs @@ -3,6 +3,7 @@ use std::collections::HashMap; use crate::field::field::Field; use crate::target::Target; use crate::wire::Wire; +use crate::field::extension_field::{Extendable, FieldExtension}; #[derive(Clone, Debug)] pub struct PartialWitness { @@ -73,6 +74,19 @@ impl PartialWitness { self.set_target(Target::Wire(wire), value) } + pub fn set_wires(&mut self, wires: &[Wire], values: &[F]) { + debug_assert_eq!(wires.len(), values.len()); + for (&wire, &value) in wires.iter().zip(values) { + self.set_wire(wire, value); + } + } + + pub fn set_ext_wires(&mut self, wires: &[Wire], value: F::Extension) + where F: Extendable { + debug_assert_eq!(wires.len(), D); + self.set_wires(wires, &value.to_basefield_array()); + } + pub fn extend(&mut self, other: PartialWitness) { for (target, value) in other.target_values { self.set_target(target, value);