Skip to main content

BinaryField16

Struct BinaryField16 

Source
pub struct BinaryField16(/* private fields */);
Expand description

The binary tower field GF(2^16).

A quadratic extension of BinaryField8 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 BinaryField16

Source

pub fn from_le_bytes(bytes: [u8; 2]) -> 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 BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField8> for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField16> for BinaryField8

Source§

type Output = BinaryField16

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField16> for BinaryField32

Source§

type Output = BinaryField32

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField16> for BinaryField64

Source§

type Output = BinaryField64

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField16> for BinaryField128

Source§

type Output = BinaryField128

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField16> for Ghash128

Source§

type Output = Ghash128

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField16> for Poly64

Source§

type Output = Poly64

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField16> for Gf2

Source§

type Output = BinaryField16

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField32> for BinaryField16

Source§

type Output = BinaryField32

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField64> for BinaryField16

Source§

type Output = BinaryField64

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<BinaryField128> for BinaryField16

Source§

type Output = BinaryField128

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<Gf2> for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<Ghash128> for BinaryField16

Source§

type Output = Ghash128

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Add<Poly64> for BinaryField16

Source§

type Output = Poly64

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl<T: Into<Self>> AddAssign<T> for BinaryField16

Source§

fn add_assign(&mut self, rhs: T)

Performs the += operation. Read more
Source§

impl Algebra<BinaryField8> for BinaryField16

Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Self
where F: Dup,

Dot product between algebra elements and base field scalars. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl Algebra<BinaryField16> for BinaryField32

Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Self
where F: Dup,

Dot product between algebra elements and base field scalars. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl Algebra<BinaryField16> for BinaryField64

Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Self
where F: Dup,

Dot product between algebra elements and base field scalars. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl Algebra<BinaryField16> for BinaryField128

Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Self
where F: Dup,

Dot product between algebra elements and base field scalars. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl Algebra<BinaryField16> for Ghash128

Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Self
where F: Dup,

Dot product between algebra elements and base field scalars. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl Algebra<BinaryField16> for Poly64

Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Self
where F: Dup,

Dot product between algebra elements and base field scalars. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl Algebra<Gf2> for BinaryField16

Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Self
where F: Dup,

Dot product between algebra elements and base field scalars. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl AlgebraIdentity<BinaryField8> for BinaryField16

Source§

fn algebra_id() -> Vec<u8> ⓘ

Return the stable, unambiguous identifier of the defining relations and basis.
Source§

impl AlgebraIdentity<BinaryField16> for BinaryField32

Source§

fn algebra_id() -> Vec<u8> ⓘ

Return the stable, unambiguous identifier of the defining relations and basis.
Source§

impl AlgebraIdentity<BinaryField16> for BinaryField64

Source§

fn algebra_id() -> Vec<u8> ⓘ

Return the stable, unambiguous identifier of the defining relations and basis.
Source§

impl AlgebraIdentity<BinaryField16> for BinaryField128

Source§

fn algebra_id() -> Vec<u8> ⓘ

Return the stable, unambiguous identifier of the defining relations and basis.
Source§

impl BasedVectorSpace<BinaryField8> for BinaryField16

Source§

fn flatten_to_base(vec: Vec<Self>) -> Vec<BinaryField8>

A whole vector of elements is one contiguous run of coefficients, for the same reason a single element is, so the flattening is a single copy of the buffer.

The inverse direction is not symmetric: a Vec<$lower> is allocated at $lower’s alignment, which is weaker than $upper’s, so freeing it under a Layout whose alignment differs from the one it was made with would be undefined behaviour. reconstitute_from_base below instead copies into a freshly allocated buffer at $upper’s own alignment.

Source§

const DIMENSION: usize

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

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

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: FnMut(usize) -> BinaryField8>(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 more
Source§

fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = BinaryField8>>( 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 more
Source§

fn reconstitute_from_base(vec: Vec<BinaryField8>) -> Vec<Self>

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 BasedVectorSpace<BinaryField16> for BinaryField32

Source§

fn flatten_to_base(vec: Vec<Self>) -> Vec<BinaryField16>

A whole vector of elements is one contiguous run of coefficients, for the same reason a single element is, so the flattening is a single copy of the buffer.

The inverse direction is not symmetric: a Vec<$lower> is allocated at $lower’s alignment, which is weaker than $upper’s, so freeing it under a Layout whose alignment differs from the one it was made with would be undefined behaviour. reconstitute_from_base below instead copies into a freshly allocated buffer at $upper’s own alignment.

Source§

const DIMENSION: usize

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

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

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: FnMut(usize) -> BinaryField16>(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 more
Source§

fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = BinaryField16>>( 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 more
Source§

fn reconstitute_from_base(vec: Vec<BinaryField16>) -> Vec<Self>

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 BasedVectorSpace<BinaryField16> for BinaryField64

Source§

fn flatten_to_base(vec: Vec<Self>) -> Vec<BinaryField16>

A whole vector of elements is one contiguous run of coefficients, for the same reason a single element is, so the flattening is a single copy of the buffer.

The inverse direction is not symmetric: a Vec<$lower> is allocated at $lower’s alignment, which is weaker than $upper’s, so freeing it under a Layout whose alignment differs from the one it was made with would be undefined behaviour. reconstitute_from_base below instead copies into a freshly allocated buffer at $upper’s own alignment.

Source§

const DIMENSION: usize

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

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

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: FnMut(usize) -> BinaryField16>(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 more
Source§

fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = BinaryField16>>( 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 more
Source§

fn reconstitute_from_base(vec: Vec<BinaryField16>) -> Vec<Self>

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 BasedVectorSpace<BinaryField16> for BinaryField128

Source§

fn flatten_to_base(vec: Vec<Self>) -> Vec<BinaryField16>

A whole vector of elements is one contiguous run of coefficients, for the same reason a single element is, so the flattening is a single copy of the buffer.

The inverse direction is not symmetric: a Vec<$lower> is allocated at $lower’s alignment, which is weaker than $upper’s, so freeing it under a Layout whose alignment differs from the one it was made with would be undefined behaviour. reconstitute_from_base below instead copies into a freshly allocated buffer at $upper’s own alignment.

Source§

const DIMENSION: usize

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

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

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: FnMut(usize) -> BinaryField16>(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 more
Source§

fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = BinaryField16>>( 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 more
Source§

fn reconstitute_from_base(vec: Vec<BinaryField16>) -> Vec<Self>

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 Clone for BinaryField16

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for BinaryField16

Source§

impl Debug for BinaryField16

Source§

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

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

impl Default for BinaryField16

Source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for BinaryField16

Source§

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

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

impl Display for BinaryField16

Source§

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

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

impl Distribution<BinaryField16> for StandardUniform

Source§

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

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 Div for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the / operator.
Source§

fn div(self, rhs: BinaryField16) -> Self

Performs the / operation. Read more
Source§

impl DivAssign for BinaryField16

Source§

fn div_assign(&mut self, rhs: BinaryField16)

Performs the /= operation. Read more
Source§

impl Eq for BinaryField16

Source§

impl ExtensionField<BinaryField8> for BinaryField16

Source§

type ExtensionPacking = BinaryField16

Source§

fn is_in_basefield(&self) -> bool

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

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

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

fn from_ext_basis_coefficients(coeffs: &[Self]) -> Option<Self>

Reassemble an element of Self from D = DIMENSION coefficients in Self via Σⱼ basisⱼ · coeffsⱼ. Returns None if coeffs.len() != Self::DIMENSION. Read more
Source§

impl ExtensionField<BinaryField16> for BinaryField32

Source§

type ExtensionPacking = BinaryField32

Source§

fn is_in_basefield(&self) -> bool

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

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

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

fn from_ext_basis_coefficients(coeffs: &[Self]) -> Option<Self>

Reassemble an element of Self from D = DIMENSION coefficients in Self via Σⱼ basisⱼ · coeffsⱼ. Returns None if coeffs.len() != Self::DIMENSION. Read more
Source§

impl ExtensionField<BinaryField16> for BinaryField64

Source§

type ExtensionPacking = BinaryField64

Source§

fn is_in_basefield(&self) -> bool

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

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

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

fn from_ext_basis_coefficients(coeffs: &[Self]) -> Option<Self>

Reassemble an element of Self from D = DIMENSION coefficients in Self via Σⱼ basisⱼ · coeffsⱼ. Returns None if coeffs.len() != Self::DIMENSION. Read more
Source§

impl ExtensionField<BinaryField16> for BinaryField128

Source§

type ExtensionPacking = BinaryField128

Source§

fn is_in_basefield(&self) -> bool

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

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

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

fn from_ext_basis_coefficients(coeffs: &[Self]) -> Option<Self>

Reassemble an element of Self from D = DIMENSION coefficients in Self via Σⱼ basisⱼ · coeffsⱼ. Returns None if coeffs.len() != Self::DIMENSION. Read more
Source§

impl Field for BinaryField16

Source§

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.

Source§

fn bits() -> usize

An element of GF(2^n) is exactly n bits wide.

Source§

const GENERATOR: Self

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

type Packing = BinaryField16

Source§

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

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

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

A square root of this field element, if one exists. Read more
Source§

fn order() -> BigUint

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

const BENEFITS_FROM_LOCKSTEP_EVALUATION: bool = false

Whether evaluating multiple packed vectors of this field in lockstep (to overlap independent dependency chains and hide packed-multiplication latency) is expected to help throughput for this 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 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])>,

Accumulate acc[c * N + j] += scales[j] * row[c] over a stream of packed rows. Read more
Source§

impl From<BinaryField8> for BinaryField16

Source§

fn from(x: BinaryField8) -> Self

The lower level occupies the low BITS bits; the other coefficients vanish.

Source§

impl From<BinaryField16> for BinaryField32

Source§

fn from(x: BinaryField16) -> Self

The lower level occupies the low BITS bits; the other coefficients vanish.

Source§

impl From<BinaryField16> for BinaryField64

Source§

fn from(x: BinaryField16) -> Self

The lower level occupies the low BITS bits; the other coefficients vanish.

Source§

impl From<BinaryField16> for BinaryField128

Source§

fn from(x: BinaryField16) -> Self

The lower level occupies the low BITS bits; the other coefficients vanish.

Source§

impl From<BinaryField16> for Ghash128

Source§

fn from(x: BinaryField16) -> Self

Converts to this type from the input type.
Source§

impl From<BinaryField16> for Poly64

Source§

fn from(x: BinaryField16) -> Self

Converts to this type from the input type.
Source§

impl From<Gf2> for BinaryField16

Source§

fn from(x: Gf2) -> Self

GF(2) is the prime subfield of every level, embedded as {ZERO, ONE}.

Source§

impl HasFrobenius<BinaryField8> for BinaryField16

Source§

fn frobenius(&self) -> Self

x ↦ x^n for n = 2^BITS the order of the base field.

Source§

fn repeated_frobenius(&self, count: usize) -> Self

Apply the Frobenius automorphism count times. Read more
Source§

fn pseudo_inv(&self) -> Self

Computes the pseudo inverse of the given field element. Read more
Source§

fn galois_orbit(self) -> Vec<Self>

Returns the full Galois orbit of the element under Frobenius. Read more
Source§

impl HasFrobenius<BinaryField16> for BinaryField32

Source§

fn frobenius(&self) -> Self

x ↦ x^n for n = 2^BITS the order of the base field.

Source§

fn repeated_frobenius(&self, count: usize) -> Self

Apply the Frobenius automorphism count times. Read more
Source§

fn pseudo_inv(&self) -> Self

Computes the pseudo inverse of the given field element. Read more
Source§

fn galois_orbit(self) -> Vec<Self>

Returns the full Galois orbit of the element under Frobenius. Read more
Source§

impl HasFrobenius<BinaryField16> for BinaryField64

Source§

fn frobenius(&self) -> Self

x ↦ x^n for n = 2^BITS the order of the base field.

Source§

fn repeated_frobenius(&self, count: usize) -> Self

Apply the Frobenius automorphism count times. Read more
Source§

fn pseudo_inv(&self) -> Self

Computes the pseudo inverse of the given field element. Read more
Source§

fn galois_orbit(self) -> Vec<Self>

Returns the full Galois orbit of the element under Frobenius. Read more
Source§

impl HasFrobenius<BinaryField16> for BinaryField128

Source§

fn frobenius(&self) -> Self

x ↦ x^n for n = 2^BITS the order of the base field.

Source§

fn repeated_frobenius(&self, count: usize) -> Self

Apply the Frobenius automorphism count times. Read more
Source§

fn pseudo_inv(&self) -> Self

Computes the pseudo inverse of the given field element. Read more
Source§

fn galois_orbit(self) -> Vec<Self>

Returns the full Galois orbit of the element under Frobenius. Read more
Source§

impl Hash for BinaryField16

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 Mul for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField8> for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField16> for BinaryField8

Source§

type Output = BinaryField16

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField16> for BinaryField32

Source§

type Output = BinaryField32

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField16> for BinaryField64

Source§

type Output = BinaryField64

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField16> for BinaryField128

Source§

type Output = BinaryField128

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField16> for Ghash128

Source§

type Output = Ghash128

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField16> for Poly64

Source§

type Output = Poly64

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField16> for Gf2

Source§

type Output = BinaryField16

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField32> for BinaryField16

Source§

type Output = BinaryField32

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField64> for BinaryField16

Source§

type Output = BinaryField64

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<BinaryField128> for BinaryField16

Source§

type Output = BinaryField128

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<Gf2> for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<Ghash128> for BinaryField16

Source§

type Output = Ghash128

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl Mul<Poly64> for BinaryField16

Source§

type Output = Poly64

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl<T: Into<Self>> MulAssign<T> for BinaryField16

Source§

fn mul_assign(&mut self, rhs: T)

Performs the *= operation. Read more
Source§

impl Neg for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the - operator.
Source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
Source§

impl Ord for BinaryField16

Source§

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

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

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

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

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

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

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

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

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl Packable for BinaryField16

Source§

impl PackedFieldExtension<BinaryField8, BinaryField16> for BinaryField16

A tower level packs one element per vector, so every lane index is 0.

Source§

fn from_ext_fn(f: impl Fn(usize) -> Self) -> Self

Construct a packed extension by applying f to each lane. Read more
Source§

fn from_ext_slice(slice: &[Self]) -> Self

Pack a length-WIDTH slice of extension field elements into one packed extension. Read more
Source§

fn extract(&self, lane: usize) -> Self

Extract the extension field element at the given SIMD lane.
Source§

fn add_assign_lane(&mut self, lane: usize, value: Self)

Accumulate value into a single SIMD lane, leaving the other W - 1 lanes unchanged. Read more
Source§

fn packed_ext_powers(base: Self) -> Powers<Self> ⓘ

Similar to packed_powers, construct an iterator which returns powers of base packed into PackedFieldExtension elements.
Source§

fn pack_ext_columns<const N: usize>(rows: &[[ExtField; N]]) -> [Self; N]

Pack N columns from W rows of extension field elements into N packed extensions. Read more
Source§

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

fn to_ext_slice(&self, out: &mut [ExtField])

Write all W lanes into the given slice. Read more
Source§

fn unpack_ext_into<const N: usize>( packed: &[Self; N], rows: &mut [[ExtField; N]], )

Unpack N packed extensions into W rows of N extension elements. Read more
Source§

fn unpack_ext_iter<const N: usize>( packed: [Self; N], ) -> impl Iterator<Item = [ExtField; N]>

Source§

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§

fn unpack_transpose_into(src: &[Self], dst: &mut [ExtField], src_width: usize)

Unpacks a packed row-major matrix into its scalar transpose, in one pass. Read more
Source§

fn packed_ext_powers_capped( base: ExtField, unpacked_len: usize, ) -> impl Iterator<Item = Self>

Similar to packed_ext_powers but only returns unpacked_len powers of base. Read more
Source§

impl PackedFieldExtension<BinaryField16, BinaryField32> for BinaryField32

A tower level packs one element per vector, so every lane index is 0.

Source§

fn from_ext_fn(f: impl Fn(usize) -> Self) -> Self

Construct a packed extension by applying f to each lane. Read more
Source§

fn from_ext_slice(slice: &[Self]) -> Self

Pack a length-WIDTH slice of extension field elements into one packed extension. Read more
Source§

fn extract(&self, lane: usize) -> Self

Extract the extension field element at the given SIMD lane.
Source§

fn add_assign_lane(&mut self, lane: usize, value: Self)

Accumulate value into a single SIMD lane, leaving the other W - 1 lanes unchanged. Read more
Source§

fn packed_ext_powers(base: Self) -> Powers<Self> ⓘ

Similar to packed_powers, construct an iterator which returns powers of base packed into PackedFieldExtension elements.
Source§

fn pack_ext_columns<const N: usize>(rows: &[[ExtField; N]]) -> [Self; N]

Pack N columns from W rows of extension field elements into N packed extensions. Read more
Source§

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

fn to_ext_slice(&self, out: &mut [ExtField])

Write all W lanes into the given slice. Read more
Source§

fn unpack_ext_into<const N: usize>( packed: &[Self; N], rows: &mut [[ExtField; N]], )

Unpack N packed extensions into W rows of N extension elements. Read more
Source§

fn unpack_ext_iter<const N: usize>( packed: [Self; N], ) -> impl Iterator<Item = [ExtField; N]>

Source§

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§

fn unpack_transpose_into(src: &[Self], dst: &mut [ExtField], src_width: usize)

Unpacks a packed row-major matrix into its scalar transpose, in one pass. Read more
Source§

fn packed_ext_powers_capped( base: ExtField, unpacked_len: usize, ) -> impl Iterator<Item = Self>

Similar to packed_ext_powers but only returns unpacked_len powers of base. Read more
Source§

impl PackedFieldExtension<BinaryField16, BinaryField64> for BinaryField64

A tower level packs one element per vector, so every lane index is 0.

Source§

fn from_ext_fn(f: impl Fn(usize) -> Self) -> Self

Construct a packed extension by applying f to each lane. Read more
Source§

fn from_ext_slice(slice: &[Self]) -> Self

Pack a length-WIDTH slice of extension field elements into one packed extension. Read more
Source§

fn extract(&self, lane: usize) -> Self

Extract the extension field element at the given SIMD lane.
Source§

fn add_assign_lane(&mut self, lane: usize, value: Self)

Accumulate value into a single SIMD lane, leaving the other W - 1 lanes unchanged. Read more
Source§

fn packed_ext_powers(base: Self) -> Powers<Self> ⓘ

Similar to packed_powers, construct an iterator which returns powers of base packed into PackedFieldExtension elements.
Source§

fn pack_ext_columns<const N: usize>(rows: &[[ExtField; N]]) -> [Self; N]

Pack N columns from W rows of extension field elements into N packed extensions. Read more
Source§

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

fn to_ext_slice(&self, out: &mut [ExtField])

Write all W lanes into the given slice. Read more
Source§

fn unpack_ext_into<const N: usize>( packed: &[Self; N], rows: &mut [[ExtField; N]], )

Unpack N packed extensions into W rows of N extension elements. Read more
Source§

fn unpack_ext_iter<const N: usize>( packed: [Self; N], ) -> impl Iterator<Item = [ExtField; N]>

Source§

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§

fn unpack_transpose_into(src: &[Self], dst: &mut [ExtField], src_width: usize)

Unpacks a packed row-major matrix into its scalar transpose, in one pass. Read more
Source§

fn packed_ext_powers_capped( base: ExtField, unpacked_len: usize, ) -> impl Iterator<Item = Self>

Similar to packed_ext_powers but only returns unpacked_len powers of base. Read more
Source§

impl PackedFieldExtension<BinaryField16, BinaryField128> for BinaryField128

A tower level packs one element per vector, so every lane index is 0.

Source§

fn from_ext_fn(f: impl Fn(usize) -> Self) -> Self

Construct a packed extension by applying f to each lane. Read more
Source§

fn from_ext_slice(slice: &[Self]) -> Self

Pack a length-WIDTH slice of extension field elements into one packed extension. Read more
Source§

fn extract(&self, lane: usize) -> Self

Extract the extension field element at the given SIMD lane.
Source§

fn add_assign_lane(&mut self, lane: usize, value: Self)

Accumulate value into a single SIMD lane, leaving the other W - 1 lanes unchanged. Read more
Source§

fn packed_ext_powers(base: Self) -> Powers<Self> ⓘ

Similar to packed_powers, construct an iterator which returns powers of base packed into PackedFieldExtension elements.
Source§

fn pack_ext_columns<const N: usize>(rows: &[[ExtField; N]]) -> [Self; N]

Pack N columns from W rows of extension field elements into N packed extensions. Read more
Source§

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

fn to_ext_slice(&self, out: &mut [ExtField])

Write all W lanes into the given slice. Read more
Source§

fn unpack_ext_into<const N: usize>( packed: &[Self; N], rows: &mut [[ExtField; N]], )

Unpack N packed extensions into W rows of N extension elements. Read more
Source§

fn unpack_ext_iter<const N: usize>( packed: [Self; N], ) -> impl Iterator<Item = [ExtField; N]>

Source§

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§

fn unpack_transpose_into(src: &[Self], dst: &mut [ExtField], src_width: usize)

Unpacks a packed row-major matrix into its scalar transpose, in one pass. Read more
Source§

fn packed_ext_powers_capped( base: ExtField, unpacked_len: usize, ) -> impl Iterator<Item = Self>

Similar to packed_ext_powers but only returns unpacked_len powers of base. Read more
Source§

impl PartialEq for BinaryField16

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl PartialOrd for BinaryField16

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 (const: unstable) · 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 (const: unstable) · 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 (const: unstable) · 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 (const: unstable) · 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 PrimeCharacteristicRing for BinaryField16

Source§

fn halve(&self) -> Self

§Panics

Always panics: 2 is not invertible in characteristic 2.

Source§

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

§Panics

Always panics: 2 is not invertible in characteristic 2.

Source§

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§

const ZERO: Self

The additive identity of the ring. Read more
Source§

const ONE: Self

The multiplicative identity of the ring. Read more
Source§

const TWO: Self

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

const NEG_ONE: Self

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

type PrimeSubfield = Gf2

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

fn from_prime_subfield(f: Self::PrimeSubfield) -> Self

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

fn from_bool(b: bool) -> Self

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

fn double(&self) -> Self

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

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

Computes the arithmetic generalization of boolean xor. 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 square(&self) -> Self

The elementary function square(a) = a^2. 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 dot_product<const N: usize>(u: &[Self; N], v: &[Self; N]) -> Self

Compute the dot product of two vectors. 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 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 cube(&self) -> Self

The elementary function cube(a) = a^3. 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 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 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§

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§

impl Product for BinaryField16

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 RawDataSerializable for BinaryField16

Source§

const NUM_BYTES: usize

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; 2]

Convert a field element into a collection of bytes.
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_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_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§

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

impl Serialize for BinaryField16

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

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

impl StructuralPartialEq for BinaryField16

Source§

impl Sub for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField8> for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField16> for BinaryField8

Source§

type Output = BinaryField16

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField16> for BinaryField32

Source§

type Output = BinaryField32

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField16> for BinaryField64

Source§

type Output = BinaryField64

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField16> for BinaryField128

Source§

type Output = BinaryField128

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField16> for Ghash128

Source§

type Output = Ghash128

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField16> for Poly64

Source§

type Output = Poly64

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField16> for Gf2

Source§

type Output = BinaryField16

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField32> for BinaryField16

Source§

type Output = BinaryField32

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField64> for BinaryField16

Source§

type Output = BinaryField64

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<BinaryField128> for BinaryField16

Source§

type Output = BinaryField128

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<Gf2> for BinaryField16

Source§

type Output = BinaryField16

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<Ghash128> for BinaryField16

Source§

type Output = Ghash128

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl Sub<Poly64> for BinaryField16

Source§

type Output = Poly64

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl<T: Into<Self>> SubAssign<T> for BinaryField16

Source§

fn sub_assign(&mut self, rhs: T)

Performs the -= operation. Read more
Source§

impl Sum for BinaryField16

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 TowerLevel for BinaryField16

Source§

fn mul_alpha(self) -> Self

X·(c0 + c1·X) = c1 + (c0 + α·c1)·X, using X² = αX + 1.

Source§

const LOG_BITS: usize

The k in GF(2^(2^k)).
Source§

type Repr = u16

The backing integer of an element.
Source§

fn from_repr(r: Self::Repr) -> Self

Build an element from a bit pattern, discarding the bits above 2^LOG_BITS.
Source§

fn to_repr(self) -> Self::Repr

The bit pattern of this element, zero above 2^LOG_BITS.
Source§

fn from_le_byte_iter(bytes: impl Iterator<Item = u8>) -> Self

Build an element from the next RawDataSerializable::NUM_BYTES bytes of a little-endian byte stream, discarding the bits above 2^LOG_BITS. Read more
Source§

fn cantor_basis(i: usize) -> Self

The i-th vector of the Cantor basis of this level. Read more
Source§

impl TranscriptField for BinaryField16

Source§

fn algebra_tag(degree: usize, basis: [u8; 32]) -> TypeTag

Stable identity of an algebra with degree coefficients over this field. basis is Keccak-256 of its p3_field::AlgebraIdentity bytes and must be included unchanged in the returned tag.
Source§

fn observe_seed<C: CanObserve<Self>>(challenger: &mut C, bytes: &[u8])

Absorb a byte string injectively into this field’s sponge alphabet.
Source§

fn wire_len() -> usize

Byte length of the canonical encoding of one element.
Source§

fn encode(value: &Self, out: &mut Vec<u8>)

Append exactly Self::wire_len() bytes identifying this element uniquely.
Source§

fn decode(bytes: &[u8]) -> Result<Self, TranscriptError>

Decode the first Self::wire_len() bytes, rejecting short or noncanonical inputs.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<R> Algebra<R> for R

Source§

fn mixed_dot_product<const N: usize>(a: &[R; N], f: &[R; N]) -> R

Dot product between algebra elements and base field scalars. Read more
Source§

fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]

Square a[0] + a[1] X modulo X^2 - w. Read more
Source§

const BATCHED_LC_CHUNK: usize = 8

Optimal chunk size for batched_linear_combination. Read more
Source§

fn batched_linear_combination(values: &[Self], coeffs: &[F]) -> Self
where F: Dup,

Runtime-length linear combination: Σ values[i] * coeffs[i]. Read more
Source§

impl<F> AlgebraIdentity<F> for F

Source§

fn algebra_id() -> Vec<u8> ⓘ

Return the stable, unambiguous identifier of the defining relations and basis.
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 = 1

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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> Dup for T
where T: Copy + Clone,

Source§

fn dup(&self) -> T

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§

fn from_ext_basis_coefficients(coeffs: &[F]) -> Option<F>

Reassemble an element of Self from D = DIMENSION coefficients in Self via Σⱼ basisⱼ · coeffsⱼ. Returns None if coeffs.len() != Self::DIMENSION. Read more
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 coeffwise_dot_product<'a, I>(d: usize, pairs: I) -> [Self; 8]
where Self: 'a, I: Iterator<Item = (&'a [Self], Self)>,

Accumulate the products of d coefficient streams against a shared stream of packed base values. 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 = 1

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 broadcast(value: Self::Value) -> Self

Create a packed value with all lanes set to the same scalar value.
Source§

fn extract(&self, lane: usize) -> Self::Value

Extract the scalar value at the given SIMD lane. Read more
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_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(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_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§

fn pack_columns<const N: usize>(rows: &[[Self::Value; N]]) -> [Self; N]

Pack columns from WIDTH rows of scalar values into N packed values. Read more
Source§

fn pack_columns_fn<const N: usize>( row_fn: impl Fn(usize) -> [Self::Value; N], ) -> [Self; N]

Pack columns using a closure that provides each row’s data. Read more
Source§

fn unpack_into<const N: usize>( packed: &[Self; N], rows: &mut [[Self::Value; N]], )

Unpack N packed values into WIDTH rows of N scalars. Read more
Source§

fn unpack_iter<const N: usize>( packed: [Self; N], ) -> impl Iterator<Item = [Self::Value; N]>

Unpack N packed values into an iterator of WIDTH rows. Read more
Source§

impl<T> SpongePaddingValue for T

Source§

const PAD_ZERO: T = Self::ZERO

The empty-lane value.
Source§

const PAD_ONE: T = Self::ONE

The delimiter value injected after the final absorbed element.
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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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