pub struct SlicedPackedField<F, PSub, const N: usize>(/* private fields */);Expand description
A packed extension field stored as N packed subfield coordinate registers.
F is the extension scalar, PSub the packed subfield holding one coordinate of every lane,
and N = <F as ExtensionField<PSub::Scalar>>::DEGREE the extension degree. See the module
documentation for the layout and for which operations are generic here versus supplied per
concrete extension.
Concrete packings are named through type aliases; see packed_ghash_sq for GHASH².
use binius_field::{Divisible, Field, GhashSq256b, PackedField, SlicedGhashSq2x256b};
let scalars = [GhashSq256b::ONE, GhashSq256b::MULTIPLICATIVE_GENERATOR];
let a = SlicedGhashSq2x256b::from_scalars(scalars);
let squared = a * a;
for i in 0..SlicedGhashSq2x256b::WIDTH {
assert_eq!(squared.get(i), scalars[i] * scalars[i]);
}Implementations§
Source§impl<F, PSub: PackedField, const N: usize> SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> SlicedPackedField<F, PSub, N>
Trait Implementations§
Source§impl<F, PSub: PackedField, const N: usize> Add<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Add<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub, const N: usize> Add<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> Add<F> for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Add for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Add for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> AddAssign<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> AddAssign<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
Source§fn add_assign(&mut self, rhs: &Self)
fn add_assign(&mut self, rhs: &Self)
Performs the
+= operation. Read moreSource§impl<F, PSub, const N: usize> AddAssign<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> AddAssign<F> for SlicedPackedField<F, PSub, N>
Source§fn add_assign(&mut self, rhs: F)
fn add_assign(&mut self, rhs: F)
Performs the
+= operation. Read moreSource§impl<F, PSub: PackedField, const N: usize> AddAssign for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> AddAssign for SlicedPackedField<F, PSub, N>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+= operation. Read moreSource§impl<F, PSub: PackedField, const N: usize> Debug for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Debug for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Default for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Default for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Distribution<SlicedPackedField<F, PSub, N>> for StandardUniform
impl<F, PSub: PackedField, const N: usize> Distribution<SlicedPackedField<F, PSub, N>> for StandardUniform
Source§fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> SlicedPackedField<F, PSub, N>
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> SlicedPackedField<F, PSub, N>
Generate a random value of
T, using rng as the source of randomness.§fn sample_iter<R>(self, rng: R) -> Iter<Self, R, T>where
R: Rng,
Self: Sized,
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 moreSource§impl<F, PSub, const N: usize> Divisible<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> Divisible<F> for SlicedPackedField<F, PSub, N>
Source§fn value_iter(value: Self) -> impl ExactSizeIterator<Item = F> + Send + Clone
fn value_iter(value: Self) -> impl ExactSizeIterator<Item = F> + Send + Clone
Returns an iterator over subdivisions of this underlier value, ordered from LSB to MSB.
Source§fn ref_iter(
value: &Self,
) -> impl ExactSizeIterator<Item = F> + Send + Clone + '_
fn ref_iter( value: &Self, ) -> impl ExactSizeIterator<Item = F> + Send + Clone + '_
Returns an iterator over subdivisions of this underlier reference, ordered from LSB to MSB.
Source§fn slice_iter(
slice: &[Self],
) -> impl ExactSizeIterator<Item = F> + Send + Clone + '_
fn slice_iter( slice: &[Self], ) -> impl ExactSizeIterator<Item = F> + Send + Clone + '_
Returns an iterator over subdivisions of a slice of underliers, ordered from LSB to MSB.
Source§unsafe fn get_unchecked(&self, index: usize) -> F
unsafe fn get_unchecked(&self, index: usize) -> F
Get element at index (LSB-first ordering) without bounds checking. Read more
Source§unsafe fn set_unchecked(&mut self, index: usize, val: F)
unsafe fn set_unchecked(&mut self, index: usize, val: F)
Set element at index (LSB-first ordering) in place, without bounds checking. Read more
Source§impl<F, PSub, const N: usize> FieldOps for SlicedPackedField<F, PSub, N>where
F: ExtensionField<PSub::Scalar>,
PSub: PackedField,
Self: Square + InvertOrZero + Mul<Output = Self>,
impl<F, PSub, const N: usize> FieldOps for SlicedPackedField<F, PSub, N>where
F: ExtensionField<PSub::Scalar>,
PSub: PackedField,
Self: Square + InvertOrZero + Mul<Output = Self>,
type Scalar = F
Source§fn square_transpose<FSub: Field>(elems: &mut [Self])where
F: ExtensionField<FSub>,
fn square_transpose<FSub: Field>(elems: &mut [Self])where
F: ExtensionField<FSub>,
Transpose the subfield elements in a slice of field elements. Read more
Source§impl<F, PSub, const N: usize> Maskable<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> Maskable<F> for SlicedPackedField<F, PSub, N>
Source§fn make_mask(selectors: impl Iterator<Item = bool>) -> Self::Mask
fn make_mask(selectors: impl Iterator<Item = bool>) -> Self::Mask
Builds a mask from per-lane boolean selectors, in LSB-to-MSB lane order (the same ordering
as
Divisible). Consumes at most Divisible::N selectors; any lane past the end of the
iterator, or whose selector is false, is not selected.Source§impl<F, PSub: PackedField, const N: usize> Mul<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>where
Self: Mul<Output = Self>,
impl<F, PSub: PackedField, const N: usize> Mul<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>where
Self: Mul<Output = Self>,
Source§impl<F, PSub, const N: usize> Mul<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> Mul<F> for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Mul for SlicedPackedField<F, PSub, N>where
Self: WideMul,
impl<F, PSub: PackedField, const N: usize> Mul for SlicedPackedField<F, PSub, N>where
Self: WideMul,
Source§impl<F, PSub: PackedField, const N: usize> MulAssign<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>where
Self: Mul<Output = Self>,
impl<F, PSub: PackedField, const N: usize> MulAssign<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>where
Self: Mul<Output = Self>,
Source§fn mul_assign(&mut self, rhs: &Self)
fn mul_assign(&mut self, rhs: &Self)
Performs the
*= operation. Read moreSource§impl<F, PSub, const N: usize> MulAssign<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> MulAssign<F> for SlicedPackedField<F, PSub, N>
Source§fn mul_assign(&mut self, rhs: F)
fn mul_assign(&mut self, rhs: F)
Performs the
*= operation. Read moreSource§impl<F, PSub: PackedField, const N: usize> MulAssign for SlicedPackedField<F, PSub, N>where
Self: Mul<Output = Self>,
impl<F, PSub: PackedField, const N: usize> MulAssign for SlicedPackedField<F, PSub, N>where
Self: Mul<Output = Self>,
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the
*= operation. Read moreSource§impl<F, PSub: PackedField, const N: usize> Neg for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Neg for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub, const N: usize> PackedField for SlicedPackedField<F, PSub, N>where
F: ExtensionField<PSub::Scalar>,
PSub: PackedField,
Self: Square + InvertOrZero + Mul<Output = Self> + WideMul<Output: Debug + Send + Sync + 'static>,
impl<F, PSub, const N: usize> PackedField for SlicedPackedField<F, PSub, N>where
F: ExtensionField<PSub::Scalar>,
PSub: PackedField,
Self: Square + InvertOrZero + Mul<Output = Self> + WideMul<Output: Debug + Send + Sync + 'static>,
Source§fn interleave(self, other: Self, log_block_len: usize) -> (Self, Self)
fn interleave(self, other: Self, log_block_len: usize) -> (Self, Self)
Interleaves blocks of this packed vector with another packed vector. Read more
Source§fn unzip(self, other: Self, log_block_len: usize) -> (Self, Self)
fn unzip(self, other: Self, log_block_len: usize) -> (Self, Self)
Unzips interleaved blocks of this packed vector with another packed vector. Read more
Source§fn from_fn(f: impl FnMut(usize) -> Self::Scalar) -> Self
fn from_fn(f: impl FnMut(usize) -> Self::Scalar) -> Self
Construct a packed field element from a function that returns scalar values by index.
Source§unsafe fn spread_unchecked(self, log_block_len: usize, block_idx: usize) -> Self
unsafe fn spread_unchecked(self, log_block_len: usize, block_idx: usize) -> Self
Unsafe version of
Self::spread. Read moreSource§const LOG_WIDTH: usize = _
const LOG_WIDTH: usize = _
Base-2 logarithm of the number of field elements packed into one packed element. Read more
fn into_iter(self) -> impl Iterator<Item = Self::Scalar> + Send + Clone
fn iter(&self) -> impl Iterator<Item = Self::Scalar> + Send + Clone + '_
fn iter_slice( slice: &[Self], ) -> impl Iterator<Item = Self::Scalar> + Send + Clone + '_
Source§fn set_single(scalar: Self::Scalar) -> Self
fn set_single(scalar: Self::Scalar) -> Self
Initialize zero position with
scalar, set other elements to zero.Source§fn from_scalars(values: impl IntoIterator<Item = Self::Scalar>) -> Self
fn from_scalars(values: impl IntoIterator<Item = Self::Scalar>) -> Self
Construct a packed field element from a sequence of scalars. Read more
Source§impl<'a, F, PSub: PackedField, const N: usize> Product<&'a SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
impl<'a, F, PSub: PackedField, const N: usize> Product<&'a SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Product for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Product for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Sub<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Sub<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub, const N: usize> Sub<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> Sub<F> for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Sub for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Sub for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> SubAssign<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> SubAssign<&SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
Source§fn sub_assign(&mut self, rhs: &Self)
fn sub_assign(&mut self, rhs: &Self)
Performs the
-= operation. Read moreSource§impl<F, PSub, const N: usize> SubAssign<F> for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> SubAssign<F> for SlicedPackedField<F, PSub, N>
Source§fn sub_assign(&mut self, rhs: F)
fn sub_assign(&mut self, rhs: F)
Performs the
-= operation. Read moreSource§impl<F, PSub: PackedField, const N: usize> SubAssign for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> SubAssign for SlicedPackedField<F, PSub, N>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the
-= operation. Read moreSource§impl<'a, F, PSub: PackedField, const N: usize> Sum<&'a SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
impl<'a, F, PSub: PackedField, const N: usize> Sum<&'a SlicedPackedField<F, PSub, N>> for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: PackedField, const N: usize> Sum for SlicedPackedField<F, PSub, N>
impl<F, PSub: PackedField, const N: usize> Sum for SlicedPackedField<F, PSub, N>
Source§impl<F, PSub: Zeroable, const N: usize> Zeroable for SlicedPackedField<F, PSub, N>
impl<F, PSub: Zeroable, const N: usize> Zeroable for SlicedPackedField<F, PSub, N>
impl<F, PSub: Copy, const N: usize> Copy for SlicedPackedField<F, PSub, N>
impl<F, PSub: Eq, const N: usize> Eq for SlicedPackedField<F, PSub, N>
Auto Trait Implementations§
impl<F, PSub, const N: usize> Freeze for SlicedPackedField<F, PSub, N>where
PSub: Freeze,
impl<F, PSub, const N: usize> RefUnwindSafe for SlicedPackedField<F, PSub, N>where
PSub: RefUnwindSafe,
F: RefUnwindSafe,
impl<F, PSub, const N: usize> Send for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> Sync for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> Unpin for SlicedPackedField<F, PSub, N>
impl<F, PSub, const N: usize> UnsafeUnpin for SlicedPackedField<F, PSub, N>where
PSub: UnsafeUnpin,
impl<F, PSub, const N: usize> UnwindSafe for SlicedPackedField<F, PSub, N>where
PSub: UnwindSafe,
F: UnwindSafe,
Blanket Implementations§
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,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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