Struct OddInterpolate

Source
pub struct OddInterpolate<'a, F: BinaryField, NTT: AdditiveNTT<F>> { /* private fields */ }
Expand description

A struct that can interpolate polynomials over odd NTT domains.

An odd NTT domain is an interpolation domain that is the union of multiple cosets of an additive subspace. The set of the domain is $d 2^{\ell}$. We generally care about the case when $d$ is an odd integer, otherwise $\ell$ could be incremented, though the struct handles even $d$ values as well (even though it’s suboptimal).

The complexity of the interpolation algorithm is $O(d^2 2^{\ell} + \ell 2^{\ell})$.

Implementations§

Source§

impl<'a, F: BinaryField, NTT: AdditiveNTT<F>> OddInterpolate<'a, F, NTT>

Source

pub fn new( ntt: &'a NTT, d: usize, ell: usize, coset_bits: usize, ) -> Result<Self, Error>

Create a new odd interpolator into novel polynomial basis for domains of size $d \times 2^{\ell}$. Takes a reference to NTT twiddle factors to seed the “Vandermonde” matrix and compute its inverse. Time complexity is $\mathcal{O}(d^3).$

Source

pub fn inverse_transform(&self, data: &mut [F]) -> Result<(), Error>

Let $L/\mathbb F_2$ be a binary field, and fix an $\mathbb F_2$-basis $1=:\beta_0,\ldots, \beta_{r-1}$ as usual. Let $d\geq 1$ be an odd integer and let $\ell\geq 0$ be an integer. Let $[a_0,\ldots, a_{d\times 2^{\ell} - 1}]$ be a list of elements of $L$. There is a unique univariate polynomial $P(X)\in L[X]$ of degree less than $d\times 2^{\ell}$ such that the evaluations of $P$ on the “first” $d\times 2^{\ell}$ elements of $L$ (in little-Endian binary counting order with respect to the basis $\beta_0,\ldots, \beta_{r}$) are precisely $a_0,\ldots, a_{d\times 2^{\ell} - 1}$.

We efficiently compute the coefficients of $P(X)$ with respect to the Novel Polynomial Basis (itself taken with respect to the given ordered list $\beta_0,\ldots, \beta_{r-1}$).

Time complexity is $\mathcal{O}(d^2\times 2^{\ell} + \ell 2^{\ell})$, thus this routine is intended to be used for small values of $d$.

Trait Implementations§

Source§

impl<'a, F: Debug + BinaryField, NTT: Debug + AdditiveNTT<F>> Debug for OddInterpolate<'a, F, NTT>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, F, NTT> Freeze for OddInterpolate<'a, F, NTT>
where <F as WithUnderlier>::Underlier: Sized,

§

impl<'a, F, NTT> RefUnwindSafe for OddInterpolate<'a, F, NTT>

§

impl<'a, F, NTT> Send for OddInterpolate<'a, F, NTT>
where <F as WithUnderlier>::Underlier: Sized, NTT: Sync,

§

impl<'a, F, NTT> Sync for OddInterpolate<'a, F, NTT>
where <F as WithUnderlier>::Underlier: Sized, NTT: Sync,

§

impl<'a, F, NTT> Unpin for OddInterpolate<'a, F, NTT>
where <F as WithUnderlier>::Underlier: Sized,

§

impl<'a, F, NTT> UnwindSafe for OddInterpolate<'a, F, NTT>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more