in air/src/air/mod.rs [248:276]
fn get_transition_constraints<E: FieldElement<BaseField = Self::BaseField>>(
&self,
coefficients: &[(E, E)],
) -> Vec<TransitionConstraintGroup<E>> {
assert_eq!(
self.num_transition_constraints(),
coefficients.len(),
"number of transition constraints must match the number of coefficient tuples"
);
// iterate over all transition constraint degrees, and assign each constraint to the
// appropriate group based on degree
let context = self.context();
let mut groups = BTreeMap::new();
for (i, degree) in context.transition_constraint_degrees.iter().enumerate() {
let evaluation_degree = degree.get_evaluation_degree(self.trace_length());
let group = groups.entry(evaluation_degree).or_insert_with(|| {
TransitionConstraintGroup::new(
degree.clone(),
self.trace_poly_degree(),
self.composition_degree(),
)
});
group.add(i, coefficients[i]);
}
// convert from hash map into a vector and return
groups.into_iter().map(|e| e.1).collect()
}