This commit is contained in:
Daniel Lubarov 2021-05-19 15:13:33 -07:00
parent 110763fa79
commit 0ce1a4c5eb
2 changed files with 27 additions and 4 deletions

View File

@ -174,14 +174,16 @@ impl<F: Field + Extendable<D>, const D: usize> SimpleGenerator<F>
fn run_once(&self, witness: &PartialWitness<F>) -> PartialWitness<F> {
let n = self.gate.num_points;
let local_wire = |input| {
Wire { gate: self.gate_index, input }
};
let lookup_fe = |wire_range: Range<usize>| {
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::<Vec<_>>();
let arr = values.try_into().unwrap();
@ -202,6 +204,13 @@ impl<F: Field + Extendable<D>, const D: usize> SimpleGenerator<F>
.collect::<Vec<_>>();
let interpolant = interpolant(&points);
let mut result = PartialWitness::<F>::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::<Vec<_>>();
result.set_ext_wires(&wires, coeff);
}
todo!()
}
}

View File

@ -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<F: Field> {
@ -73,6 +74,19 @@ impl<F: Field> PartialWitness<F> {
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<const D: usize>(&mut self, wires: &[Wire], value: F::Extension)
where F: Extendable<D> {
debug_assert_eq!(wires.len(), D);
self.set_wires(wires, &value.to_basefield_array());
}
pub fn extend(&mut self, other: PartialWitness<F>) {
for (target, value) in other.target_values {
self.set_target(target, value);