#[repr(transparent)]pub struct VectorizedExt<F: Field, EF: ExtensionField<F>, const N: usize>(pub [EF::ExtensionPacking; N]);Expand description
N packed extension-field vectors operated on in lockstep.
The extension-field counterpart of Vectorized: lane i corresponds to
lane i of a Vectorized<F, N> operand, so the two types can be mixed in
the same expression (VectorizedExt * Vectorized, etc.).
Tuple Fields§
§0: [EF::ExtensionPacking; N]Implementations§
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> VectorizedExt<F, EF, N>
Sourcepub fn from_vectorized_basis_coefficients(
coefficients: &[Vectorized<F, N>],
) -> Self
pub fn from_vectorized_basis_coefficients( coefficients: &[Vectorized<F, N>], ) -> Self
Build from basis coefficients, where coefficient d is the vectorized
base-field value coefficients[d].
This is the vectorized analogue of
BasedVectorSpace::from_basis_coefficients_fn; it takes a slice
rather than a closure so each coefficient is computed once and shared
by all N components.
Trait Implementations§
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Add for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Add for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Add<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Add<EF> for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Add<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Add<Vectorized<F, N>> for VectorizedExt<F, EF, N>
Source§type Output = VectorizedExt<F, EF, N>
type Output = VectorizedExt<F, EF, N>
The resulting type after applying the
+ operator.Source§fn add(self, rhs: Vectorized<F, N>) -> Self
fn add(self, rhs: Vectorized<F, N>) -> Self
Performs the
+ operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> AddAssign for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> AddAssign for VectorizedExt<F, EF, N>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> AddAssign<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> AddAssign<EF> for VectorizedExt<F, EF, N>
Source§fn add_assign(&mut self, rhs: EF)
fn add_assign(&mut self, rhs: EF)
Performs the
+= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> AddAssign<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> AddAssign<Vectorized<F, N>> for VectorizedExt<F, EF, N>
Source§fn add_assign(&mut self, rhs: Vectorized<F, N>)
fn add_assign(&mut self, rhs: Vectorized<F, N>)
Performs the
+= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> Algebra<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Algebra<EF> for VectorizedExt<F, EF, N>
Source§const BATCHED_LC_CHUNK: usize
const BATCHED_LC_CHUNK: usize
Optimal chunk size for
batched_linear_combination. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> Algebra<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Algebra<Vectorized<F, N>> for VectorizedExt<F, EF, N>
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: Clone + Field, EF: Clone + ExtensionField<F>, const N: usize> Clone for VectorizedExt<F, EF, N>where
EF::ExtensionPacking: Clone,
impl<F: Clone + Field, EF: Clone + ExtensionField<F>, const N: usize> Clone for VectorizedExt<F, EF, N>where
EF::ExtensionPacking: Clone,
Source§fn clone(&self) -> VectorizedExt<F, EF, N>
fn clone(&self) -> VectorizedExt<F, EF, N>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl<F: Copy + Field, EF: Copy + ExtensionField<F>, const N: usize> Copy for VectorizedExt<F, EF, N>where
EF::ExtensionPacking: Copy,
Source§impl<F: Debug + Field, EF: Debug + ExtensionField<F>, const N: usize> Debug for VectorizedExt<F, EF, N>where
EF::ExtensionPacking: Debug,
impl<F: Debug + Field, EF: Debug + ExtensionField<F>, const N: usize> Debug for VectorizedExt<F, EF, N>where
EF::ExtensionPacking: Debug,
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Default for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Default for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> From<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> From<EF> for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> From<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> From<Vectorized<F, N>> for VectorizedExt<F, EF, N>
Source§fn from(value: Vectorized<F, N>) -> Self
fn from(value: Vectorized<F, N>) -> Self
Converts to this type from the input type.
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Mul for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Mul for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Mul<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Mul<EF> for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Mul<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Mul<Vectorized<F, N>> for VectorizedExt<F, EF, N>
Source§type Output = VectorizedExt<F, EF, N>
type Output = VectorizedExt<F, EF, N>
The resulting type after applying the
* operator.Source§fn mul(self, rhs: Vectorized<F, N>) -> Self
fn mul(self, rhs: Vectorized<F, N>) -> Self
Performs the
* operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> MulAssign for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> MulAssign for VectorizedExt<F, EF, N>
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the
*= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> MulAssign<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> MulAssign<EF> for VectorizedExt<F, EF, N>
Source§fn mul_assign(&mut self, rhs: EF)
fn mul_assign(&mut self, rhs: EF)
Performs the
*= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> MulAssign<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> MulAssign<Vectorized<F, N>> for VectorizedExt<F, EF, N>
Source§fn mul_assign(&mut self, rhs: Vectorized<F, N>)
fn mul_assign(&mut self, rhs: Vectorized<F, N>)
Performs the
*= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> Neg for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Neg for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> PrimeCharacteristicRing for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> PrimeCharacteristicRing for VectorizedExt<F, EF, N>
Source§type PrimeSubfield = <<EF as ExtensionField<F>>::ExtensionPacking as PrimeCharacteristicRing>::PrimeSubfield
type PrimeSubfield = <<EF as ExtensionField<F>>::ExtensionPacking as PrimeCharacteristicRing>::PrimeSubfield
The field
ℤ/p where the characteristic of this ring is p.Source§fn from_prime_subfield(f: Self::PrimeSubfield) -> Self
fn from_prime_subfield(f: Self::PrimeSubfield) -> Self
Source§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 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 dot_product<const M: usize>(u: &[Self; M], v: &[Self; M]) -> Self
fn dot_product<const M: usize>(u: &[Self; M], v: &[Self; M]) -> Self
Compute the dot product of two vectors.
Source§fn sum_array<const M: usize>(input: &[Self]) -> Self
fn sum_array<const M: usize>(input: &[Self]) -> Self
Compute the sum of a slice of elements whose length is a compile time constant. Read more
Source§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_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 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 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§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§impl<F: Field, EF: ExtensionField<F>, const N: usize> Product for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Product for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Sub for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Sub for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Sub<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Sub<EF> for VectorizedExt<F, EF, N>
Source§impl<F: Field, EF: ExtensionField<F>, const N: usize> Sub<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> Sub<Vectorized<F, N>> for VectorizedExt<F, EF, N>
Source§type Output = VectorizedExt<F, EF, N>
type Output = VectorizedExt<F, EF, N>
The resulting type after applying the
- operator.Source§fn sub(self, rhs: Vectorized<F, N>) -> Self
fn sub(self, rhs: Vectorized<F, N>) -> Self
Performs the
- operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> SubAssign for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> SubAssign for VectorizedExt<F, EF, N>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the
-= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> SubAssign<EF> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> SubAssign<EF> for VectorizedExt<F, EF, N>
Source§fn sub_assign(&mut self, rhs: EF)
fn sub_assign(&mut self, rhs: EF)
Performs the
-= operation. Read moreSource§impl<F: Field, EF: ExtensionField<F>, const N: usize> SubAssign<Vectorized<F, N>> for VectorizedExt<F, EF, N>
impl<F: Field, EF: ExtensionField<F>, const N: usize> SubAssign<Vectorized<F, N>> for VectorizedExt<F, EF, N>
Source§fn sub_assign(&mut self, rhs: Vectorized<F, N>)
fn sub_assign(&mut self, rhs: Vectorized<F, N>)
Performs the
-= operation. Read moreAuto Trait Implementations§
impl<F, EF, const N: usize> Freeze for VectorizedExt<F, EF, N>
impl<F, EF, const N: usize> RefUnwindSafe for VectorizedExt<F, EF, N>
impl<F, EF, const N: usize> Send for VectorizedExt<F, EF, N>
impl<F, EF, const N: usize> Sync for VectorizedExt<F, EF, N>
impl<F, EF, const N: usize> Unpin for VectorizedExt<F, EF, N>
impl<F, EF, const N: usize> UnsafeUnpin for VectorizedExt<F, EF, N>
impl<F, EF, const N: usize> UnwindSafe for VectorizedExt<F, EF, N>
Blanket Implementations§
Source§impl<R> Algebra<R> for Rwhere
R: PrimeCharacteristicRing,
impl<R> Algebra<R> for Rwhere
R: PrimeCharacteristicRing,
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> BasedVectorSpace<F> for Fwhere
F: PrimeCharacteristicRing,
impl<F> BasedVectorSpace<F> for Fwhere
F: PrimeCharacteristicRing,
Source§const DIMENSION: usize = const DIMENSION: usize = 1;
const DIMENSION: usize = const DIMENSION: usize = 1;
The dimension of the vector space, i.e. the number of elements in
its basis.
Source§fn as_basis_coefficients_slice(&self) -> &[F]
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 moreSource§fn from_basis_coefficients_fn<Fn>(f: Fn) -> F
fn from_basis_coefficients_fn<Fn>(f: Fn) -> 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 moreSource§fn from_basis_coefficients_iter<I>(iter: I) -> Option<F>where
I: ExactSizeIterator<Item = F>,
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 moreSource§fn flatten_to_base(vec: Vec<F>) -> Vec<F>
fn flatten_to_base(vec: Vec<F>) -> Vec<F>
Source§fn reconstitute_from_base(vec: Vec<F>) -> Vec<F>
fn reconstitute_from_base(vec: Vec<F>) -> Vec<F>
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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