pub struct BinaryField4(/* private fields */);Expand description
The binary tower field GF(2^4).
A quadratic extension of BinaryField2 generated by a root X of
X² + αX + 1, where α is the generator of the level below over the one beneath it.
The low half of the backing integer holds the coefficient of 1, the high half the
coefficient of X.
The serde encoding is canonical: every field element has exactly one valid byte
representation (see the manual Deserialize impl below). #[serde(transparent)]
makes the derived Serialize emit the backing integer itself, which is what that
impl reads back.
Implementations§
Source§impl BinaryField4
impl BinaryField4
Sourcepub fn from_le_bytes(bytes: [u8; 1]) -> Self
pub fn from_le_bytes(bytes: [u8; 1]) -> Self
Construct a field element from its little-endian byte representation.
Every byte string of the right length is a valid input: from_repr masks
any bits above the canonical range.
Trait Implementations§
Source§impl Add for BinaryField4
impl Add for BinaryField4
Source§impl Add<BinaryField4> for Gf2
impl Add<BinaryField4> for Gf2
Source§type Output = BinaryField4
type Output = BinaryField4
+ operator.Source§impl Add<Gf2> for BinaryField4
impl Add<Gf2> for BinaryField4
Source§impl<T: Into<Self>> AddAssign<T> for BinaryField4
impl<T: Into<Self>> AddAssign<T> for BinaryField4
Source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+= operation. Read moreSource§impl Algebra<Gf2> for BinaryField4
impl Algebra<Gf2> for BinaryField4
Source§fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
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,
Source§const BATCHED_LC_CHUNK: usize = 8
const BATCHED_LC_CHUNK: usize = 8
batched_linear_combination. Read moreSource§impl Clone for BinaryField4
impl Clone for BinaryField4
impl Copy for BinaryField4
Source§impl Debug for BinaryField4
impl Debug for BinaryField4
Source§impl Default for BinaryField4
impl Default for BinaryField4
Source§impl<'de> Deserialize<'de> for BinaryField4
impl<'de> Deserialize<'de> for BinaryField4
Source§fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>
Source§impl Display for BinaryField4
impl Display for BinaryField4
Source§impl Distribution<BinaryField4> for StandardUniform
impl Distribution<BinaryField4> for StandardUniform
Source§impl Div for BinaryField4
impl Div for BinaryField4
Source§type Output = BinaryField4
type Output = BinaryField4
/ operator.Source§fn div(self, rhs: BinaryField4) -> Self
fn div(self, rhs: BinaryField4) -> Self
/ operation. Read moreSource§impl DivAssign for BinaryField4
impl DivAssign for BinaryField4
Source§fn div_assign(&mut self, rhs: BinaryField4)
fn div_assign(&mut self, rhs: BinaryField4)
/= operation. Read moreimpl Eq for BinaryField4
Source§impl Field for BinaryField4
impl Field for BinaryField4
Source§fn interpolation_node(i: usize) -> Self
fn interpolation_node(i: usize) -> Self
The enumeration by bit pattern: interpolation_node(i) is the element whose
coefficients over GF(2) are the bits of i. It is injective for i < 2^BITS.
§Panics
Panics if i >= 2^BITS. from_repr masks, so an out-of-range index would
otherwise alias an earlier node in release builds and break an interpolation
argument silently; the check is paid once per node at setup, never in a loop.
type Packing = BinaryField4
Source§fn try_inverse(&self) -> Option<Self>
fn try_inverse(&self) -> Option<Self>
Source§fn try_sqrt(&self) -> Option<Self>
fn try_sqrt(&self) -> Option<Self>
Source§const BENEFITS_FROM_LOCKSTEP_EVALUATION: bool = false
const BENEFITS_FROM_LOCKSTEP_EVALUATION: bool = false
Source§fn is_zero(&self) -> bool
fn is_zero(&self) -> bool
Source§fn is_one(&self) -> bool
fn is_one(&self) -> bool
Source§fn add_slices(slice_1: &mut [Self], slice_2: &[Self])
fn add_slices(slice_1: &mut [Self], slice_2: &[Self])
Source§fn batched_columnwise_dot_product<EF, R, I, const N: usize>(
acc: &mut [<EF as ExtensionField<Self>>::ExtensionPacking],
items: I,
)where
EF: ExtensionField<Self>,
R: Iterator<Item = Self::Packing>,
I: Iterator<Item = (R, [EF; N])>,
fn batched_columnwise_dot_product<EF, R, I, const N: usize>(
acc: &mut [<EF as ExtensionField<Self>>::ExtensionPacking],
items: I,
)where
EF: ExtensionField<Self>,
R: Iterator<Item = Self::Packing>,
I: Iterator<Item = (R, [EF; N])>,
acc[c * N + j] += scales[j] * row[c] over a stream of packed rows. Read moreSource§impl From<Gf2> for BinaryField4
impl From<Gf2> for BinaryField4
Source§impl Hash for BinaryField4
impl Hash for BinaryField4
Source§impl Mul for BinaryField4
impl Mul for BinaryField4
Source§impl Mul<BinaryField4> for Gf2
impl Mul<BinaryField4> for Gf2
Source§type Output = BinaryField4
type Output = BinaryField4
* operator.Source§fn mul(self, rhs: BinaryField4) -> BinaryField4
fn mul(self, rhs: BinaryField4) -> BinaryField4
* operation. Read moreSource§impl Mul<Gf2> for BinaryField4
impl Mul<Gf2> for BinaryField4
Source§impl<T: Into<Self>> MulAssign<T> for BinaryField4
impl<T: Into<Self>> MulAssign<T> for BinaryField4
Source§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*= operation. Read moreSource§impl Neg for BinaryField4
impl Neg for BinaryField4
Source§impl Ord for BinaryField4
impl Ord for BinaryField4
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
impl Packable for BinaryField4
Source§impl PartialEq for BinaryField4
impl PartialEq for BinaryField4
Source§impl PartialOrd for BinaryField4
impl PartialOrd for BinaryField4
Source§impl PrimeCharacteristicRing for BinaryField4
impl PrimeCharacteristicRing for BinaryField4
Source§fn div_2exp_u64(&self, _exp: u64) -> Self
fn div_2exp_u64(&self, _exp: u64) -> Self
§Panics
Always panics: 2 is not invertible in characteristic 2.
Source§fn bool_check(&self) -> Self
fn bool_check(&self) -> Self
x·(x - 1) = x² - x = x² + x in characteristic 2, and squaring is a linear
map here, so this avoids the tower/polynomial basis changes a general product
pays for.
Source§type PrimeSubfield = Gf2
type PrimeSubfield = Gf2
ℤ/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 xor(&self, y: &Self) -> Self
fn xor(&self, y: &Self) -> Self
xor. Read moreSource§fn mul_2exp_u64(&self, exp: u64) -> Self
fn mul_2exp_u64(&self, exp: u64) -> Self
mul_2exp_u64(a, exp) = a * 2^{exp}. Read moreSource§fn exp_power_of_2(&self, power_log: usize) -> Self
fn exp_power_of_2(&self, power_log: usize) -> Self
exp_power_of_2(a, power_log) = a^{2^power_log}. Read moreSource§fn dot_product<const N: usize>(u: &[Self; N], v: &[Self; N]) -> Self
fn dot_product<const N: usize>(u: &[Self; N], v: &[Self; N]) -> Self
Source§fn zero_vec(len: usize) -> Vec<Self>
fn zero_vec(len: usize) -> Vec<Self>
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 xor3(&self, y: &Self, z: &Self) -> Self
fn xor3(&self, y: &Self, z: &Self) -> Self
xor. Read moreSource§fn exp_const_u64<const POWER: u64>(&self) -> Self
fn exp_const_u64<const POWER: u64>(&self) -> Self
Source§fn powers(&self) -> Powers<Self> ⓘ
fn powers(&self) -> Powers<Self> ⓘ
self: self^0, self^1, self^2, ....Source§fn shifted_powers(&self, start: Self) -> Powers<Self> ⓘ
fn shifted_powers(&self, start: Self) -> Powers<Self> ⓘ
self shifted by start: start, start*self^1, start*self^2, ....Source§impl Product for BinaryField4
impl Product for BinaryField4
Source§impl RawDataSerializable for BinaryField4
impl RawDataSerializable for BinaryField4
Source§const NUM_BYTES: usize
const NUM_BYTES: usize
Source§fn into_bytes(self) -> [u8; 1]
fn into_bytes(self) -> [u8; 1]
Source§fn into_parallel_byte_streams<const N: usize>(
input: impl IntoIterator<Item = [Self; N]>,
) -> impl IntoIterator<Item = [u8; N]>
fn into_parallel_byte_streams<const N: usize>( input: impl IntoIterator<Item = [Self; N]>, ) -> impl IntoIterator<Item = [u8; N]>
Source§fn into_u64_stream(
input: impl IntoIterator<Item = Self>,
) -> impl IntoIterator<Item = u64>
fn into_u64_stream( input: impl IntoIterator<Item = Self>, ) -> impl IntoIterator<Item = u64>
Source§fn into_parallel_u64_streams<const N: usize>(
input: impl IntoIterator<Item = [Self; N]>,
) -> impl IntoIterator<Item = [u64; N]>
fn into_parallel_u64_streams<const N: usize>( input: impl IntoIterator<Item = [Self; N]>, ) -> impl IntoIterator<Item = [u64; N]>
Source§fn into_byte_stream(
input: impl IntoIterator<Item = Self>,
) -> impl IntoIterator<Item = u8>
fn into_byte_stream( input: impl IntoIterator<Item = Self>, ) -> impl IntoIterator<Item = u8>
Source§fn into_u32_stream(
input: impl IntoIterator<Item = Self>,
) -> impl IntoIterator<Item = u32>
fn into_u32_stream( input: impl IntoIterator<Item = Self>, ) -> impl IntoIterator<Item = u32>
Source§fn into_parallel_u32_streams<const N: usize>(
input: impl IntoIterator<Item = [Self; N]>,
) -> impl IntoIterator<Item = [u32; N]>
fn into_parallel_u32_streams<const N: usize>( input: impl IntoIterator<Item = [Self; N]>, ) -> impl IntoIterator<Item = [u32; N]>
Source§impl Serialize for BinaryField4
impl Serialize for BinaryField4
impl StructuralPartialEq for BinaryField4
Source§impl Sub for BinaryField4
impl Sub for BinaryField4
Source§impl Sub<BinaryField4> for Gf2
impl Sub<BinaryField4> for Gf2
Source§type Output = BinaryField4
type Output = BinaryField4
- operator.Source§impl Sub<Gf2> for BinaryField4
impl Sub<Gf2> for BinaryField4
Source§impl<T: Into<Self>> SubAssign<T> for BinaryField4
impl<T: Into<Self>> SubAssign<T> for BinaryField4
Source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-= operation. Read moreSource§impl Sum for BinaryField4
impl Sum for BinaryField4
Source§impl TowerLevel for BinaryField4
impl TowerLevel for BinaryField4
Source§fn from_repr(r: Self::Repr) -> Self
fn from_repr(r: Self::Repr) -> Self
2^LOG_BITS.Source§fn from_le_byte_iter(bytes: impl Iterator<Item = u8>) -> Self
fn from_le_byte_iter(bytes: impl Iterator<Item = u8>) -> Self
RawDataSerializable::NUM_BYTES bytes of a
little-endian byte stream, discarding the bits above 2^LOG_BITS. Read moreSource§fn cantor_basis(i: usize) -> Self
fn cantor_basis(i: usize) -> Self
i-th vector of the Cantor basis of this level. Read moreAuto Trait Implementations§
impl Freeze for BinaryField4
impl RefUnwindSafe for BinaryField4
impl Send for BinaryField4
impl Sync for BinaryField4
impl Unpin for BinaryField4
impl UnsafeUnpin for BinaryField4
impl UnwindSafe for BinaryField4
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: &[R; N], f: &[R; N]) -> R
fn mixed_dot_product<const N: usize>(a: &[R; N], f: &[R; N]) -> R
Source§fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
Source§const BATCHED_LC_CHUNK: usize = 8
const BATCHED_LC_CHUNK: usize = 8
batched_linear_combination. Read moreSource§impl<F> AlgebraIdentity<F> for Fwhere
F: PrimeCharacteristicRing,
impl<F> AlgebraIdentity<F> for Fwhere
F: PrimeCharacteristicRing,
Source§impl<F> BasedVectorSpace<F> for Fwhere
F: PrimeCharacteristicRing,
impl<F> BasedVectorSpace<F> for Fwhere
F: PrimeCharacteristicRing,
Source§const DIMENSION: usize = 1
const DIMENSION: usize = 1
Source§fn as_basis_coefficients_slice(&self) -> &[F]
fn as_basis_coefficients_slice(&self) -> &[F]
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
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>,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<F> ExtensionField<F> for Fwhere
F: Field,
impl<F> ExtensionField<F> for Fwhere
F: Field,
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> ⓘ
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> ⓘ
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 moreSource§impl<F> PackedField for Fwhere
F: Field,
impl<F> PackedField for Fwhere
F: Field,
type Scalar = F
Source§fn packed_powers(base: Self::Scalar) -> Powers<Self> ⓘ
fn packed_powers(base: Self::Scalar) -> Powers<Self> ⓘ
base packed into packed field elements. Read more