use crate::circuit_builder::CircuitBuilder; use crate::field::extension_field::target::{ExtensionAlgebraTarget, ExtensionTarget}; use crate::field::extension_field::Extendable; use crate::target::Target; 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 mut acc = builder.zero_extension(); for &c in self.0.iter().rev() { let tmp = builder.scalar_mul_ext(point, acc); acc = builder.add_extension(tmp, c); } acc } pub fn eval>( &self, builder: &mut CircuitBuilder, point: ExtensionTarget, ) -> ExtensionTarget { let mut acc = builder.zero_extension(); for &c in self.0.iter().rev() { let tmp = builder.mul_extension(point, acc); acc = builder.add_extension(tmp, c); } acc } } pub struct PolynomialCoeffsExtAlgebraTarget(pub Vec>); impl PolynomialCoeffsExtAlgebraTarget { pub fn eval_scalar( &self, builder: &mut CircuitBuilder, point: ExtensionTarget, ) -> ExtensionAlgebraTarget where F: Extendable, { let mut acc = builder.zero_ext_algebra(); for &c in self.0.iter().rev() { let tmp = builder.scalar_mul_ext_algebra(point, acc); acc = builder.add_ext_algebra(tmp, c); } acc } pub fn eval( &self, builder: &mut CircuitBuilder, point: ExtensionAlgebraTarget, ) -> ExtensionAlgebraTarget where F: Extendable, { let mut acc = builder.zero_ext_algebra(); for &c in self.0.iter().rev() { let tmp = builder.mul_ext_algebra(point, acc); acc = builder.add_ext_algebra(tmp, c); } acc } }