use crate::field::extension_field::target::{ExtensionAlgebraTarget, ExtensionTarget}; use crate::field::extension_field::Extendable; use crate::field::field_types::RichField; use crate::iop::target::Target; use crate::plonk::circuit_builder::CircuitBuilder; use crate::util::reducing::ReducingFactorTarget; pub struct PolynomialCoeffsExtTarget(pub Vec>); impl PolynomialCoeffsExtTarget { pub fn len(&self) -> usize { self.0.len() } pub fn eval_scalar>( &self, builder: &mut CircuitBuilder, point: Target, ) -> ExtensionTarget { let point = builder.convert_to_ext(point); let mut point = ReducingFactorTarget::new(point); point.reduce(&self.0, builder) } pub fn eval>( &self, builder: &mut CircuitBuilder, point: ExtensionTarget, ) -> ExtensionTarget { let mut point = ReducingFactorTarget::new(point); point.reduce(&self.0, builder) } } pub struct PolynomialCoeffsExtAlgebraTarget(pub Vec>); impl PolynomialCoeffsExtAlgebraTarget { pub fn eval_scalar( &self, builder: &mut CircuitBuilder, point: ExtensionTarget, ) -> ExtensionAlgebraTarget where F: RichField + Extendable, { let mut acc = builder.zero_ext_algebra(); for &c in self.0.iter().rev() { acc = builder.scalar_mul_add_ext_algebra(point, acc, c); } acc } pub fn eval( &self, builder: &mut CircuitBuilder, point: ExtensionAlgebraTarget, ) -> ExtensionAlgebraTarget where F: RichField + Extendable, { let mut acc = builder.zero_ext_algebra(); for &c in self.0.iter().rev() { acc = builder.mul_add_ext_algebra(point, acc, c); } acc } }