Merge pull request #1391 from succinctlabs/chris/recursion

Add try_build_with_options
This commit is contained in:
puma314 2023-12-01 13:51:43 -08:00 committed by GitHub
commit 2d0df393a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 9 deletions

View File

@ -8,7 +8,7 @@ use std::time::Instant;
use hashbrown::{HashMap, HashSet};
use itertools::Itertools;
use log::{debug, info, Level};
use log::{debug, info, warn, Level};
use plonky2_util::ceil_div_usize;
use crate::field::cosets::get_unique_coset_shifts;
@ -917,9 +917,20 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
/// Builds a "full circuit", with both prover and verifier data.
pub fn build_with_options<C: GenericConfig<D, F = F>>(
mut self,
self,
commit_to_sigma: bool,
) -> CircuitData<F, C, D> {
let (circuit_data, success) = self.try_build_with_options(commit_to_sigma);
if !success {
panic!("Failed to build circuit");
}
circuit_data
}
pub fn try_build_with_options<C: GenericConfig<D, F = F>>(
mut self,
commit_to_sigma: bool,
) -> (CircuitData<F, C, D>, bool) {
let mut timing = TimingTree::new("preprocess", Level::Trace);
#[cfg(feature = "std")]
@ -1125,8 +1136,14 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
num_lookup_selectors,
luts: self.luts,
};
let mut success = true;
if let Some(goal_data) = self.goal_common_data {
assert_eq!(goal_data, common, "The expected circuit data passed to cyclic recursion method did not match the actual circuit");
if goal_data != common {
warn!("The expected circuit data passed to cyclic recursion method did not match the actual circuit");
success = false;
}
}
let prover_only = ProverOnlyCircuitData::<F, C, D> {
@ -1151,11 +1168,14 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
timing.print();
#[cfg(feature = "std")]
debug!("Building circuit took {}s", start.elapsed().as_secs_f32());
CircuitData {
prover_only,
verifier_only,
common,
}
(
CircuitData {
prover_only,
verifier_only,
common,
},
success,
)
}
pub fn build<C: GenericConfig<D, F = F>>(self) -> CircuitData<F, C, D> {

View File

@ -265,7 +265,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
}
/// Circuit data required by the prover.
#[derive(Debug)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VerifierCircuitData<
F: RichField + Extendable<D>,
C: GenericConfig<D, F = F>,