pub struct SinglePhaseCoreManager<F: ScalarField> {
pub threads: Vec<Context<F>>,
pub copy_manager: SharedCopyConstraintManager<F>,
pub break_points: RefCell<Option<ThreadBreakPoints>>,
/* private fields */
}
Expand description
Virtual region manager for Vec<BasicGateConfig>
in a single challenge phase.
This is the core manager for Contexts.
Fields§
§threads: Vec<Context<F>>
Virtual columns. These cannot be shared across CPU threads while keeping the circuit deterministic.
copy_manager: SharedCopyConstraintManager<F>
Global shared copy manager
break_points: RefCell<Option<ThreadBreakPoints>>
A very simple computation graph for the basic vertical gate. Must be provided as a “pinning” when running the production prover.
Implementations§
Source§impl<F: ScalarField> SinglePhaseCoreManager<F>
impl<F: ScalarField> SinglePhaseCoreManager<F>
Sourcepub fn witness_gen_only(&self) -> bool
pub fn witness_gen_only(&self) -> bool
Flag for witness generation. If true, the gate thread builder is used for witness generation only.
Sourcepub fn use_unknown(&self) -> bool
pub fn use_unknown(&self) -> bool
The unknown
flag is used during key generation. If true, during key generation witness Values are replaced with Value::unknown() for safety.
Source§impl<F: ScalarField> SinglePhaseCoreManager<F>
impl<F: ScalarField> SinglePhaseCoreManager<F>
Sourcepub fn new(
witness_gen_only: bool,
copy_manager: SharedCopyConstraintManager<F>,
) -> Self
pub fn new( witness_gen_only: bool, copy_manager: SharedCopyConstraintManager<F>, ) -> Self
Creates a new SinglePhaseCoreManager and spawns a main thread.
witness_gen_only
: If true, the SinglePhaseCoreManager is used for witness generation only.- If true, the gate thread builder only does witness asignments and does not store constraint information – this should only be used for the real prover.
- If false, the gate thread builder is used for keygen and mock prover (it can also be used for real prover) and the builder stores circuit information (e.g. copy constraints, fixed columns, enabled selectors).
- These values are fixed for the circuit at key generation time, and they do not need to be re-computed by the prover in the actual proving phase.
Sourcepub fn from_stage(
stage: CircuitBuilderStage,
copy_manager: SharedCopyConstraintManager<F>,
) -> Self
pub fn from_stage( stage: CircuitBuilderStage, copy_manager: SharedCopyConstraintManager<F>, ) -> Self
Creates a new SinglePhaseCoreManager depending on the stage of circuit building. If the stage is CircuitBuilderStage::Prover, the SinglePhaseCoreManager is used for witness generation only.
Sourcepub fn unknown(self, use_unknown: bool) -> Self
pub fn unknown(self, use_unknown: bool) -> Self
Creates a new SinglePhaseCoreManager with use_unknown
flag set.
use_unknown
: If true, during key generation witness Values are replaced with Value::unknown() for safety.
Sourcepub fn set_copy_manager(&mut self, copy_manager: SharedCopyConstraintManager<F>)
pub fn set_copy_manager(&mut self, copy_manager: SharedCopyConstraintManager<F>)
Mutates self
to use the given copy manager everywhere, including in all threads.
Sourcepub fn use_copy_manager(
self,
copy_manager: SharedCopyConstraintManager<F>,
) -> Self
pub fn use_copy_manager( self, copy_manager: SharedCopyConstraintManager<F>, ) -> Self
Returns self
with a given copy manager
Sourcepub fn main(&mut self) -> &mut Context<F>
pub fn main(&mut self) -> &mut Context<F>
Returns a mutable reference to the Context of a gate thread. Spawns a new thread for the given phase, if none exists.
Sourcepub fn thread_count(&self) -> usize
pub fn thread_count(&self) -> usize
Returns the number of threads
Sourcepub fn type_of(&self) -> &'static str
pub fn type_of(&self) -> &'static str
A distinct tag for this particular type of virtual manager, which is different for each phase.
Sourcepub fn new_context(&self, context_id: usize) -> Context<F>
pub fn new_context(&self, context_id: usize) -> Context<F>
Creates new context but does not append to self.threads
Sourcepub fn new_thread(&mut self) -> &mut Context<F>
pub fn new_thread(&mut self) -> &mut Context<F>
Spawns a new thread for a new given phase
. Returns a mutable reference to the Context of the new thread.
phase
: The phase (index) of the gate thread.
Sourcepub fn total_advice(&self) -> usize
pub fn total_advice(&self) -> usize
Returns total advice cells
Trait Implementations§
Source§impl<F: Clone + ScalarField> Clone for SinglePhaseCoreManager<F>
impl<F: Clone + ScalarField> Clone for SinglePhaseCoreManager<F>
Source§fn clone(&self) -> SinglePhaseCoreManager<F>
fn clone(&self) -> SinglePhaseCoreManager<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<F: Debug + ScalarField> Debug for SinglePhaseCoreManager<F>
impl<F: Debug + ScalarField> Debug for SinglePhaseCoreManager<F>
Source§impl<F: Default + ScalarField> Default for SinglePhaseCoreManager<F>
impl<F: Default + ScalarField> Default for SinglePhaseCoreManager<F>
Source§fn default() -> SinglePhaseCoreManager<F>
fn default() -> SinglePhaseCoreManager<F>
Source§impl<F: ScalarField> VirtualRegionManager<F> for SinglePhaseCoreManager<F>
impl<F: ScalarField> VirtualRegionManager<F> for SinglePhaseCoreManager<F>
Source§type Config = (Vec<BasicGateConfig<F>>, usize)
type Config = (Vec<BasicGateConfig<F>>, usize)
Source§fn assign_raw(
&self,
(config, usable_rows): &Self::Config,
region: &mut Region<'_, F>,
)
fn assign_raw( &self, (config, usable_rows): &Self::Config, region: &mut Region<'_, F>, )
config
.Source§type Assignment = ()
type Assignment = ()
assign_raw
method. Default is ()
.Auto Trait Implementations§
impl<F> !Freeze for SinglePhaseCoreManager<F>
impl<F> !RefUnwindSafe for SinglePhaseCoreManager<F>
impl<F> Send for SinglePhaseCoreManager<F>
impl<F> !Sync for SinglePhaseCoreManager<F>
impl<F> Unpin for SinglePhaseCoreManager<F>where
F: Unpin,
impl<F> UnwindSafe for SinglePhaseCoreManager<F>where
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.