MontyField31

Struct MontyField31 

Source
pub struct MontyField31<MP: MontyParameters> { /* private fields */ }

Implementations§

Source§

impl<MP: FieldParameters + TwoAdicData> MontyField31<MP>

Source

pub fn backward_fft(input: &mut [Self], root_table: &[Vec<Self>])

Source§

impl<MP: FieldParameters + TwoAdicData> MontyField31<MP>

Source

pub fn roots_of_unity_table(n: usize) -> Vec<Vec<Self>>

Given a field element gen of order n where n = 2^lg_n, return a vector of vectors table where table[i] is the vector of twiddle factors for an fft of length n/2^i. The values g_i^k for k >= i/2 are skipped as these are just the negatives of the other roots (using g_i^{i/2} = -1). The value gen^0 = 1 is included to aid consistency between the packed and non-packed variants.

Source

pub fn get_missing_twiddles(req_lg_n: usize, cur_lg_n: usize) -> Vec<Vec<Self>>

Source§

impl<MP: FieldParameters + TwoAdicData> MontyField31<MP>

Source

pub fn forward_fft(input: &mut [Self], root_table: &[Vec<Self>])

Source§

impl<MP: MontyParameters> MontyField31<MP>

Source

pub const fn new(value: u32) -> Self

The standard way to create a new element. Note that new converts the input into MONTY form so should be avoided in performance critical implementations.

Source

pub const fn new_array<const N: usize>(input: [u32; N]) -> [Self; N]

Convert a constant u32 array into a constant array of field elements. Constant version of array.map(MontyField31::new).

Source

pub const fn new_2d_array<const N: usize, const M: usize>( input: [[u32; N]; M], ) -> [[Self; N]; M]

Convert a constant 2d u32 array into a constant 2d array of field elements. Constant version of array.map(MontyField31::new_array).

Trait Implementations§

Source§

impl<FP: MontyParameters> Add for MontyField31<FP>

Source§

type Output = MontyField31<FP>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
Source§

impl<MP: MontyParameters, T: Into<Self>> AddAssign<T> for MontyField31<MP>

Source§

fn add_assign(&mut self, rhs: T)

Performs the += operation. Read more
Source§

impl<const WIDTH: usize, FP> BinomiallyExtendable<WIDTH> for MontyField31<FP>

Source§

const W: Self = FP::W

The constant coefficient W in the binomial X^D - W.
Source§

const DTH_ROOT: Self = FP::DTH_ROOT

A D-th root of unity derived from W. Read more
Source§

const EXT_GENERATOR: [Self; WIDTH] = FP::EXT_GENERATOR

A generator for the extension field, expressed as a degree-D polynomial. Read more
Source§

impl<const WIDTH: usize, FP> BinomiallyExtendableAlgebra<MontyField31<FP>, WIDTH> for MontyField31<FP>

Source§

fn binomial_mul( a: &[Self; WIDTH], b: &[Self; WIDTH], res: &mut [Self; WIDTH], _w: Self, )

Multiplication in the algebra extension ring A<X> / (X^D - W). Read more
Source§

fn binomial_add(a: &[Self; WIDTH], b: &[Self; WIDTH]) -> [Self; WIDTH]

Addition of elements in the algebra extension ring A<X> / (X^D - W). Read more
Source§

fn binomial_sub(a: &[Self; WIDTH], b: &[Self; WIDTH]) -> [Self; WIDTH]

Subtraction of elements in the algebra extension ring A<X> / (X^D - W). Read more
Source§

fn binomial_base_mul(lhs: [Self; WIDTH], rhs: Self) -> [Self; WIDTH]

Source§

impl<MP: Clone + MontyParameters> Clone for MontyField31<MP>

Source§

fn clone(&self) -> MontyField31<MP>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<FP: MontyParameters> Debug for MontyField31<FP>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<MP: Default + MontyParameters> Default for MontyField31<MP>

Source§

fn default() -> MontyField31<MP>

Returns the “default value” for a type. Read more
Source§

impl<'de, FP: FieldParameters> Deserialize<'de> for MontyField31<FP>

Source§

fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<FP: MontyParameters> Display for MontyField31<FP>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<FP: MontyParameters> Distribution<MontyField31<FP>> for StandardUniform

Source§

fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> MontyField31<FP>

Generate a random value of T, using rng as the source of randomness.
Source§

fn sample_iter<R>(self, rng: R) -> Iter<Self, R, T>
where R: Rng, Self: Sized,

Create an iterator that generates random values of T, using rng as the source of randomness. Read more
Source§

fn map<F, S>(self, func: F) -> Map<Self, F, T, S>
where F: Fn(T) -> S, Self: Sized,

Map sampled values to type S Read more
Source§

impl<FP: FieldParameters> Div for MontyField31<FP>

Source§

type Output = MontyField31<FP>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: MontyField31<FP>) -> Self

Performs the / operation. Read more
Source§

impl<FP: FieldParameters> DivAssign for MontyField31<FP>

Source§

fn div_assign(&mut self, rhs: MontyField31<FP>)

Performs the /= operation. Read more
Source§

impl<FP, const WIDTH: usize, const D: u64> ExternalLayer<MontyField31<FP>, WIDTH, D> for Poseidon2ExternalLayerMonty31<FP, WIDTH>

Source§

fn permute_state_initial(&self, state: &mut [MontyField31<FP>; WIDTH])

Perform the initial external layers of the Poseidon2 permutation on the given state.

Source§

fn permute_state_terminal(&self, state: &mut [MontyField31<FP>; WIDTH])

Perform the terminal external layers of the Poseidon2 permutation on the given state.

Source§

impl<FP: FieldParameters, const WIDTH: usize> ExternalLayerConstructor<MontyField31<FP>, WIDTH> for Poseidon2ExternalLayerMonty31<FP, WIDTH>

Source§

fn new_from_constants( external_constants: ExternalLayerConstants<MontyField31<FP>, WIDTH>, ) -> Self

A constructor which internally will convert the supplied constants into the appropriate form for the implementation.
Source§

impl<FP: FieldParameters> Field for MontyField31<FP>

Source§

const GENERATOR: Self = FP::MONTY_GEN

A generator of this field’s multiplicative group.
Source§

type Packing = MontyField31<FP>

Source§

fn try_inverse(&self) -> Option<Self>

The multiplicative inverse of this field element, if it exists. Read more
Source§

fn order() -> BigUint

The number of elements in the field. Read more
Source§

fn is_zero(&self) -> bool

Check if the given field element is equal to the unique additive identity (ZERO).
Source§

fn is_one(&self) -> bool

Check if the given field element is equal to the unique multiplicative identity (ONE).
Source§

fn inverse(&self) -> Self

The multiplicative inverse of this field element. Read more
Source§

fn add_slices(slice_1: &mut [Self], slice_2: &[Self])

Add two slices of field elements together, returning the result in the first slice. Read more
Source§

fn bits() -> usize

The number of bits required to define an element of this field. Read more
Source§

impl<const WIDTH: usize, FP> HasTwoAdicBinomialExtension<WIDTH> for MontyField31<FP>

Source§

const EXT_TWO_ADICITY: usize = FP::EXT_TWO_ADICITY

Two-adicity of the multiplicative group of the extension field. Read more
Source§

fn ext_two_adic_generator(bits: usize) -> [Self; WIDTH]

Returns a two-adic generator for the extension field. Read more
Source§

impl<MP: Hash + MontyParameters> Hash for MontyField31<MP>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<FP: FieldParameters + RelativelyPrimePower<D>, const D: u64> InjectiveMonomial<D> for MontyField31<FP>

Source§

fn injective_exp_n(&self) -> Self

Compute x -> x^n for a given n > 1 such that this map is injective.
Source§

impl<FP, const WIDTH: usize, P2P, const D: u64> InternalLayer<MontyField31<FP>, WIDTH, D> for Poseidon2InternalLayerMonty31<FP, WIDTH, P2P>

Source§

fn permute_state(&self, state: &mut [MontyField31<FP>; WIDTH])

Perform the internal layers of the Poseidon2 permutation on the given state.

Source§

impl<FP: FieldParameters, const WIDTH: usize, ILP: InternalLayerBaseParameters<FP, WIDTH>> InternalLayerConstructor<MontyField31<FP>> for Poseidon2InternalLayerMonty31<FP, WIDTH, ILP>

Source§

fn new_from_constants(internal_constants: Vec<MontyField31<FP>>) -> Self

A constructor which internally will convert the supplied constants into the appropriate form for the implementation.
Source§

impl<FP: MontyParameters> Mul for MontyField31<FP>

Source§

type Output = MontyField31<FP>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Self) -> Self

Performs the * operation. Read more
Source§

impl<FP: FieldParameters, T: Into<Self>> MulAssign<T> for MontyField31<FP>

Source§

fn mul_assign(&mut self, rhs: T)

Performs the *= operation. Read more
Source§

impl<FP: FieldParameters> Neg for MontyField31<FP>

Source§

type Output = MontyField31<FP>

The resulting type after applying the - operator.
Source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
Source§

impl<FP: MontyParameters> Ord for MontyField31<FP>

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<MP: PartialEq + MontyParameters> PartialEq for MontyField31<MP>

Source§

fn eq(&self, other: &MontyField31<MP>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<FP: MontyParameters> PartialOrd for MontyField31<FP>

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<FP: FieldParameters + RelativelyPrimePower<D>, const D: u64> PermutationMonomial<D> for MontyField31<FP>

Source§

fn injective_exp_root_n(&self) -> Self

Compute x -> x^K for a given K > 1 such that x^{NK} = x for all elements x.
Source§

impl<FP: FieldParameters> PrimeCharacteristicRing for MontyField31<FP>

Source§

const ZERO: Self = FP::MONTY_ZERO

The additive identity of the ring. Read more
Source§

const ONE: Self = FP::MONTY_ONE

The multiplicative identity of the ring. Read more
Source§

const TWO: Self = FP::MONTY_TWO

The element in the ring given by ONE + ONE. Read more
Source§

const NEG_ONE: Self = FP::MONTY_NEG_ONE

The element in the ring given by -ONE. Read more
Source§

type PrimeSubfield = MontyField31<FP>

The field ℤ/p where the characteristic of this ring is p.
Source§

fn from_prime_subfield(f: Self) -> Self

Embed an element of the prime field ℤ/p into the ring R. Read more
Source§

fn halve(&self) -> Self

The elementary function halve(a) = a/2. Read more
Source§

fn mul_2exp_u64(&self, exp: u64) -> Self

The elementary function mul_2exp_u64(a, exp) = a * 2^{exp}. Read more
Source§

fn div_2exp_u64(&self, exp: u64) -> Self

Divide by a given power of two. div_2exp_u64(a, exp) = a/2^exp Read more
Source§

fn zero_vec(len: usize) -> Vec<Self>

Allocates a vector of zero elements of length len. Many operating systems zero pages before assigning them to a userspace process. In that case, our process should not need to write zeros, which would be redundant. However, the compiler may not always recognize this. Read more
Source§

fn sum_array<const N: usize>(input: &[Self]) -> Self

Compute the sum of a slice of elements whose length is a compile time constant. Read more
Source§

fn dot_product<const N: usize>(lhs: &[Self; N], rhs: &[Self; N]) -> Self

Compute the dot product of two vectors.
Source§

fn from_bool(b: bool) -> Self

Return Self::ONE if b is true and Self::ZERO if b is false.
Source§

fn from_u8(int: u8) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_u16(int: u16) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_u32(int: u32) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_u64(int: u64) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_u128(int: u128) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_usize(int: usize) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_i8(int: i8) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_i16(int: i16) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_i32(int: i32) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_i64(int: i64) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_i128(int: i128) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn from_isize(int: isize) -> Self

Given an integer r, return the sum of r copies of ONE: Read more
Source§

fn double(&self) -> Self

The elementary function double(a) = 2*a. Read more
Source§

fn square(&self) -> Self

The elementary function square(a) = a^2. Read more
Source§

fn cube(&self) -> Self

The elementary function cube(a) = a^3. Read more
Source§

fn xor(&self, y: &Self) -> Self

Computes the arithmetic generalization of boolean xor. Read more
Source§

fn xor3(&self, y: &Self, z: &Self) -> Self

Computes the arithmetic generalization of a triple xor. Read more
Source§

fn andn(&self, y: &Self) -> Self

Computes the arithmetic generalization of andnot. Read more
Source§

fn bool_check(&self) -> Self

The vanishing polynomial for boolean values: x * (1 - x). Read more
Source§

fn exp_u64(&self, power: u64) -> Self

Exponentiation by a u64 power. Read more
Source§

fn exp_const_u64<const POWER: u64>(&self) -> Self

Exponentiation by a small constant power. Read more
Source§

fn exp_power_of_2(&self, power_log: usize) -> Self

The elementary function exp_power_of_2(a, power_log) = a^{2^power_log}. Read more
Source§

fn powers(&self) -> Powers<Self>

Construct an iterator which returns powers of self: self^0, self^1, self^2, ....
Source§

fn shifted_powers(&self, start: Self) -> Powers<Self>

Construct an iterator which returns powers of self shifted by start: start, start*self^1, start*self^2, ....
Source§

impl<FP: FieldParameters> PrimeField for MontyField31<FP>

Source§

fn as_canonical_biguint(&self) -> BigUint

Return the representative of value in canonical form which lies in the range 0 <= x < self.order().
Source§

impl<FP: FieldParameters> PrimeField32 for MontyField31<FP>

Source§

const ORDER_U32: u32 = FP::PRIME

Source§

fn as_canonical_u32(&self) -> u32

Return the representative of value in canonical form which lies in the range 0 <= x < ORDER_U64.
Source§

fn to_unique_u32(&self) -> u32

Convert a field element to a u32 such that any two field elements are converted to the same u32 if and only if they represent the same value. Read more
Source§

impl<FP: FieldParameters> PrimeField64 for MontyField31<FP>

Source§

const ORDER_U64: u64

Source§

fn as_canonical_u64(&self) -> u64

Return the representative of value in canonical form which lies in the range 0 <= x < ORDER_U64.
Source§

fn to_unique_u64(&self) -> u64

Convert a field element to a u64 such that any two field elements are converted to the same u64 if and only if they represent the same value. Read more
Source§

impl<FP: FieldParameters> Product for MontyField31<FP>

Source§

fn product<I: Iterator<Item = Self>>(iter: I) -> Self

Takes an iterator and generates Self from the elements by multiplying the items.
Source§

impl<FP: FieldParameters> QuotientMap<i128> for MontyField31<FP>

Source§

fn from_int(int: i128) -> Self

Convert a given i128 integer into an element of the MontyField31 field.

Source§

fn from_canonical_checked(int: i128) -> Option<Self>

Convert a given i128 integer into an element of the MontyField31 field.

Returns None if the given integer does not lie in the range [(1 - P)/2, (P - 1)/2].

Source§

unsafe fn from_canonical_unchecked(int: i128) -> Self

Convert a given i128 integer into an element of the MontyField31 field.

§Safety

The input must be a valid i64 element.

Source§

impl<FP: FieldParameters> QuotientMap<i16> for MontyField31<FP>

Source§

fn from_int(int: i16) -> Self

Convert a given i16 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

fn from_canonical_checked(int: i16) -> Option<Self>

Convert a given i16 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

unsafe fn from_canonical_unchecked(int: i16) -> Self

Convert a given i16 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

impl<FP: FieldParameters> QuotientMap<i32> for MontyField31<FP>

Source§

fn from_int(int: i32) -> Self

Convert a given i32 integer into an element of the MontyField31 field.

Source§

fn from_canonical_checked(int: i32) -> Option<Self>

Convert a given i32 integer into an element of the MontyField31 field.

Returns None if the given integer does not lie in the range [(1 - P)/2, (P - 1)/2].

Source§

unsafe fn from_canonical_unchecked(int: i32) -> Self

Convert a given i32 integer into an element of the MontyField31 field.

§Safety

This is always safe as the conversion to monty form can accept any i32.

Source§

impl<FP: FieldParameters> QuotientMap<i64> for MontyField31<FP>

Source§

fn from_int(int: i64) -> Self

Convert a given i64 integer into an element of the MontyField31 field.

Source§

fn from_canonical_checked(int: i64) -> Option<Self>

Convert a given i64 integer into an element of the MontyField31 field.

Returns None if the given integer does not lie in the range [(1 - P)/2, (P - 1)/2].

Source§

unsafe fn from_canonical_unchecked(int: i64) -> Self

Convert a given i64 integer into an element of the MontyField31 field.

§Safety

This is always safe as the conversion to monty form can accept any i64.

Source§

impl<FP: FieldParameters> QuotientMap<i8> for MontyField31<FP>

Source§

fn from_int(int: i8) -> Self

Convert a given i8 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

fn from_canonical_checked(int: i8) -> Option<Self>

Convert a given i8 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

unsafe fn from_canonical_unchecked(int: i8) -> Self

Convert a given i8 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

impl<FP: FieldParameters> QuotientMap<u128> for MontyField31<FP>

Source§

fn from_int(int: u128) -> Self

Convert a given u128 integer into an element of the MontyField31 field.

Source§

fn from_canonical_checked(int: u128) -> Option<Self>

Convert a given u128 integer into an element of the MontyField31 field.

Returns None if the given integer is greater than the Prime.

Source§

unsafe fn from_canonical_unchecked(int: u128) -> Self

Convert a given u128 integer into an element of the MontyField31 field.

§Safety

The input must be a valid u64 element.

Source§

impl<FP: FieldParameters> QuotientMap<u16> for MontyField31<FP>

Source§

fn from_int(int: u16) -> Self

Convert a given u16 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

fn from_canonical_checked(int: u16) -> Option<Self>

Convert a given u16 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

unsafe fn from_canonical_unchecked(int: u16) -> Self

Convert a given u16 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

impl<FP: FieldParameters> QuotientMap<u32> for MontyField31<FP>

Source§

fn from_int(int: u32) -> Self

Convert a given u32 integer into an element of the MontyField31 field.

Source§

fn from_canonical_checked(int: u32) -> Option<Self>

Convert a given u32 integer into an element of the MontyField31 field.

Returns None if the given integer is greater than the Prime.

Source§

unsafe fn from_canonical_unchecked(int: u32) -> Self

Convert a given u32 integer into an element of the MontyField31 field.

§Safety

This is always safe as the conversion to monty form can accept any u32.

Source§

impl<FP: FieldParameters> QuotientMap<u64> for MontyField31<FP>

Source§

fn from_int(int: u64) -> Self

Convert a given u64 integer into an element of the MontyField31 field.

Source§

fn from_canonical_checked(int: u64) -> Option<Self>

Convert a given u64 integer into an element of the MontyField31 field.

Returns None if the given integer is greater than the Prime.

Source§

unsafe fn from_canonical_unchecked(int: u64) -> Self

Convert a given u64 integer into an element of the MontyField31 field.

§Safety

This is always safe as the conversion to monty form can accept any u64.

Source§

impl<FP: FieldParameters> QuotientMap<u8> for MontyField31<FP>

Source§

fn from_int(int: u8) -> Self

Convert a given u8 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

fn from_canonical_checked(int: u8) -> Option<Self>

Convert a given u8 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

unsafe fn from_canonical_unchecked(int: u8) -> Self

Convert a given u8 integer into an element of the MontyField31 field.

Due to the integer type, the input value is always canonical.

Source§

impl<FP: FieldParameters> RawDataSerializable for MontyField31<FP>

Source§

const NUM_BYTES: usize = 4usize

The number of bytes which this field element occupies in memory. Must be equal to the length of self.into_bytes().
Source§

fn into_bytes(self) -> [u8; 4]

Convert a field element into a collection of bytes.
Source§

fn into_u32_stream( input: impl IntoIterator<Item = Self>, ) -> impl IntoIterator<Item = u32>

Convert an iterator of field elements into an iterator of u32s. Read more
Source§

fn into_u64_stream( input: impl IntoIterator<Item = Self>, ) -> impl IntoIterator<Item = u64>

Convert an iterator of field elements into an iterator of u64s. Read more
Source§

fn into_parallel_byte_streams<const N: usize>( input: impl IntoIterator<Item = [Self; N]>, ) -> impl IntoIterator<Item = [u8; N]>

Convert an iterator of field element arrays into an iterator of byte arrays. Read more
Source§

fn into_parallel_u32_streams<const N: usize>( input: impl IntoIterator<Item = [Self; N]>, ) -> impl IntoIterator<Item = [u32; N]>

Convert an iterator of field element arrays into an iterator of u32 arrays. Read more
Source§

fn into_parallel_u64_streams<const N: usize>( input: impl IntoIterator<Item = [Self; N]>, ) -> impl IntoIterator<Item = [u64; N]>

Convert an iterator of field element arrays into an iterator of u64 arrays. Read more
Source§

fn into_byte_stream( input: impl IntoIterator<Item = Self>, ) -> impl IntoIterator<Item = u8>

Convert an iterator of field elements into an iterator of bytes.
Source§

impl<FP: FieldParameters> Serialize for MontyField31<FP>

Source§

fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more
Source§

impl<FP: MontyParameters> Sub for MontyField31<FP>

Source§

type Output = MontyField31<FP>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
Source§

impl<MP: MontyParameters, T: Into<Self>> SubAssign<T> for MontyField31<MP>

Source§

fn sub_assign(&mut self, rhs: T)

Performs the -= operation. Read more
Source§

impl<FP: MontyParameters> Sum for MontyField31<FP>

Source§

fn sum<I: Iterator<Item = Self>>(iter: I) -> Self

Takes an iterator and generates Self from the elements by “summing up” the items.
Source§

impl<FP: FieldParameters + TwoAdicData> TwoAdicField for MontyField31<FP>

Source§

const TWO_ADICITY: usize = FP::TWO_ADICITY

The number of factors of two in this field’s multiplicative group.
Source§

fn two_adic_generator(bits: usize) -> Self

Returns a generator of the multiplicative group of order 2^bits. Assumes bits <= TWO_ADICITY, otherwise the result is undefined.
Source§

impl<MP: MontyParameters + FieldParameters + TwoAdicData> TwoAdicSubgroupDft<MontyField31<MP>> for RecursiveDft<MontyField31<MP>>

DFT implementation that uses DIT for the inverse “backward” direction and DIF for the “forward” direction.

The API mandates that the LDE is applied column-wise on the row-major input. This is awkward for memory coherence, so the algorithm here transposes the input and operates on the rows in the typical way, then transposes back again for the output. Even for modestly large inputs, the cost of the two transposes outweighed by the improved performance from operating row-wise.

The choice of DIT for inverse and DIF for “forward” transform mean that a (coset) LDE

  • IDFT / zero extend / DFT

expands to

  • bit-reverse input
  • invDFT DIT
    • result is in “correct” order
  • coset shift and zero extend result
  • DFT DIF on result
    • output is bit-reversed, as required for FRI.

Hence the only bit-reversal that needs to take place is on the input.

Source§

type Evaluations = RowIndexMappedView<BitReversalPerm, DenseMatrix<MontyField31<MP>>>

The matrix type used to store the result of a batched DFT operation. Read more
Source§

fn dft_batch(&self, mat: RowMajorMatrix<MontyField31<MP>>) -> Self::Evaluations

Compute the discrete Fourier transform (DFT) of each column in mat. This is the only method an implementer needs to define, all other methods can be derived from this one. Read more
Source§

fn idft_batch( &self, mat: RowMajorMatrix<MontyField31<MP>>, ) -> RowMajorMatrix<MontyField31<MP>>

Compute the inverse DFT of each column in mat. Read more
Source§

fn coset_lde_batch( &self, mat: RowMajorMatrix<MontyField31<MP>>, added_bits: usize, shift: MontyField31<MP>, ) -> Self::Evaluations

Compute the low-degree extension of each column in mat onto a coset of a larger subgroup. Read more
Source§

fn dft(&self, vec: Vec<F>) -> Vec<F>

Compute the discrete Fourier transform (DFT) of vec. Read more
Source§

fn coset_dft(&self, vec: Vec<F>, shift: F) -> Vec<F>

Compute the “coset DFT” of vec. Read more
Source§

fn coset_dft_batch(&self, mat: DenseMatrix<F>, shift: F) -> Self::Evaluations

Compute the “coset DFT” of each column in mat. Read more
Source§

fn idft(&self, vec: Vec<F>) -> Vec<F>

Compute the inverse DFT of vec. Read more
Source§

fn coset_idft(&self, vec: Vec<F>, shift: F) -> Vec<F>

Compute the “coset iDFT” of vec. This is the inverse operation of “coset DFT”. Read more
Source§

fn coset_idft_batch(&self, mat: DenseMatrix<F>, shift: F) -> DenseMatrix<F>

Compute the “coset iDFT” of each column in mat. This is the inverse operation of “coset DFT”. Read more
Source§

fn lde(&self, vec: Vec<F>, added_bits: usize) -> Vec<F>

Compute the low-degree extension of vec onto a larger subgroup. Read more
Source§

fn lde_batch(&self, mat: DenseMatrix<F>, added_bits: usize) -> Self::Evaluations

Compute the low-degree extension of each column in mat onto a larger subgroup. Read more
Source§

fn coset_lde(&self, vec: Vec<F>, added_bits: usize, shift: F) -> Vec<F>

Compute the low-degree extension of of vec onto a coset of a larger subgroup. Read more
Source§

fn dft_algebra<V>(&self, vec: Vec<V>) -> Vec<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the discrete Fourier transform (DFT) of vec. Read more
Source§

fn dft_algebra_batch<V>(&self, mat: DenseMatrix<V>) -> DenseMatrix<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the discrete Fourier transform (DFT) of each column in mat. Read more
Source§

fn coset_dft_algebra<V>(&self, vec: Vec<V>, shift: F) -> Vec<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the “coset DFT” of vec. Read more
Source§

fn coset_dft_algebra_batch<V>( &self, mat: DenseMatrix<V>, shift: F, ) -> DenseMatrix<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the “coset DFT” of each column in mat. Read more
Source§

fn idft_algebra<V>(&self, vec: Vec<V>) -> Vec<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the inverse DFT of vec. Read more
Source§

fn idft_algebra_batch<V>(&self, mat: DenseMatrix<V>) -> DenseMatrix<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the inverse DFT of each column in mat. Read more
Source§

fn coset_idft_algebra<V>(&self, vec: Vec<V>, shift: F) -> Vec<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the “coset iDFT” of vec. This is the inverse operation of “coset DFT”. Read more
Source§

fn coset_idft_algebra_batch<V>( &self, mat: DenseMatrix<V>, shift: F, ) -> DenseMatrix<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the “coset iDFT” of each column in mat. This is the inverse operation of “coset DFT”. Read more
Source§

fn lde_algebra<V>(&self, vec: Vec<V>, added_bits: usize) -> Vec<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the low-degree extension of vec onto a larger subgroup. Read more
Source§

fn lde_algebra_batch<V>( &self, mat: DenseMatrix<V>, added_bits: usize, ) -> DenseMatrix<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the low-degree extension of each column in mat onto a larger subgroup. Read more
Source§

fn coset_lde_algebra<V>( &self, vec: Vec<V>, added_bits: usize, shift: F, ) -> Vec<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the low-degree extension of of vec onto a coset of a larger subgroup. Read more
Source§

fn coset_lde_algebra_batch<V>( &self, mat: DenseMatrix<V>, added_bits: usize, shift: F, ) -> DenseMatrix<V>
where V: BasedVectorSpace<F> + Clone + Send + Sync,

Compute the low-degree extension of each column in mat onto a coset of a larger subgroup. Read more
Source§

impl<MP: Copy + MontyParameters> Copy for MontyField31<MP>

Source§

impl<MP: Eq + MontyParameters> Eq for MontyField31<MP>

Source§

impl<FP: MontyParameters, MU: MDSUtils> MdsPermutation<MontyField31<FP>, 12> for MdsMatrixMontyField31<MU>

Source§

impl<FP: MontyParameters, MU: MDSUtils> MdsPermutation<MontyField31<FP>, 16> for MdsMatrixMontyField31<MU>

Source§

impl<FP: BarrettParameters, MU: MDSUtils> MdsPermutation<MontyField31<FP>, 24> for MdsMatrixMontyField31<MU>

Source§

impl<FP: BarrettParameters, MU: MDSUtils> MdsPermutation<MontyField31<FP>, 32> for MdsMatrixMontyField31<MU>

Source§

impl<FP: BarrettParameters, MU: MDSUtils> MdsPermutation<MontyField31<FP>, 64> for MdsMatrixMontyField31<MU>

Source§

impl<FP: MontyParameters, MU: MDSUtils> MdsPermutation<MontyField31<FP>, 8> for MdsMatrixMontyField31<MU>

Source§

impl<MP: MontyParameters> Packable for MontyField31<MP>

Source§

impl<MP: MontyParameters> StructuralPartialEq for MontyField31<MP>

Auto Trait Implementations§

§

impl<MP> Freeze for MontyField31<MP>

§

impl<MP> RefUnwindSafe for MontyField31<MP>
where MP: RefUnwindSafe,

§

impl<MP> Send for MontyField31<MP>

§

impl<MP> Sync for MontyField31<MP>

§

impl<MP> Unpin for MontyField31<MP>
where MP: Unpin,

§

impl<MP> UnwindSafe for MontyField31<MP>
where MP: 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<F> BasedVectorSpace<F> for F

Source§

const DIMENSION: usize = 1usize

The dimension of the vector space, i.e. the number of elements in its basis.
Source§

fn as_basis_coefficients_slice(&self) -> &[F]

Fixes a basis for the algebra A and uses this to map an element of A to a slice of DIMENSION F elements. Read more
Source§

fn from_basis_coefficients_fn<Fn>(f: Fn) -> F
where Fn: FnMut(usize) -> F,

Fixes a basis for the algebra A and uses this to map DIMENSION F elements to an element of A. Similar to core:array::from_fn, the DIMENSION F elements are given by Fn(0), ..., Fn(DIMENSION - 1) called in that order. Read more
Source§

fn from_basis_coefficients_iter<I>(iter: I) -> Option<F>
where I: ExactSizeIterator<Item = F>,

Fixes a basis for the algebra A and uses this to map DIMENSION F elements to an element of A. Read more
Source§

fn flatten_to_base(vec: Vec<F>) -> Vec<F>

Convert from a vector of Self to a vector of F by flattening the basis coefficients. Read more
Source§

fn reconstitute_from_base(vec: Vec<F>) -> Vec<F>

Convert from a vector of F to a vector of Self by combining the basis coefficients. Read more
Source§

fn from_basis_coefficients_slice(slice: &[F]) -> Option<Self>

Fixes a basis for the algebra A and uses this to map DIMENSION F elements to an element of A. Read more
Source§

fn ith_basis_element(i: usize) -> Option<Self>

Given a basis for the Algebra A, return the i’th basis element. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<F> ExtensionField<F> for F
where F: Field,

Source§

type ExtensionPacking = <F as Field>::Packing

Source§

fn is_in_basefield(&self) -> bool

Determine if the given element lies in the base field.
Source§

fn as_base(&self) -> Option<F>

If the element lies in the base field project it down. Otherwise return None.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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

impl<F> PackedField for F
where F: Field,

Source§

type Scalar = F

Source§

fn packed_powers(base: Self::Scalar) -> Powers<Self>

Construct an iterator which returns powers of base packed into packed field elements. Read more
Source§

fn packed_shifted_powers( base: Self::Scalar, start: Self::Scalar, ) -> Powers<Self>

Construct an iterator which returns powers of base multiplied by start and packed into packed field elements. Read more
Source§

fn packed_linear_combination<const N: usize>( coeffs: &[Self::Scalar], vecs: &[Self], ) -> Self

Compute a linear combination of a slice of base field elements and a slice of packed field elements. The slices must have equal length and it must be a compile time constant. Read more
Source§

impl<F> PackedFieldPow2 for F
where F: Field,

Source§

fn interleave(&self, other: F, block_len: usize) -> (F, F)

Take interpret two vectors as chunks of block_len elements. Unpack and interleave those chunks. This is best seen with an example. If we have: Read more
Source§

impl<T> PackedValue for T
where T: Packable,

Source§

const WIDTH: usize = 1usize

Number of scalar values packed together.
Source§

type Value = T

The scalar type that is packed into this value.
Source§

fn from_slice(slice: &[<T as PackedValue>::Value]) -> &T

Interprets a slice of scalar values as a packed value reference. Read more
Source§

fn from_slice_mut(slice: &mut [<T as PackedValue>::Value]) -> &mut T

Interprets a mutable slice of scalar values as a mutable packed value. Read more
Source§

fn from_fn<Fn>(f: Fn) -> T
where Fn: FnMut(usize) -> <T as PackedValue>::Value,

Constructs a packed value using a function to generate each element. Read more
Source§

fn as_slice(&self) -> &[<T as PackedValue>::Value]

Returns the underlying scalar values as an immutable slice.
Source§

fn as_slice_mut(&mut self) -> &mut [<T as PackedValue>::Value]

Returns the underlying scalar values as a mutable slice.
Source§

fn pack_slice(buf: &[Self::Value]) -> &[Self]

Packs a slice of scalar values into a slice of packed values. Read more
Source§

fn pack_slice_with_suffix(buf: &[Self::Value]) -> (&[Self], &[Self::Value])

Packs a slice into packed values and returns the packed portion and any remaining suffix.
Source§

fn pack_slice_mut(buf: &mut [Self::Value]) -> &mut [Self]

Converts a mutable slice of scalar values into a mutable slice of packed values. Read more
Source§

fn pack_maybe_uninit_slice_mut( buf: &mut [MaybeUninit<Self::Value>], ) -> &mut [MaybeUninit<Self>]

Converts a mutable slice of possibly uninitialized scalar values into a mutable slice of possibly uninitialized packed values. Read more
Source§

fn pack_slice_with_suffix_mut( buf: &mut [Self::Value], ) -> (&mut [Self], &mut [Self::Value])

Converts a mutable slice of scalar values into a pair: Read more
Source§

fn pack_maybe_uninit_slice_with_suffix_mut( buf: &mut [MaybeUninit<Self::Value>], ) -> (&mut [MaybeUninit<Self>], &mut [MaybeUninit<Self::Value>])

Converts a mutable slice of possibly uninitialized scalar values into a pair: Read more
Source§

fn unpack_slice(buf: &[Self]) -> &[Self::Value]

Reinterprets a slice of packed values as a flat slice of scalar values. Read more
Source§

impl<F> QuotientMap<isize> for F

Source§

fn from_int(int: isize) -> F

We use the from_int method of the primitive integer type identical to isize on this machine

Source§

fn from_canonical_checked(int: isize) -> Option<F>

We use the from_canonical_checked method of the primitive integer type identical to isize on this machine

Source§

unsafe fn from_canonical_unchecked(int: isize) -> F

We use the from_canonical_unchecked method of the primitive integer type identical to isize on this machine

Source§

impl<F> QuotientMap<usize> for F

Source§

fn from_int(int: usize) -> F

We use the from_int method of the primitive integer type identical to usize on this machine

Source§

fn from_canonical_checked(int: usize) -> Option<F>

We use the from_canonical_checked method of the primitive integer type identical to usize on this machine

Source§

unsafe fn from_canonical_unchecked(int: usize) -> F

We use the from_canonical_unchecked method of the primitive integer type identical to usize on this machine

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<R> Algebra<R> for R

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,