Skip to main content

Convolve

Struct Convolve 

Source
pub struct Convolve<M>(PhantomData<fn() -> M>);

Tuple Fields§

§0: PhantomData<fn() -> M>

Trait Implementations§

Source§

impl<M> ConvolveSteps for Convolve<M>

Source§

const CYCLIC: bool = true

Whether transform multiplication computes modulo x^n - 1 in the coefficient ring.
Source§

type T = Vec<MInt<M>>

Source§

type F = Vec<MInt<M>>

Source§

fn length(t: &Self::T) -> usize

Source§

fn transform(t: Self::T, len: usize) -> Self::F

Source§

fn inverse_transform(f: Self::F, len: usize) -> Self::T

Source§

fn multiply(f: &mut Self::F, g: &Self::F)

Source§

fn square(t: Self::T, len: usize) -> Self::T

Source§

fn convolve(a: Self::T, b: Self::T) -> Self::T

Source§

impl<M, N1, N2, N3> ConvolveSteps for Convolve<(M, (N1, N2, N3))>

Source§

type T = Vec<MInt<M>>

Source§

type F = (Vec<MInt<N1>>, Vec<MInt<N2>>, Vec<MInt<N3>>)

Source§

fn length(t: &Self::T) -> usize

Source§

fn transform(t: Self::T, len: usize) -> Self::F

Source§

fn inverse_transform(f: Self::F, len: usize) -> Self::T

Source§

fn multiply(f: &mut Self::F, g: &Self::F)

Source§

fn convolve(a: Self::T, b: Self::T) -> Self::T

Source§

const CYCLIC: bool = false

Whether transform multiplication computes modulo x^n - 1 in the coefficient ring.
Source§

fn square(t: Self::T, len: usize) -> Self::T
where Self::T: Clone,

Source§

impl<N1, N2, N3> ConvolveSteps for Convolve<(u64, (N1, N2, N3))>

Source§

type T = Vec<u64>

Source§

type F = ([Vec<MInt<N1>>; 3], [Vec<MInt<N2>>; 3], [Vec<MInt<N3>>; 3])

Source§

fn length(t: &Self::T) -> usize

Source§

fn transform(t: Self::T, len: usize) -> Self::F

Source§

fn inverse_transform(f: Self::F, len: usize) -> Self::T

Source§

fn multiply(f: &mut Self::F, g: &Self::F)

Source§

fn square(t: Self::T, len: usize) -> Self::T

Source§

fn convolve(a: Self::T, b: Self::T) -> Self::T

Source§

const CYCLIC: bool = false

Whether transform multiplication computes modulo x^n - 1 in the coefficient ring.
Source§

impl<M> NttReuse for Convolve<M>

Source§

const MULTIPLE: bool = false

Source§

fn transform_ntt(t: Self::T, len: usize) -> Self::F

Transforms coefficients into the usual NTT frequency order.
Source§

fn inverse_transform_ntt(f: Self::F, len: usize) -> Self::T

Inverts a value produced by transform_ntt.
Source§

fn ntt_doubling(f: Self::F, monic: bool) -> Self::F

Extends a value produced by transform_ntt to twice its length. If monic, the input represents a monic degree-n polynomial modulo x^n - 1, where n is the transform length.
Source§

fn even_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F

Extracts the even coefficients of a(x) * b(-x) in the usual NTT frequency order.
Source§

fn odd_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F

Extracts the odd coefficients of a(x) * b(-x) in the usual NTT frequency order.
Source§

fn multiply_prefix(f: &mut Self::F, g: &Self::F)

Multiplies a usual NTT transform by the corresponding prefix of another one.
Source§

fn multiply_add(sum: &mut Self::F, f: &Self::F, g: &Self::F)

Adds the pointwise product of two usual NTT transforms to sum.
Source§

fn power_projection_step( p_flat: Vec<MInt<M>>, q_flat: Vec<MInt<M>>, n: usize, py: usize, qy: usize, ) -> (Vec<MInt<M>>, Vec<MInt<M>>)

Source§

fn max_product_sum_count(_f: &Self::F) -> usize

Maximum number of products that can be summed before reconstruction. Both factors must transform canonical coefficients at the supplied transform’s length, and each cyclic product must itself be reconstructible.
Source§

impl<M, N1, N2, N3> NttReuse for Convolve<(M, (N1, N2, N3))>

Source§

fn max_product_sum_count(f: &Self::F) -> usize

Maximum number of products that can be summed before reconstruction. Both factors must transform canonical coefficients at the supplied transform’s length, and each cyclic product must itself be reconstructible.
Source§

fn transform_ntt(t: Self::T, len: usize) -> Self::F

Transforms coefficients into the usual NTT frequency order.
Source§

fn inverse_transform_ntt(f: Self::F, len: usize) -> Self::T

Inverts a value produced by transform_ntt.
Source§

fn ntt_doubling(f: Self::F, monic: bool) -> Self::F

Extends a value produced by transform_ntt to twice its length. If monic, the input represents a monic degree-n polynomial modulo x^n - 1, where n is the transform length.
Source§

fn even_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F

Extracts the even coefficients of a(x) * b(-x) in the usual NTT frequency order.
Source§

fn odd_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F

Extracts the odd coefficients of a(x) * b(-x) in the usual NTT frequency order.
Source§

fn multiply_prefix(f: &mut Self::F, g: &Self::F)

Multiplies a usual NTT transform by the corresponding prefix of another one.
Source§

fn multiply_add(sum: &mut Self::F, f: &Self::F, g: &Self::F)

Adds the pointwise product of two usual NTT transforms to sum.
Source§

const MULTIPLE: bool = true

Source§

fn power_projection_step( p_flat: Self::T, q_flat: Self::T, n: usize, py: usize, qy: usize, ) -> (Self::T, Self::T)

Auto Trait Implementations§

§

impl<M> Freeze for Convolve<M>
where PhantomData<fn() -> M>: Freeze,

§

impl<M> RefUnwindSafe for Convolve<M>
where PhantomData<fn() -> M>: RefUnwindSafe,

§

impl<M> Send for Convolve<M>
where PhantomData<fn() -> M>: Send,

§

impl<M> Sync for Convolve<M>
where PhantomData<fn() -> M>: Sync,

§

impl<M> Unpin for Convolve<M>
where PhantomData<fn() -> M>: Unpin,

§

impl<M> UnsafeUnpin for Convolve<M>
where PhantomData<fn() -> M>: UnsafeUnpin,

§

impl<M> UnwindSafe for Convolve<M>
where PhantomData<fn() -> M>: UnwindSafe,

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.

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> ToArrayVecScalar for T

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.