Struct halo2_proofs::poly::EvaluationDomain
source · [−]pub struct EvaluationDomain<G: Group> { /* private fields */ }
Expand description
This structure contains precomputed constants and other details needed for performing operations on an evaluation domain of size $2^k$ and an extended domain of size $2^{k} * j$ with $j \neq 0$.
Implementations
sourceimpl<G: Group> EvaluationDomain<G>
impl<G: Group> EvaluationDomain<G>
sourcepub fn new(j: u32, k: u32) -> Self
pub fn new(j: u32, k: u32) -> Self
This constructs a new evaluation domain object based on the provided values $j, k$.
sourcepub fn lagrange_from_vec(&self, values: Vec<G>) -> Polynomial<G, LagrangeCoeff>
pub fn lagrange_from_vec(&self, values: Vec<G>) -> Polynomial<G, LagrangeCoeff>
Obtains a polynomial in Lagrange form when given a vector of Lagrange
coefficients of size n
; panics if the provided vector is the wrong
length.
sourcepub fn coeff_from_vec(&self, values: Vec<G>) -> Polynomial<G, Coeff>
pub fn coeff_from_vec(&self, values: Vec<G>) -> Polynomial<G, Coeff>
Obtains a polynomial in coefficient form when given a vector of
coefficients of size n
; panics if the provided vector is the wrong
length.
sourcepub fn empty_coeff(&self) -> Polynomial<G, Coeff>
pub fn empty_coeff(&self) -> Polynomial<G, Coeff>
Returns an empty (zero) polynomial in the coefficient basis
sourcepub fn empty_lagrange(&self) -> Polynomial<G, LagrangeCoeff>
pub fn empty_lagrange(&self) -> Polynomial<G, LagrangeCoeff>
Returns an empty (zero) polynomial in the Lagrange coefficient basis
sourcepub fn constant_lagrange(&self, scalar: G) -> Polynomial<G, LagrangeCoeff>
pub fn constant_lagrange(&self, scalar: G) -> Polynomial<G, LagrangeCoeff>
Returns a constant polynomial in the Lagrange coefficient basis
sourcepub fn empty_extended(&self) -> Polynomial<G, ExtendedLagrangeCoeff>
pub fn empty_extended(&self) -> Polynomial<G, ExtendedLagrangeCoeff>
Returns an empty (zero) polynomial in the extended Lagrange coefficient basis
sourcepub fn constant_extended(
&self,
scalar: G
) -> Polynomial<G, ExtendedLagrangeCoeff>
pub fn constant_extended(
&self,
scalar: G
) -> Polynomial<G, ExtendedLagrangeCoeff>
Returns a constant polynomial in the extended Lagrange coefficient basis
sourcepub fn lagrange_to_coeff(
&self,
a: Polynomial<G, LagrangeCoeff>
) -> Polynomial<G, Coeff>
pub fn lagrange_to_coeff(
&self,
a: Polynomial<G, LagrangeCoeff>
) -> Polynomial<G, Coeff>
This takes us from an n-length vector into the coefficient form.
This function will panic if the provided vector is not the correct length.
sourcepub fn coeff_to_extended(
&self,
a: Polynomial<G, Coeff>
) -> Polynomial<G, ExtendedLagrangeCoeff>
pub fn coeff_to_extended(
&self,
a: Polynomial<G, Coeff>
) -> Polynomial<G, ExtendedLagrangeCoeff>
This takes us from an n-length coefficient vector into a coset of the extended
evaluation domain, rotating by rotation
if desired.
sourcepub fn rotate_extended(
&self,
poly: &Polynomial<G, ExtendedLagrangeCoeff>,
rotation: Rotation
) -> Polynomial<G, ExtendedLagrangeCoeff>
pub fn rotate_extended(
&self,
poly: &Polynomial<G, ExtendedLagrangeCoeff>,
rotation: Rotation
) -> Polynomial<G, ExtendedLagrangeCoeff>
Rotate the extended domain polynomial over the original domain.
sourcepub fn extended_to_coeff(
&self,
a: Polynomial<G, ExtendedLagrangeCoeff>
) -> Vec<G>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
pub fn extended_to_coeff(
&self,
a: Polynomial<G, ExtendedLagrangeCoeff>
) -> Vec<G>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
A: Allocator,
This takes us from the extended evaluation domain and gets us the quotient polynomial coefficients.
This function will panic if the provided vector is not the correct length.
sourcepub fn divide_by_vanishing_poly(
&self,
a: Polynomial<G, ExtendedLagrangeCoeff>
) -> Polynomial<G, ExtendedLagrangeCoeff>
pub fn divide_by_vanishing_poly(
&self,
a: Polynomial<G, ExtendedLagrangeCoeff>
) -> Polynomial<G, ExtendedLagrangeCoeff>
This divides the polynomial (in the extended domain) by the vanishing polynomial of the $2^k$ size domain.
sourcepub fn extended_len(&self) -> usize
pub fn extended_len(&self) -> usize
Get the size of the extended domain
sourcepub fn get_omega(&self) -> G::Scalar
pub fn get_omega(&self) -> G::Scalar
Get $\omega$, the generator of the $2^k$ order multiplicative subgroup.
sourcepub fn get_omega_inv(&self) -> G::Scalar
pub fn get_omega_inv(&self) -> G::Scalar
Get $\omega^{-1}$, the inverse of the generator of the $2^k$ order multiplicative subgroup.
sourcepub fn get_extended_omega(&self) -> G::Scalar
pub fn get_extended_omega(&self) -> G::Scalar
Get the generator of the extended domain’s multiplicative subgroup.
sourcepub fn rotate_omega(&self, value: G::Scalar, rotation: Rotation) -> G::Scalar
pub fn rotate_omega(&self, value: G::Scalar, rotation: Rotation) -> G::Scalar
Multiplies a value by some power of $\omega$, essentially rotating over the domain.
sourcepub fn l_i_range<I: IntoIterator<Item = i32> + Clone>(
&self,
x: G::Scalar,
xn: G::Scalar,
rotations: I
) -> Vec<G::Scalar>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
pub fn l_i_range<I: IntoIterator<Item = i32> + Clone>(
&self,
x: G::Scalar,
xn: G::Scalar,
rotations: I
) -> Vec<G::Scalar>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
A: Allocator,
Computes evaluations (at the point x
, where xn = x^n
) of Lagrange
basis polynomials l_i(X)
defined such that l_i(omega^i) = 1
and
l_i(omega^j) = 0
for all j != i
at each provided rotation i
.
Implementation
The polynomial $$\prod_{j=0,j \neq i}^{n - 1} (X - \omega^j)$$ has a root at all points in the domain except $\omega^i$, where it evaluates to $$\prod_{j=0,j \neq i}^{n - 1} (\omega^i - \omega^j)$$ and so we divide that polynomial by this value to obtain $l_i(X)$. Since $$\prod_{j=0,j \neq i}^{n - 1} (X - \omega^j) = \frac{X^n - 1}{X - \omega^i}$$ then $l_i(x)$ for some $x$ is evaluated as $$\left(\frac{x^n - 1}{x - \omega^i}\right) \cdot \left(\frac{1}{\prod_{j=0,j \neq i}^{n - 1} (\omega^i - \omega^j)}\right).$$ We refer to $$1 \over \prod_{j=0,j \neq i}^{n - 1} (\omega^i - \omega^j)$$ as the barycentric weight of $\omega^i$.
We know that for $i = 0$ $$\frac{1}{\prod_{j=0,j \neq i}^{n - 1} (\omega^i - \omega^j)} = \frac{1}{n}.$$
If we multiply $(1 / n)$ by $\omega^i$ then we obtain $$\frac{1}{\prod_{j=0,j \neq 0}^{n - 1} (\omega^i - \omega^j)} = \frac{1}{\prod_{j=0,j \neq i}^{n - 1} (\omega^i - \omega^j)}$$ which is the barycentric weight of $\omega^i$.
sourcepub fn get_quotient_poly_degree(&self) -> usize
pub fn get_quotient_poly_degree(&self) -> usize
Gets the quotient polynomial’s degree (as a multiple of n)
sourcepub fn pinned(&self) -> PinnedEvaluationDomain<'_, G>
pub fn pinned(&self) -> PinnedEvaluationDomain<'_, G>
Obtain a pinned version of this evaluation domain; a structure with the minimal parameters needed to determine the rest of the evaluation domain.
Trait Implementations
sourceimpl<G: Clone + Group> Clone for EvaluationDomain<G>where
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
impl<G: Clone + Group> Clone for EvaluationDomain<G>where
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
G::Scalar: Clone,
sourcefn clone(&self) -> EvaluationDomain<G>
fn clone(&self) -> EvaluationDomain<G>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
Auto Trait Implementations
impl<G> RefUnwindSafe for EvaluationDomain<G>where
<G as Group>::Scalar: RefUnwindSafe,
impl<G> Send for EvaluationDomain<G>
impl<G> Sync for EvaluationDomain<G>
impl<G> Unpin for EvaluationDomain<G>where
<G as Group>::Scalar: Unpin,
impl<G> UnwindSafe for EvaluationDomain<G>where
<G as Group>::Scalar: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> FmtForward for T
impl<T> FmtForward for T
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes self
to use its Binary
implementation when Debug
-formatted. Read more
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes self
to use its Display
implementation when
Debug
-formatted. Read more
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes self
to use its LowerExp
implementation when
Debug
-formatted. Read more
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes self
to use its LowerHex
implementation when
Debug
-formatted. Read more
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes self
to use its Octal
implementation when Debug
-formatted. Read more
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes self
to use its Pointer
implementation when
Debug
-formatted. Read more
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes self
to use its UpperExp
implementation when
Debug
-formatted. Read more
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes self
to use its UpperHex
implementation when
Debug
-formatted. Read more
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Formats each item in a sequence. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
Pipes by value. This is generally the method you want to use. Read more
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows self
and passes that borrow into the pipe function. Read more
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows self
and passes that borrow into the pipe function. Read more
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
Borrows self
, then passes self.borrow()
into the pipe function. Read more
fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
Mutably borrows self
, then passes self.borrow_mut()
into the pipe
function. Read more
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
Borrows self
, then passes self.as_ref()
into the pipe function.
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
Mutably borrows self
, then passes self.as_mut()
into the pipe
function. Read more
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
Borrows self
, then passes self.deref()
into the pipe function.
impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Tap for T
impl<T> Tap for T
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
Immutable access to the Borrow<B>
of a value. Read more
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
Mutable access to the BorrowMut<B>
of a value. Read more
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
Immutable access to the AsRef<R>
view of a value. Read more
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
Mutable access to the AsMut<R>
view of a value. Read more
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
Immutable access to the Deref::Target
of a value. Read more
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Mutable access to the Deref::Target
of a value. Read more
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls .tap()
only in debug builds, and is erased in release builds.
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls .tap_mut()
only in debug builds, and is erased in release
builds. Read more
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
Calls .tap_borrow()
only in debug builds, and is erased in release
builds. Read more
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
Calls .tap_borrow_mut()
only in debug builds, and is erased in release
builds. Read more
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
Calls .tap_ref()
only in debug builds, and is erased in release
builds. Read more
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
Calls .tap_ref_mut()
only in debug builds, and is erased in release
builds. Read more
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more