use crate::field::extension_field::Extendable; use crate::field::packable::Packable; use crate::field::packed_field::PackedField; use crate::gates::gate::Gate; use crate::gates::util::StridedConstraintConsumer; use crate::plonk::vars::{EvaluationVarsBaseBatch, EvaluationVarsBasePacked}; pub trait PackedEvaluableBase, const D: usize>: Gate { fn eval_unfiltered_base_packed>( &self, vars_base: EvaluationVarsBasePacked

, yield_constr: StridedConstraintConsumer

, ); /// Evaluates entire batch of points. Returns a matrix of constraints. Constraint `j` for point /// `i` is at `index j * batch_size + i`. fn eval_unfiltered_base_batch_packed(&self, vars_batch: EvaluationVarsBaseBatch) -> Vec { let mut res = vec![F::ZERO; vars_batch.len() * self.num_constraints()]; let (vars_packed_iter, vars_leftovers_iter) = vars_batch.pack::<::Packing>(); let leftovers_start = vars_batch.len() - vars_leftovers_iter.len(); for (i, vars_packed) in vars_packed_iter.enumerate() { self.eval_unfiltered_base_packed( vars_packed, StridedConstraintConsumer::new( &mut res[..], vars_batch.len(), ::Packing::WIDTH * i, ), ); } for (i, vars_leftovers) in vars_leftovers_iter.enumerate() { self.eval_unfiltered_base_packed( vars_leftovers, StridedConstraintConsumer::new(&mut res[..], vars_batch.len(), leftovers_start + i), ); } res } }