winter_air/air/lagrange/
mod.rsmod boundary;
use alloc::vec::Vec;
use core::ops::Deref;
pub use boundary::LagrangeKernelBoundaryConstraint;
mod frame;
pub use frame::LagrangeKernelEvaluationFrame;
mod transition;
use math::FieldElement;
pub use transition::LagrangeKernelTransitionConstraints;
use crate::LagrangeConstraintsCompositionCoefficients;
pub struct LagrangeKernelConstraints<E: FieldElement> {
pub transition: LagrangeKernelTransitionConstraints<E>,
pub boundary: LagrangeKernelBoundaryConstraint<E>,
pub lagrange_kernel_col_idx: usize,
}
impl<E: FieldElement> LagrangeKernelConstraints<E> {
pub fn new(
lagrange_composition_coefficients: LagrangeConstraintsCompositionCoefficients<E>,
lagrange_kernel_rand_elements: &LagrangeKernelRandElements<E>,
lagrange_kernel_col_idx: usize,
) -> Self {
Self {
transition: LagrangeKernelTransitionConstraints::new(
lagrange_composition_coefficients.transition,
),
boundary: LagrangeKernelBoundaryConstraint::new(
lagrange_composition_coefficients.boundary,
lagrange_kernel_rand_elements,
),
lagrange_kernel_col_idx,
}
}
}
#[derive(Debug, Clone, Default)]
pub struct LagrangeKernelRandElements<E> {
elements: Vec<E>,
}
impl<E> LagrangeKernelRandElements<E> {
pub fn new(elements: Vec<E>) -> Self {
Self { elements }
}
}
impl<E> Deref for LagrangeKernelRandElements<E> {
type Target = Vec<E>;
fn deref(&self) -> &Self::Target {
&self.elements
}
}
impl<E> AsRef<[E]> for LagrangeKernelRandElements<E> {
fn as_ref(&self) -> &[E] {
&self.elements
}
}
impl<E> From<LagrangeKernelRandElements<E>> for Vec<E> {
fn from(lagrange_rand_elements: LagrangeKernelRandElements<E>) -> Self {
lagrange_rand_elements.elements
}
}