pub trait Layouter<F: Field> {
    type Root: Layouter<F>;

    fn assign_region<A, AR, N, NR>(
        &mut self,
        name: N,
        assignment: A
    ) -> Result<AR, Error>
    where
        A: FnMut(Region<'_, F>) -> Result<AR, Error>,
        N: Fn() -> NR,
        NR: Into<String>
; fn assign_table<A, N, NR>(
        &mut self,
        name: N,
        assignment: A
    ) -> Result<(), Error>
    where
        A: FnMut(Table<'_, F>) -> Result<(), Error>,
        N: Fn() -> NR,
        NR: Into<String>
; fn constrain_instance(
        &mut self,
        cell: Cell,
        column: Column<Instance>,
        row: usize
    ) -> Result<(), Error>; fn get_root(&mut self) -> &mut Self::Root; fn push_namespace<NR, N>(&mut self, name_fn: N)
    where
        NR: Into<String>,
        N: FnOnce() -> NR
; fn pop_namespace(&mut self, gadget_name: Option<String>); fn namespace<NR, N>(
        &mut self,
        name_fn: N
    ) -> NamespacedLayouter<'_, F, Self::Root>
    where
        NR: Into<String>,
        N: FnOnce() -> NR
, { ... } }
Expand description

A layout strategy within a circuit. The layouter is chip-agnostic and applies its strategy to the context and config it is given.

This abstracts over the circuit assignments, handling row indices etc.

Required Associated Types

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

Required Methods

Assign a region of gates to an absolute row number.

Inside the closure, the chip may freely use relative offsets; the Layouter will treat these assignments as a single “region” within the circuit. Outside this closure, the Layouter is allowed to optimise as it sees fit.

fn assign_region(&mut self, || "region name", |region| {
    let config = chip.config();
    region.assign_advice(config.a, offset, || { Some(value)});
});

Assign a table region to an absolute row number.

fn assign_table(&mut self, || "table name", |table| {
    let config = chip.config();
    table.assign_fixed(config.a, offset, || { Some(value)});
});

Constrains a Cell to equal an instance column’s row value at an absolute position.

Gets the “root” of this assignment, bypassing the namespacing.

Not intended for downstream consumption; use Layouter::namespace instead.

Creates a new (sub)namespace and enters into it.

Not intended for downstream consumption; use Layouter::namespace instead.

Exits out of the existing namespace.

Not intended for downstream consumption; use Layouter::namespace instead.

Provided Methods

Enters into a namespace.

Implementors