Trait bellpepper_core::ConstraintSystem

source ·
pub trait ConstraintSystem<Scalar: PrimeField>: Sized + Send {
    type Root: ConstraintSystem<Scalar>;

Show 19 methods // Required methods fn alloc<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError> where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>; fn alloc_input<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError> where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>; fn enforce<A, AR, LA, LB, LC>(&mut self, annotation: A, a: LA, b: LB, c: LC) where A: FnOnce() -> AR, AR: Into<String>, LA: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LB: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LC: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>; fn push_namespace<NR, N>(&mut self, name_fn: N) where NR: Into<String>, N: FnOnce() -> NR; fn pop_namespace(&mut self); fn get_root(&mut self) -> &mut Self::Root; // Provided methods fn new() -> Self { ... } fn one() -> Variable { ... } fn namespace<NR, N>( &mut self, name_fn: N, ) -> Namespace<'_, Scalar, Self::Root> where NR: Into<String>, N: FnOnce() -> NR { ... } fn is_extensible() -> bool { ... } fn extend(&mut self, _other: &Self) { ... } fn is_witness_generator(&self) -> bool { ... } fn extend_inputs(&mut self, _new_inputs: &[Scalar]) { ... } fn extend_aux(&mut self, _new_aux: &[Scalar]) { ... } fn allocate_empty( &mut self, _aux_n: usize, _inputs_n: usize, ) -> (&mut [Scalar], &mut [Scalar]) { ... } fn allocate_empty_inputs(&mut self, _n: usize) -> &mut [Scalar] { ... } fn allocate_empty_aux(&mut self, _n: usize) -> &mut [Scalar] { ... } fn inputs_slice(&self) -> &[Scalar] { ... } fn aux_slice(&self) -> &[Scalar] { ... }
}
Expand description

Represents a constraint system which can have new variables allocated and constrains between them formed.

Required Associated Types§

source

type Root: ConstraintSystem<Scalar>

Represents the type of the “root” of this constraint system so that nested namespaces can minimize indirection.

Required Methods§

source

fn alloc<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

Allocate a private variable in the constraint system. The provided function is used to determine the assignment of the variable. The given annotation function is invoked in testing contexts in order to derive a unique name for this variable in the current namespace.

source

fn alloc_input<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

Allocate a public variable in the constraint system. The provided function is used to determine the assignment of the variable.

source

fn enforce<A, AR, LA, LB, LC>(&mut self, annotation: A, a: LA, b: LB, c: LC)
where A: FnOnce() -> AR, AR: Into<String>, LA: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LB: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LC: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>,

Enforce that A * B = C. The annotation function is invoked in testing contexts in order to derive a unique name for the constraint in the current namespace.

source

fn push_namespace<NR, N>(&mut self, name_fn: N)
where NR: Into<String>, N: FnOnce() -> NR,

Create a new (sub)namespace and enter into it. Not intended for downstream use; use namespace instead.

source

fn pop_namespace(&mut self)

Exit out of the existing namespace. Not intended for downstream use; use namespace instead.

source

fn get_root(&mut self) -> &mut Self::Root

Gets the “root” constraint system, bypassing the namespacing. Not intended for downstream use; use namespace instead.

Provided Methods§

source

fn new() -> Self

source

fn one() -> Variable

Return the “one” input variable

source

fn namespace<NR, N>(&mut self, name_fn: N) -> Namespace<'_, Scalar, Self::Root>
where NR: Into<String>, N: FnOnce() -> NR,

Begin a namespace for this constraint system.

source

fn is_extensible() -> bool

Most implementations of ConstraintSystem are not ‘extensible’: they won’t implement a specialized version of extend and should therefore also keep the default implementation of is_extensible so callers which optionally make use of extend can know to avoid relying on it when unimplemented.

source

fn extend(&mut self, _other: &Self)

Extend concatenates thew other constraint systems to the receiver, modifying the receiver, whose inputs, allocated variables, and constraints will precede those of the other constraint system. The primary use case for this is parallel synthesis of circuits which can be decomposed into entirely independent sub-circuits. Each can be synthesized in its own thread, then the original ConstraintSystem can be extended with each, in the same order they would have been synthesized sequentially.

source

fn is_witness_generator(&self) -> bool

Determines if the current ConstraintSystem instance is a witness generator. ConstraintSystems that are witness generators need not assemble the actual constraints. Rather, they exist only to efficiently create a witness.

§Returns
  • false - By default, a ConstraintSystem is not a witness generator.
source

fn extend_inputs(&mut self, _new_inputs: &[Scalar])

Extend the inputs of the ConstraintSystem.

§Panics

Panics if called on a ConstraintSystem that is not a witness generator.

source

fn extend_aux(&mut self, _new_aux: &[Scalar])

Extend the auxiliary inputs of the ConstraintSystem.

§Panics

Panics if called on a ConstraintSystem that is not a witness generator.

source

fn allocate_empty( &mut self, _aux_n: usize, _inputs_n: usize, ) -> (&mut [Scalar], &mut [Scalar])

Allocate empty space for the auxiliary inputs and the main inputs of the ConstraintSystem.

§Panics

Panics if called on a ConstraintSystem that is not a witness generator.

source

fn allocate_empty_inputs(&mut self, _n: usize) -> &mut [Scalar]

Allocate empty space for the main inputs of the ConstraintSystem.

§Panics

Panics if called on a ConstraintSystem that is not a witness generator.

source

fn allocate_empty_aux(&mut self, _n: usize) -> &mut [Scalar]

Allocate empty space for the auxiliary inputs of the ConstraintSystem.

§Panics

Panics if called on a ConstraintSystem that is not a witness generator.

source

fn inputs_slice(&self) -> &[Scalar]

Returns the constraint system’s inputs as a slice of Scalars.

§Panics

Panics if called on a ConstraintSystem that is not a witness generator.

source

fn aux_slice(&self) -> &[Scalar]

Returns the constraint system’s aux witness as a slice of Scalars.

§Panics

Panics if called on a ConstraintSystem that is not a witness generator.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'cs, Scalar: PrimeField, CS: ConstraintSystem<Scalar>> ConstraintSystem<Scalar> for &'cs mut CS

Convenience implementation of ConstraintSystem for mutable references to constraint systems.

§

type Root = <CS as ConstraintSystem<Scalar>>::Root

source§

fn one() -> Variable

source§

fn alloc<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

source§

fn alloc_input<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

source§

fn enforce<A, AR, LA, LB, LC>(&mut self, annotation: A, a: LA, b: LB, c: LC)
where A: FnOnce() -> AR, AR: Into<String>, LA: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LB: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LC: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>,

source§

fn push_namespace<NR, N>(&mut self, name_fn: N)
where NR: Into<String>, N: FnOnce() -> NR,

source§

fn pop_namespace(&mut self)

source§

fn get_root(&mut self) -> &mut Self::Root

source§

fn namespace<NR, N>(&mut self, name_fn: N) -> Namespace<'_, Scalar, Self::Root>
where NR: Into<String>, N: FnOnce() -> NR,

source§

fn is_extensible() -> bool

source§

fn extend(&mut self, other: &Self)

source§

fn is_witness_generator(&self) -> bool

source§

fn extend_inputs(&mut self, new_inputs: &[Scalar])

source§

fn extend_aux(&mut self, new_aux: &[Scalar])

source§

fn allocate_empty( &mut self, aux_n: usize, inputs_n: usize, ) -> (&mut [Scalar], &mut [Scalar])

source§

fn allocate_empty_inputs(&mut self, n: usize) -> &mut [Scalar]

source§

fn allocate_empty_aux(&mut self, n: usize) -> &mut [Scalar]

source§

fn inputs_slice(&self) -> &[Scalar]

source§

fn aux_slice(&self) -> &[Scalar]

Implementors§

source§

impl<'cs, Scalar: PrimeField, CS: ConstraintSystem<Scalar>> ConstraintSystem<Scalar> for Namespace<'cs, Scalar, CS>

§

type Root = <CS as ConstraintSystem<Scalar>>::Root

source§

impl<Scalar: PrimeField> ConstraintSystem<Scalar> for TestConstraintSystem<Scalar>