pub struct EvaluationDomain<F: Field> { /* private fields */ }
Expand description
A domain that univariate polynomials may be evaluated on.
An evaluation domain of size d + 1 along with polynomial values on that domain are sufficient to reconstruct a degree <= d. This struct supports Barycentric extrapolation.
A domain may optionally include a Karatsuba “infinity” point, “evaluating” a polynomial at which results in taking the coefficient at the highest degree term. This point requires special treatment but sometimes unlocks optimization opportunities. The “Evaluation” section of the Wikipedia article on Toom-Cook multiplication gives a great explanation of the concept.
Implementations§
Source§impl<F: Field> EvaluationDomain<F>
impl<F: Field> EvaluationDomain<F>
pub fn from_points( finite_points: Vec<F>, with_infinity: bool, ) -> Result<Self, Error>
pub fn size(&self) -> usize
pub fn finite_points(&self) -> &[F]
pub const fn with_infinity(&self) -> bool
Sourcepub fn lagrange_evals<FE: ExtensionField<F>>(&self, x: FE) -> Vec<FE>
pub fn lagrange_evals<FE: ExtensionField<F>>(&self, x: FE) -> Vec<FE>
Compute a vector of Lagrange polynomial evaluations in $O(N)$ at a given point x
.
For an evaluation domain consisting of points $\pi_i$ Lagrange polynomials $L_i(x)$ are defined by $$L_i(x) = \sum_{j \neq i}\frac{x - \pi_j}{\pi_i - \pi_j}$$
Sourcepub fn extrapolate<PE>(&self, values: &[PE], x: PE::Scalar) -> Result<PE, Error>where
PE: PackedField<Scalar: ExtensionField<F>>,
pub fn extrapolate<PE>(&self, values: &[PE], x: PE::Scalar) -> Result<PE, Error>where
PE: PackedField<Scalar: ExtensionField<F>>,
Evaluate the unique interpolated polynomial at any point, for a given set of values, in $O(N)$.
Trait Implementations§
Source§impl<F: Clone + Field> Clone for EvaluationDomain<F>
impl<F: Clone + Field> Clone for EvaluationDomain<F>
Source§fn clone(&self) -> EvaluationDomain<F>
fn clone(&self) -> EvaluationDomain<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<F: Field> From<EvaluationDomain<F>> for InterpolationDomain<F>
impl<F: Field> From<EvaluationDomain<F>> for InterpolationDomain<F>
Source§fn from(evaluation_domain: EvaluationDomain<F>) -> Self
fn from(evaluation_domain: EvaluationDomain<F>) -> Self
Auto Trait Implementations§
impl<F> Freeze for EvaluationDomain<F>
impl<F> RefUnwindSafe for EvaluationDomain<F>
impl<F> Send for EvaluationDomain<F>
impl<F> Sync for EvaluationDomain<F>
impl<F> Unpin for EvaluationDomain<F>
impl<F> UnwindSafe for EvaluationDomain<F>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more