mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-05 23:33:07 +00:00
Merge pull request #1391 from succinctlabs/chris/recursion
Add try_build_with_options
This commit is contained in:
commit
2d0df393a2
@ -8,7 +8,7 @@ use std::time::Instant;
|
|||||||
|
|
||||||
use hashbrown::{HashMap, HashSet};
|
use hashbrown::{HashMap, HashSet};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use log::{debug, info, Level};
|
use log::{debug, info, warn, Level};
|
||||||
use plonky2_util::ceil_div_usize;
|
use plonky2_util::ceil_div_usize;
|
||||||
|
|
||||||
use crate::field::cosets::get_unique_coset_shifts;
|
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.
|
/// Builds a "full circuit", with both prover and verifier data.
|
||||||
pub fn build_with_options<C: GenericConfig<D, F = F>>(
|
pub fn build_with_options<C: GenericConfig<D, F = F>>(
|
||||||
mut self,
|
self,
|
||||||
commit_to_sigma: bool,
|
commit_to_sigma: bool,
|
||||||
) -> CircuitData<F, C, D> {
|
) -> 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);
|
let mut timing = TimingTree::new("preprocess", Level::Trace);
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
@ -1125,8 +1136,14 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
|
|||||||
num_lookup_selectors,
|
num_lookup_selectors,
|
||||||
luts: self.luts,
|
luts: self.luts,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut success = true;
|
||||||
|
|
||||||
if let Some(goal_data) = self.goal_common_data {
|
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> {
|
let prover_only = ProverOnlyCircuitData::<F, C, D> {
|
||||||
@ -1151,11 +1168,14 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
|
|||||||
timing.print();
|
timing.print();
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
debug!("Building circuit took {}s", start.elapsed().as_secs_f32());
|
debug!("Building circuit took {}s", start.elapsed().as_secs_f32());
|
||||||
CircuitData {
|
(
|
||||||
prover_only,
|
CircuitData {
|
||||||
verifier_only,
|
prover_only,
|
||||||
common,
|
verifier_only,
|
||||||
}
|
common,
|
||||||
|
},
|
||||||
|
success,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build<C: GenericConfig<D, F = F>>(self) -> CircuitData<F, C, D> {
|
pub fn build<C: GenericConfig<D, F = F>>(self) -> CircuitData<F, C, D> {
|
||||||
|
|||||||
@ -265,7 +265,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Circuit data required by the prover.
|
/// Circuit data required by the prover.
|
||||||
#[derive(Debug)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct VerifierCircuitData<
|
pub struct VerifierCircuitData<
|
||||||
F: RichField + Extendable<D>,
|
F: RichField + Extendable<D>,
|
||||||
C: GenericConfig<D, F = F>,
|
C: GenericConfig<D, F = F>,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user