mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-03 06:13:07 +00:00
Auto resize partial witness
This commit is contained in:
parent
4f4839dcbe
commit
dd076e5c73
@ -34,7 +34,7 @@ fn bench_prove<F: Field + Extendable<D>, const D: usize>() -> Result<()> {
|
||||
},
|
||||
};
|
||||
|
||||
let inputs = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let inputs = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config);
|
||||
|
||||
let zero = builder.zero();
|
||||
|
||||
@ -603,7 +603,7 @@ mod tests {
|
||||
|
||||
let config = CircuitConfig::large_config();
|
||||
|
||||
let mut pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let mut pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config);
|
||||
|
||||
let vs = FF::rand_vec(3);
|
||||
@ -640,7 +640,7 @@ mod tests {
|
||||
|
||||
let config = CircuitConfig::large_config();
|
||||
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config);
|
||||
|
||||
let x = FF::rand();
|
||||
|
||||
@ -64,7 +64,7 @@ mod tests {
|
||||
type FF = QuarticCrandallField;
|
||||
let len = 1 << len_log;
|
||||
let config = CircuitConfig::large_config();
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
let v = (0..len - 1)
|
||||
.map(|_| builder.constant_extension(FF::rand()))
|
||||
|
||||
@ -70,7 +70,7 @@ mod tests {
|
||||
type F = CrandallField;
|
||||
type FF = QuarticCrandallField;
|
||||
let config = CircuitConfig::large_config();
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let len = 4;
|
||||
@ -110,7 +110,7 @@ mod tests {
|
||||
type F = CrandallField;
|
||||
type FF = QuarticCrandallField;
|
||||
let config = CircuitConfig::large_config();
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let len = 2;
|
||||
|
||||
@ -50,7 +50,7 @@ mod tests {
|
||||
type FF = QuarticCrandallField;
|
||||
let len = 1 << len_log;
|
||||
let config = CircuitConfig::large_config();
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
let vec = FF::rand_vec(len);
|
||||
let v: Vec<_> = vec.iter().map(|x| builder.constant_extension(*x)).collect();
|
||||
|
||||
@ -48,7 +48,7 @@ mod tests {
|
||||
type F = CrandallField;
|
||||
type FF = QuarticCrandallField;
|
||||
let config = CircuitConfig::large_config();
|
||||
let mut pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let mut pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let (x, y) = (FF::rand(), FF::rand());
|
||||
|
||||
@ -99,7 +99,7 @@ mod tests {
|
||||
fn test_split_base() -> Result<()> {
|
||||
type F = CrandallField;
|
||||
let config = CircuitConfig::large_config();
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
let x = F::from_canonical_usize(0b110100000); // 416 = 1532 in base 6.
|
||||
let xt = builder.constant(x);
|
||||
@ -125,7 +125,7 @@ mod tests {
|
||||
fn test_base_sum() -> Result<()> {
|
||||
type F = CrandallField;
|
||||
let config = CircuitConfig::large_config();
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let n = thread_rng().gen_range(0, 1 << 10);
|
||||
|
||||
@ -124,7 +124,7 @@ pub(crate) fn test_eval_fns<F: Extendable<D>, G: Gate<F, D>, const D: usize>(
|
||||
let constants = F::Extension::rand_vec(gate.num_constants());
|
||||
|
||||
let config = CircuitConfig::large_config();
|
||||
let mut pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let mut pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config);
|
||||
|
||||
let wires_t = builder.add_virtual_extension_targets(wires.len());
|
||||
|
||||
@ -345,7 +345,7 @@ mod tests {
|
||||
|
||||
let permutation_inputs = (0..W).map(F::from_canonical_usize).collect::<Vec<_>>();
|
||||
|
||||
let mut witness = PartialWitness::new(1 << 14, 126, 1000);
|
||||
let mut witness = PartialWitness::new(126);
|
||||
witness.set_wire(
|
||||
Wire {
|
||||
gate: 0,
|
||||
|
||||
@ -154,7 +154,7 @@ mod tests {
|
||||
fn test_recursive_merkle_proof() -> Result<()> {
|
||||
type F = CrandallField;
|
||||
let config = CircuitConfig::large_config();
|
||||
let mut pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let mut pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let log_n = 8;
|
||||
|
||||
@ -399,7 +399,7 @@ mod tests {
|
||||
num_routed_wires: 27,
|
||||
..CircuitConfig::default()
|
||||
};
|
||||
let mut witness = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let mut witness = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config.clone());
|
||||
let mut recursive_challenger = RecursiveChallenger::new(&mut builder);
|
||||
let mut recursive_outputs_per_round: Vec<Vec<Target>> = Vec::new();
|
||||
|
||||
@ -31,10 +31,10 @@ pub struct PartialWitness<F: Field> {
|
||||
}
|
||||
|
||||
impl<F: Field> PartialWitness<F> {
|
||||
pub fn new(degree: usize, num_wires: usize, max_virtual_target: usize) -> Self {
|
||||
pub fn new(num_wires: usize) -> Self {
|
||||
PartialWitness {
|
||||
wire_values: vec![vec![None; num_wires]; degree],
|
||||
virtual_target_values: vec![None; max_virtual_target],
|
||||
wire_values: vec![vec![None; num_wires]],
|
||||
virtual_target_values: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,8 +93,13 @@ impl<F: Field> PartialWitness<F> {
|
||||
|
||||
pub fn contains(&self, target: Target) -> bool {
|
||||
match target {
|
||||
Target::Wire(Wire { gate, input }) => self.wire_values[gate][input].is_some(),
|
||||
Target::VirtualTarget { index } => self.virtual_target_values[index].is_some(),
|
||||
Target::Wire(Wire { gate, input }) => {
|
||||
self.wire_values.len() > gate && self.wire_values[gate][input].is_some()
|
||||
}
|
||||
Target::VirtualTarget { index } => {
|
||||
self.virtual_target_values.len() > index
|
||||
&& self.virtual_target_values[index].is_some()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +110,10 @@ impl<F: Field> PartialWitness<F> {
|
||||
pub fn set_target(&mut self, target: Target, value: F) {
|
||||
match target {
|
||||
Target::Wire(Wire { gate, input }) => {
|
||||
if gate >= self.wire_values.len() {
|
||||
self.wire_values
|
||||
.resize(gate + 1, vec![None; self.wire_values[0].len()]);
|
||||
}
|
||||
if let Some(old_value) = self.wire_values[gate][input] {
|
||||
assert_eq!(
|
||||
old_value, value,
|
||||
@ -116,6 +125,9 @@ impl<F: Field> PartialWitness<F> {
|
||||
}
|
||||
}
|
||||
Target::VirtualTarget { index } => {
|
||||
if index >= self.virtual_target_values.len() {
|
||||
self.virtual_target_values.resize(index + 1, None);
|
||||
}
|
||||
if let Some(old_value) = self.virtual_target_values[index] {
|
||||
assert_eq!(
|
||||
old_value, value,
|
||||
@ -192,7 +204,7 @@ impl<F: Field> PartialWitness<F> {
|
||||
|
||||
pub fn full_witness(self, degree: usize, num_wires: usize) -> Witness<F> {
|
||||
let mut wire_values = vec![vec![F::ZERO; degree]; num_wires];
|
||||
for i in 0..degree {
|
||||
for i in 0..self.wire_values.len().min(degree) {
|
||||
for j in 0..num_wires {
|
||||
wire_values[j][i] = self.wire_values[i][j].unwrap_or(F::ZERO);
|
||||
}
|
||||
@ -237,9 +249,3 @@ impl<F: Field> PartialWitness<F> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<F: Field> Default for PartialWitness<F> {
|
||||
fn default() -> Self {
|
||||
Self::new(0, 0, 0)
|
||||
}
|
||||
}
|
||||
|
||||
@ -383,7 +383,7 @@ mod tests {
|
||||
}
|
||||
let data = builder.build();
|
||||
(
|
||||
data.prove(PartialWitness::new(1 << 14, config.num_wires, 1000))?,
|
||||
data.prove(PartialWitness::new(config.num_wires))?,
|
||||
data.verifier_only,
|
||||
data.common,
|
||||
)
|
||||
@ -391,7 +391,7 @@ mod tests {
|
||||
verify(proof_with_pis.clone(), &vd, &cd)?;
|
||||
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config.clone());
|
||||
let mut pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let mut pw = PartialWitness::new(config.num_wires);
|
||||
let pt = proof_to_proof_target(&proof_with_pis, &mut builder);
|
||||
set_proof_target(&proof_with_pis, &pt, &mut pw);
|
||||
|
||||
@ -438,7 +438,7 @@ mod tests {
|
||||
}
|
||||
let data = builder.build();
|
||||
(
|
||||
data.prove(PartialWitness::new(1 << 14, config.num_wires, 1000))?,
|
||||
data.prove(PartialWitness::new(config.num_wires))?,
|
||||
data.verifier_only,
|
||||
data.common,
|
||||
)
|
||||
@ -446,7 +446,7 @@ mod tests {
|
||||
verify(proof_with_pis.clone(), &vd, &cd)?;
|
||||
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config.clone());
|
||||
let mut pw = PartialWitness::new(1 << 14, config.num_wires, 100000);
|
||||
let mut pw = PartialWitness::new(config.num_wires);
|
||||
let pt = proof_to_proof_target(&proof_with_pis, &mut builder);
|
||||
set_proof_target(&proof_with_pis, &pt, &mut pw);
|
||||
|
||||
@ -464,7 +464,7 @@ mod tests {
|
||||
|
||||
verify(proof_with_pis.clone(), &vd, &cd)?;
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config.clone());
|
||||
let mut pw = PartialWitness::new(1 << 14, config.num_wires, 100000);
|
||||
let mut pw = PartialWitness::new(config.num_wires);
|
||||
let pt = proof_to_proof_target(&proof_with_pis, &mut builder);
|
||||
set_proof_target(&proof_with_pis, &pt, &mut pw);
|
||||
|
||||
|
||||
@ -249,7 +249,7 @@ mod tests {
|
||||
|
||||
let config = CircuitConfig::large_config();
|
||||
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config);
|
||||
|
||||
let alpha = FF::rand();
|
||||
@ -277,7 +277,7 @@ mod tests {
|
||||
|
||||
let config = CircuitConfig::large_config();
|
||||
|
||||
let pw = PartialWitness::new(1 << 14, config.num_wires, 1000);
|
||||
let pw = PartialWitness::new(config.num_wires);
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config);
|
||||
|
||||
let alpha = FF::rand();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user