pub fn assign_with_constraints<F: ScalarField, const ROTATIONS: usize>(
threads: &[Context<F>],
basic_gates: &[BasicGateConfig<F>],
region: &mut Region<'_, F>,
copy_manager: &mut CopyConstraintManager<F>,
max_rows: usize,
use_unknown: bool,
) -> ThreadBreakPointsExpand description
Assigns all virtual threads to the physical columns in basic_gates and returns the break points.
Also enables corresponding selectors and adds raw assigned cells to the copy_manager.
This function should be called either during proving & verifier key generation or when running MockProver.
For proof generation, see assign_witnesses.
This is generic for a “vertical” custom gate that uses a single column and ROTATIONS contiguous rows in that column.
⚠️ Right now we only support “overlaps” where you can have the gate enabled at offset and offset + ROTATIONS - 1, but not at offset + delta where delta < ROTATIONS - 1.
§Inputs
max_rows: The number of rows that can be used for the assignment. This is the number of rows that are not blinded for zero-knowledge.- If
use_unknownis true, then the advice columns will be assigned as unknowns.
§Assumptions
- All
basic_gatesare in the same phase.