use plonky2::field::extension_field::{Extendable, FieldExtension}; use plonky2::field::packed_field::PackedField; use plonky2::hash::hash_types::RichField; use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::config::GenericConfig; use crate::config::StarkConfig; use crate::constraint_consumer::{ConstraintConsumer, RecursiveConstraintConsumer}; use crate::cross_table_lookup::{eval_cross_table_lookup_checks, CTLCheckVars}; use crate::permutation::{ eval_permutation_checks, eval_permutation_checks_recursively, PermutationCheckDataTarget, PermutationCheckVars, }; use crate::stark::Stark; use crate::vars::{StarkEvaluationTargets, StarkEvaluationVars}; pub(crate) fn eval_vanishing_poly( stark: &S, config: &StarkConfig, vars: StarkEvaluationVars, permutation_data: Option>, lookup_data: &[CTLCheckVars], consumer: &mut ConstraintConsumer

, ) where F: RichField + Extendable, FE: FieldExtension, P: PackedField, C: GenericConfig, S: Stark, { stark.eval_packed_generic(vars, consumer); if let Some(permutation_data) = permutation_data { eval_permutation_checks::( stark, config, vars, permutation_data, consumer, ); } eval_cross_table_lookup_checks::(vars, lookup_data, consumer); } pub(crate) fn eval_vanishing_poly_recursively( builder: &mut CircuitBuilder, stark: &S, config: &StarkConfig, vars: StarkEvaluationTargets, permutation_data: Option>, consumer: &mut RecursiveConstraintConsumer, ) where F: RichField + Extendable, C: GenericConfig, S: Stark, [(); S::COLUMNS]:, [(); S::PUBLIC_INPUTS]:, { stark.eval_ext_recursively(builder, vars, consumer); if let Some(permutation_data) = permutation_data { eval_permutation_checks_recursively::( builder, stark, config, vars, permutation_data, consumer, ); } }