Trait halo2_frontend::circuit::layouter::RegionLayouter
source · pub trait RegionLayouter<F: Field>: Debug + SyncDeps {
// Required methods
fn enable_selector<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
selector: &Selector,
offset: usize
) -> Result<(), Error>;
fn name_column<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Any>
);
fn assign_advice<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Advice>,
offset: usize,
to: &'v mut (dyn FnMut() -> Value<Assigned<F>> + 'v)
) -> Result<Cell, Error>;
fn assign_advice_from_constant<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Advice>,
offset: usize,
constant: Assigned<F>
) -> Result<Cell, Error>;
fn assign_advice_from_instance<'v>(
&mut self,
annotation: &'v (dyn Fn() -> String + 'v),
instance: Column<Instance>,
row: usize,
advice: Column<Advice>,
offset: usize
) -> Result<(Cell, Value<F>), Error>;
fn instance_value(
&mut self,
instance: Column<Instance>,
row: usize
) -> Result<Value<F>, Error>;
fn assign_fixed<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Fixed>,
offset: usize,
to: &'v mut (dyn FnMut() -> Value<Assigned<F>> + 'v)
) -> Result<Cell, Error>;
fn constrain_constant(
&mut self,
cell: Cell,
constant: Assigned<F>
) -> Result<(), Error>;
fn constrain_equal(&mut self, left: Cell, right: Cell) -> Result<(), Error>;
}
Expand description
Helper trait for implementing a custom Layouter
.
This trait is used for implementing region assignments:
impl<'a, F: Field, C: Chip<F>, CS: Assignment<F> + 'a> Layouter<C> for MyLayouter<'a, C, CS> {
fn assign_region(
&mut self,
assignment: impl FnOnce(Region<'_, F, C>) -> Result<(), Error>,
) -> Result<(), Error> {
let region_index = self.regions.len();
self.regions.push(self.current_gate);
let mut region = MyRegion::new(self, region_index);
{
let region: &mut dyn RegionLayouter<F> = &mut region;
assignment(region.into())?;
}
self.current_gate += region.row_count;
Ok(())
}
}
TODO: It would be great if we could constrain the columns in these types to be
“logical” columns that are guaranteed to correspond to the chip (and have come from
Chip::Config
).
Required Methods§
sourcefn enable_selector<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
selector: &Selector,
offset: usize
) -> Result<(), Error>
fn enable_selector<'v>( &'v mut self, annotation: &'v (dyn Fn() -> String + 'v), selector: &Selector, offset: usize ) -> Result<(), Error>
Enables a selector at the given offset.
sourcefn name_column<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Any>
)
fn name_column<'v>( &'v mut self, annotation: &'v (dyn Fn() -> String + 'v), column: Column<Any> )
Allows the circuit implementor to name/annotate a Column within a Region context.
This is useful in order to improve the amount of information that prover.verify()
and prover.assert_satisfied()
can provide.
sourcefn assign_advice<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Advice>,
offset: usize,
to: &'v mut (dyn FnMut() -> Value<Assigned<F>> + 'v)
) -> Result<Cell, Error>
fn assign_advice<'v>( &'v mut self, annotation: &'v (dyn Fn() -> String + 'v), column: Column<Advice>, offset: usize, to: &'v mut (dyn FnMut() -> Value<Assigned<F>> + 'v) ) -> Result<Cell, Error>
Assign an advice column value (witness)
sourcefn assign_advice_from_constant<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Advice>,
offset: usize,
constant: Assigned<F>
) -> Result<Cell, Error>
fn assign_advice_from_constant<'v>( &'v mut self, annotation: &'v (dyn Fn() -> String + 'v), column: Column<Advice>, offset: usize, constant: Assigned<F> ) -> Result<Cell, Error>
Assigns a constant value to the column advice
at offset
within this region.
The constant value will be assigned to a cell within one of the fixed columns
configured via ConstraintSystem::enable_constant
.
Returns the advice cell that has been equality-constrained to the constant.
sourcefn assign_advice_from_instance<'v>(
&mut self,
annotation: &'v (dyn Fn() -> String + 'v),
instance: Column<Instance>,
row: usize,
advice: Column<Advice>,
offset: usize
) -> Result<(Cell, Value<F>), Error>
fn assign_advice_from_instance<'v>( &mut self, annotation: &'v (dyn Fn() -> String + 'v), instance: Column<Instance>, row: usize, advice: Column<Advice>, offset: usize ) -> Result<(Cell, Value<F>), Error>
Assign the value of the instance column’s cell at absolute location
row
to the column advice
at offset
within this region.
Returns the advice cell that has been equality-constrained to the instance cell, and its value if known.
sourcefn instance_value(
&mut self,
instance: Column<Instance>,
row: usize
) -> Result<Value<F>, Error>
fn instance_value( &mut self, instance: Column<Instance>, row: usize ) -> Result<Value<F>, Error>
Returns the value of the instance column’s cell at absolute location row
.
sourcefn assign_fixed<'v>(
&'v mut self,
annotation: &'v (dyn Fn() -> String + 'v),
column: Column<Fixed>,
offset: usize,
to: &'v mut (dyn FnMut() -> Value<Assigned<F>> + 'v)
) -> Result<Cell, Error>
fn assign_fixed<'v>( &'v mut self, annotation: &'v (dyn Fn() -> String + 'v), column: Column<Fixed>, offset: usize, to: &'v mut (dyn FnMut() -> Value<Assigned<F>> + 'v) ) -> Result<Cell, Error>
Assigns a fixed value