pub type PackedBinomialExtensionField<F, PF, const D: usize> = PackedExtField<F, PF, D, Binomial<F>>;Expand description
Packed binomial extension field F[X] / (X^D - W), one element per SIMD lane.
Type alias for the unified PackedExtField with Shape = Binomial<F>.
Aliased Type§
pub struct PackedBinomialExtensionField<F, PF, const D: usize> { /* private fields */ }Trait Implementations§
Source§impl<F, PF, const D: usize> Add for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Add for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, PF, const D: usize> Add<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Add<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§type Output = PackedExtField<F, PF, D, Binomial<F>>
type Output = PackedExtField<F, PF, D, Binomial<F>>
The resulting type after applying the
+ operator.Source§fn add(self, rhs: BinomialExtensionField<F, D>) -> Self
fn add(self, rhs: BinomialExtensionField<F, D>) -> Self
Performs the
+ operation. Read moreSource§impl<F, PF, const D: usize> Add<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Add<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, PF, const D: usize> AddAssign for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> AddAssign for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+= operation. Read moreSource§impl<F, PF, const D: usize> AddAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> AddAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn add_assign(&mut self, rhs: BinomialExtensionField<F, D>)
fn add_assign(&mut self, rhs: BinomialExtensionField<F, D>)
Performs the
+= operation. Read moreSource§impl<F, PF, const D: usize> AddAssign<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> AddAssign<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn add_assign(&mut self, rhs: PF)
fn add_assign(&mut self, rhs: PF)
Performs the
+= operation. Read moreSource§impl<F: BinomiallyExtendable<D>, PF: PackedField<Scalar = F>, const D: usize> Algebra<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>
impl<F: BinomiallyExtendable<D>, PF: PackedField<Scalar = F>, const D: usize> Algebra<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>
Source§fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Selfwhere
F: Dup,
fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Selfwhere
F: Dup,
Dot product between algebra elements and base field scalars. Read more
Source§const BATCHED_LC_CHUNK: usize = 8
const BATCHED_LC_CHUNK: usize = 8
Optimal chunk size for
batched_linear_combination. Read moreSource§impl<F: BinomiallyExtendable<D>, PF: PackedField<Scalar = F>, const D: usize> Algebra<PF> for PackedBinomialExtensionField<F, PF, D>
impl<F: BinomiallyExtendable<D>, PF: PackedField<Scalar = F>, const D: usize> Algebra<PF> for PackedBinomialExtensionField<F, PF, D>
Source§fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[PF; N]) -> Selfwhere
PF: Dup,
fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[PF; N]) -> Selfwhere
PF: Dup,
Dot product between algebra elements and base field scalars. Read more
Source§const BATCHED_LC_CHUNK: usize = 8
const BATCHED_LC_CHUNK: usize = 8
Optimal chunk size for
batched_linear_combination. Read moreSource§impl<F, PF, const D: usize> BasedVectorSpace<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> BasedVectorSpace<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§const DIMENSION: usize = D
const DIMENSION: usize = D
The dimension of the vector space, i.e. the number of elements in
its basis.
Source§fn as_basis_coefficients_slice(&self) -> &[PF]
fn as_basis_coefficients_slice(&self) -> &[PF]
Fixes a basis for the algebra
A and uses this to
map an element of A to a slice of DIMENSION F elements. Read moreSource§fn from_basis_coefficients_fn<Fn: FnMut(usize) -> PF>(f: Fn) -> Self
fn from_basis_coefficients_fn<Fn: FnMut(usize) -> PF>(f: Fn) -> Self
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 moreSource§fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = PF>>(
iter: I,
) -> Option<Self>
fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = PF>>( iter: I, ) -> Option<Self>
Fixes a basis for the algebra
A and uses this to
map DIMENSION F elements to an element of A. Read moreSource§fn flatten_to_base(vec: Vec<Self>) -> Vec<PF>
fn flatten_to_base(vec: Vec<Self>) -> Vec<PF>
Source§fn reconstitute_from_base(vec: Vec<PF>) -> Vec<Self>
fn reconstitute_from_base(vec: Vec<PF>) -> Vec<Self>
Source§impl<F: Field, PF: PackedField<Scalar = F>, const D: usize> Default for PackedBinomialExtensionField<F, PF, D>
impl<F: Field, PF: PackedField<Scalar = F>, const D: usize> Default for PackedBinomialExtensionField<F, PF, D>
Source§impl<F: BinomiallyExtendable<D>, const D: usize> Div for PackedBinomialExtensionField<F, F::Packing, D>
impl<F: BinomiallyExtendable<D>, const D: usize> Div for PackedBinomialExtensionField<F, F::Packing, D>
Source§impl<F, PF, const D: usize> Div<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Div<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§type Output = PackedExtField<F, PF, D, Binomial<F>>
type Output = PackedExtField<F, PF, D, Binomial<F>>
The resulting type after applying the
/ operator.Source§fn div(self, rhs: BinomialExtensionField<F, D>) -> Self
fn div(self, rhs: BinomialExtensionField<F, D>) -> Self
Performs the
/ operation. Read moreSource§impl<F: BinomiallyExtendable<D>, const D: usize> DivAssign for PackedBinomialExtensionField<F, F::Packing, D>
impl<F: BinomiallyExtendable<D>, const D: usize> DivAssign for PackedBinomialExtensionField<F, F::Packing, D>
Source§fn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
Performs the
/= operation. Read moreSource§impl<F, PF, const D: usize> DivAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> DivAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn div_assign(&mut self, rhs: BinomialExtensionField<F, D>)
fn div_assign(&mut self, rhs: BinomialExtensionField<F, D>)
Performs the
/= operation. Read moreSource§impl<F: Field, PF: PackedField<Scalar = F>, const D: usize> From<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>
impl<F: Field, PF: PackedField<Scalar = F>, const D: usize> From<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>
Source§fn from(x: BinomialExtensionField<F, D>) -> Self
fn from(x: BinomialExtensionField<F, D>) -> Self
Converts to this type from the input type.
Source§impl<F: Field, PF: PackedField<Scalar = F>, const D: usize> From<PF> for PackedBinomialExtensionField<F, PF, D>
impl<F: Field, PF: PackedField<Scalar = F>, const D: usize> From<PF> for PackedBinomialExtensionField<F, PF, D>
Source§impl<F, PF, const D: usize> Mul for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Mul for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, PF, const D: usize> Mul<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Mul<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§type Output = PackedExtField<F, PF, D, Binomial<F>>
type Output = PackedExtField<F, PF, D, Binomial<F>>
The resulting type after applying the
* operator.Source§fn mul(self, rhs: BinomialExtensionField<F, D>) -> Self
fn mul(self, rhs: BinomialExtensionField<F, D>) -> Self
Performs the
* operation. Read moreSource§impl<F, PF, const D: usize> Mul<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Mul<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, PF, const D: usize> MulAssign for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> MulAssign for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the
*= operation. Read moreSource§impl<F, PF, const D: usize> MulAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> MulAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn mul_assign(&mut self, rhs: BinomialExtensionField<F, D>)
fn mul_assign(&mut self, rhs: BinomialExtensionField<F, D>)
Performs the
*= operation. Read moreSource§impl<F, PF, const D: usize> MulAssign<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> MulAssign<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn mul_assign(&mut self, rhs: PF)
fn mul_assign(&mut self, rhs: PF)
Performs the
*= operation. Read moreSource§impl<F, PF, const D: usize> Neg for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Neg for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, const D: usize> PackedFieldExtension<F, ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, F::Packing, D>where
F: BinomiallyExtendable<D>,
impl<F, const D: usize> PackedFieldExtension<F, ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, F::Packing, D>where
F: BinomiallyExtendable<D>,
Source§fn from_ext_fn(f: impl Fn(usize) -> BinomialExtensionField<F, D>) -> Self
fn from_ext_fn(f: impl Fn(usize) -> BinomialExtensionField<F, D>) -> Self
Construct a packed extension by applying
f to each lane. Read moreSource§fn packed_ext_powers(base: BinomialExtensionField<F, D>) -> Powers<Self> ⓘ
fn packed_ext_powers(base: BinomialExtensionField<F, D>) -> Powers<Self> ⓘ
Similar to
packed_powers, construct an iterator which returns
powers of base packed into PackedFieldExtension elements.Source§fn from_ext_slice(slice: &[ExtField]) -> Self
fn from_ext_slice(slice: &[ExtField]) -> Self
Pack a length-
WIDTH slice of extension field elements into one packed extension. Read moreSource§fn pack_ext_columns<const N: usize>(rows: &[[ExtField; N]]) -> [Self; N]
fn pack_ext_columns<const N: usize>(rows: &[[ExtField; N]]) -> [Self; N]
Source§fn pack_ext_columns_fn<const N: usize>(
row_fn: impl Fn(usize) -> [ExtField; N],
) -> [Self; N]
fn pack_ext_columns_fn<const N: usize>( row_fn: impl Fn(usize) -> [ExtField; N], ) -> [Self; N]
Pack
N columns using a closure that produces each row. Read moreSource§fn extract(&self, lane: usize) -> ExtField
fn extract(&self, lane: usize) -> ExtField
Extract the extension field element at the given SIMD lane.
Source§fn to_ext_slice(&self, out: &mut [ExtField])
fn to_ext_slice(&self, out: &mut [ExtField])
Write all
W lanes into the given slice. Read moreSource§fn unpack_ext_into<const N: usize>(
packed: &[Self; N],
rows: &mut [[ExtField; N]],
)
fn unpack_ext_into<const N: usize>( packed: &[Self; N], rows: &mut [[ExtField; N]], )
Source§fn unpack_ext_iter<const N: usize>(
packed: [Self; N],
) -> impl Iterator<Item = [ExtField; N]>
fn unpack_ext_iter<const N: usize>( packed: [Self; N], ) -> impl Iterator<Item = [ExtField; N]>
Iterator equivalent of
PackedFieldExtension::unpack_ext_into. Read moreSource§fn to_ext_iter(
iter: impl IntoIterator<Item = Self>,
) -> impl Iterator<Item = ExtField>
fn to_ext_iter( iter: impl IntoIterator<Item = Self>, ) -> impl Iterator<Item = ExtField>
Convert an iterator of packed extension field elements to an iterator of
extension field elements (flat — one
ExtField per lane per packed value).Source§impl<F, PF, const D: usize> PrimeCharacteristicRing for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> PrimeCharacteristicRing for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§type PrimeSubfield = <PF as PrimeCharacteristicRing>::PrimeSubfield
type PrimeSubfield = <PF as PrimeCharacteristicRing>::PrimeSubfield
The field
ℤ/p where the characteristic of this ring is p.Source§fn from_prime_subfield(val: Self::PrimeSubfield) -> Self
fn from_prime_subfield(val: Self::PrimeSubfield) -> Self
Source§fn mul_2exp_u64(&self, exp: u64) -> Self
fn mul_2exp_u64(&self, exp: u64) -> Self
The elementary function
mul_2exp_u64(a, exp) = a * 2^{exp}. Read moreSource§fn div_2exp_u64(&self, exp: u64) -> Self
fn div_2exp_u64(&self, exp: u64) -> Self
Divide by a given power of two.
div_2exp_u64(a, exp) = a/2^exp Read moreSource§fn zero_vec(len: usize) -> Vec<Self>
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 moreSource§fn from_usize(int: usize) -> Self
fn from_usize(int: usize) -> Self
Source§fn from_isize(int: isize) -> Self
fn from_isize(int: isize) -> Self
Source§fn xor(&self, y: &Self) -> Self
fn xor(&self, y: &Self) -> Self
Computes the arithmetic generalization of boolean
xor. Read moreSource§fn xor3(&self, y: &Self, z: &Self) -> Self
fn xor3(&self, y: &Self, z: &Self) -> Self
Computes the arithmetic generalization of a triple
xor. Read moreSource§fn bool_check(&self) -> Self
fn bool_check(&self) -> Self
The vanishing polynomial for boolean values:
x * (x - 1). Read moreSource§fn exp_const_u64<const POWER: u64>(&self) -> Self
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
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 moreSource§fn powers(&self) -> Powers<Self> ⓘ
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> ⓘ
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<F, PF, const D: usize> Product for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Product for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, PF, const D: usize> Sub for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Sub for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, PF, const D: usize> Sub<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Sub<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§type Output = PackedExtField<F, PF, D, Binomial<F>>
type Output = PackedExtField<F, PF, D, Binomial<F>>
The resulting type after applying the
- operator.Source§fn sub(self, rhs: BinomialExtensionField<F, D>) -> Self
fn sub(self, rhs: BinomialExtensionField<F, D>) -> Self
Performs the
- operation. Read moreSource§impl<F, PF, const D: usize> Sub<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> Sub<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§impl<F, PF, const D: usize> SubAssign for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> SubAssign for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the
-= operation. Read moreSource§impl<F, PF, const D: usize> SubAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> SubAssign<ExtField<F, D, Binomial<F>>> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn sub_assign(&mut self, rhs: BinomialExtensionField<F, D>)
fn sub_assign(&mut self, rhs: BinomialExtensionField<F, D>)
Performs the
-= operation. Read moreSource§impl<F, PF, const D: usize> SubAssign<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
impl<F, PF, const D: usize> SubAssign<PF> for PackedBinomialExtensionField<F, PF, D>where
F: BinomiallyExtendable<D>,
PF: PackedField<Scalar = F>,
Source§fn sub_assign(&mut self, rhs: PF)
fn sub_assign(&mut self, rhs: PF)
Performs the
-= operation. Read more