use std_shims::Vec;
use self::accumulation::PointEvaluationAccumulator;
use super::circle::CirclePoint;
use super::fields::qm31::SecureField;
use super::pcs::TreeVec;
use super::ColumnVec;
pub mod accumulation;
mod components;
pub use components::Components;
pub trait Air {
fn components(&self) -> Vec<&dyn Component>;
}
pub trait Component {
fn n_constraints(&self) -> usize;
fn max_constraint_log_degree_bound(&self) -> u32;
fn trace_log_degree_bounds(&self) -> TreeVec<ColumnVec<u32>>;
fn mask_points(
&self,
point: CirclePoint<SecureField>,
) -> TreeVec<ColumnVec<Vec<CirclePoint<SecureField>>>>;
fn preproccessed_column_indices(&self) -> ColumnVec<usize>;
fn evaluate_constraint_quotients_at_point(
&self,
point: CirclePoint<SecureField>,
mask: &TreeVec<ColumnVec<Vec<SecureField>>>,
evaluation_accumulator: &mut PointEvaluationAccumulator,
);
}