pub struct Poly64(/* private fields */);Expand description
The binary field GF(2^64) modulo x^64 + x^4 + x^3 + x + 1.
Bit i stores the coefficient of x^i, and every 64-bit pattern is a distinct element.
One carryless product covers a whole multiplication, against four at 128 bits.
A committed column here is also half the volume of a 128-bit one.
Multiplication, squaring, the square root and inversion here are all table-free.
The change of basis to and from the tower is table-driven, and so is not.
Implementations§
Source§impl Poly64
impl Poly64
Sourcepub fn from_tower_vec(values: Vec<BinaryField64>) -> Vec<Self>
pub fn from_tower_vec(values: Vec<BinaryField64>) -> Vec<Self>
Converts a whole tower-basis table in its existing allocation.
Every entry is the image of the corresponding tower element under the field isomorphism.
Sourcepub const fn new(coordinates: u64) -> Self
pub const fn new(coordinates: u64) -> Self
The element with the given polynomial-basis coordinates.
Bit i is the coefficient of x^i, and every pattern is a valid element.
Sourcepub const fn from_le_bytes(bytes: [u8; 8]) -> Self
pub const fn from_le_bytes(bytes: [u8; 8]) -> Self
Construct a field element from its little-endian byte representation.
Every byte string of this length is a valid element.
Sourcepub fn invert_or_zero(self) -> Self
pub fn invert_or_zero(self) -> Self
The inverse of this element, with zero sent to zero.
The chain runs whatever the operand is, so its cost says nothing about the value.
Trait Implementations§
Source§impl Add<BinaryField8> for Poly64
impl Add<BinaryField8> for Poly64
Source§impl Add<BinaryField16> for Poly64
impl Add<BinaryField16> for Poly64
Source§impl Add<BinaryField32> for Poly64
impl Add<BinaryField32> for Poly64
Source§impl Add<BinaryField64> for Poly64
impl Add<BinaryField64> for Poly64
Source§impl Add<Poly64> for BinaryField8
impl Add<Poly64> for BinaryField8
Source§impl Add<Poly64> for BinaryField16
impl Add<Poly64> for BinaryField16
Source§impl Add<Poly64> for BinaryField32
impl Add<Poly64> for BinaryField32
Source§impl<T: Into<Self>> AddAssign<T> for Poly64
impl<T: Into<Self>> AddAssign<T> for Poly64
Source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+= operation. Read moreSource§impl Algebra<BinaryField8> for Poly64
impl Algebra<BinaryField8> for Poly64
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 Algebra<BinaryField16> for Poly64
impl Algebra<BinaryField16> for Poly64
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 Algebra<BinaryField32> for Poly64
impl Algebra<BinaryField32> for Poly64
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 Algebra<BinaryField64> for Poly64
impl Algebra<BinaryField64> for Poly64
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 Algebra<Gf2> for Poly64
impl Algebra<Gf2> for Poly64
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 Algebra<Poly64> for Poly192
impl Algebra<Poly64> for Poly192
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 AlgebraIdentity<Poly64> for Poly192
impl AlgebraIdentity<Poly64> for Poly192
Source§impl BasedVectorSpace<Poly64> for Poly192
impl BasedVectorSpace<Poly64> for Poly192
Source§fn flatten_to_base(vec: Vec<Self>) -> Vec<Poly64>
fn flatten_to_base(vec: Vec<Self>) -> Vec<Poly64>
A whole vector of elements is one contiguous run of coordinates, so this is a copy.
Source§const DIMENSION: usize = DEGREE
const DIMENSION: usize = DEGREE
Source§fn as_basis_coefficients_slice(&self) -> &[Poly64]
fn as_basis_coefficients_slice(&self) -> &[Poly64]
A and uses this to
map an element of A to a slice of DIMENSION F elements. Read moreSource§fn from_basis_coefficients_fn<F: FnMut(usize) -> Poly64>(f: F) -> Self
fn from_basis_coefficients_fn<F: FnMut(usize) -> Poly64>(f: F) -> Self
A and uses this to
map DIMENSION F elements to an element of A. Similar
to core:array::from_fn, the DIMENSION F elements are
given by Fn(0), ..., Fn(DIMENSION - 1) called in that order. Read moreSource§fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = Poly64>>(
iter: I,
) -> Option<Self>
fn from_basis_coefficients_iter<I: ExactSizeIterator<Item = Poly64>>( iter: I, ) -> Option<Self>
A and uses this to
map DIMENSION F elements to an element of A. Read moreSource§fn from_basis_coefficients_slice(slice: &[F]) -> Option<Self>
fn from_basis_coefficients_slice(slice: &[F]) -> Option<Self>
A and uses this to
map DIMENSION F elements to an element of A. Read moreimpl Copy for Poly64
Source§impl<'de> Deserialize<'de> for Poly64
impl<'de> Deserialize<'de> for Poly64
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Distribution<Poly64> for StandardUniform
impl Distribution<Poly64> for StandardUniform
Source§impl DivAssign for Poly64
impl DivAssign for Poly64
Source§fn div_assign(&mut self, rhs: Poly64)
fn div_assign(&mut self, rhs: Poly64)
/= operation. Read moreSource§impl DivAssign<Poly64> for Poly192
impl DivAssign<Poly64> for Poly192
Source§fn div_assign(&mut self, rhs: Poly64)
fn div_assign(&mut self, rhs: Poly64)
/= operation. Read moreimpl Eq for Poly64
Source§impl ExtensionField<Poly64> for Poly192
impl ExtensionField<Poly64> for Poly192
type ExtensionPacking = Poly192
Source§fn is_in_basefield(&self) -> bool
fn is_in_basefield(&self) -> bool
Source§fn as_base(&self) -> Option<Poly64>
fn as_base(&self) -> Option<Poly64>
Source§fn from_ext_basis_coefficients(coeffs: &[Self]) -> Option<Self>
fn from_ext_basis_coefficients(coeffs: &[Self]) -> Option<Self>
Self from D = DIMENSION coefficients in Self
via Σⱼ basisⱼ · coeffsⱼ. Returns None if coeffs.len() != Self::DIMENSION. Read moreSource§impl Field for Poly64
impl Field for Poly64
Source§fn interpolation_node(i: usize) -> Self
fn interpolation_node(i: usize) -> Self
The enumeration by bit pattern.
The coordinates of the returned element over GF(2) are the bits of the index.
A pointer is never wider than 64 bits, so every index is in range.
type Packing = Poly64
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<BinaryField8> for Poly64
impl From<BinaryField8> for Poly64
Source§fn from(x: BinaryField8) -> Self
fn from(x: BinaryField8) -> Self
Source§impl From<BinaryField16> for Poly64
impl From<BinaryField16> for Poly64
Source§fn from(x: BinaryField16) -> Self
fn from(x: BinaryField16) -> Self
Source§impl From<BinaryField32> for Poly64
impl From<BinaryField32> for Poly64
Source§fn from(x: BinaryField32) -> Self
fn from(x: BinaryField32) -> Self
Source§impl From<BinaryField64> for Poly64
impl From<BinaryField64> for Poly64
Source§fn from(x: BinaryField64) -> Self
fn from(x: BinaryField64) -> Self
The same field element, seen in the polynomial basis.
Source§impl From<Poly64> for BinaryField64
impl From<Poly64> for BinaryField64
Source§impl HasFrobenius<Poly64> for Poly192
impl HasFrobenius<Poly64> for Poly192
Source§fn frobenius(&self) -> Self
fn frobenius(&self) -> Self
The map raising to the size of the coefficient field.
It fixes every coefficient and permutes the basis.
The three roots of the modulus are y, y^2 and y^2 + y, so:
y^(2^64) = y^2
a_0 + a_1 y + a_2 y^2 -> a_0 + a_2 y + (a_1 + a_2) y^2So one application is one addition and a permutation, with no products at all.
Source§fn repeated_frobenius(&self, count: usize) -> Self
fn repeated_frobenius(&self, count: usize) -> Self
count times. Read moreSource§fn pseudo_inv(&self) -> Self
fn pseudo_inv(&self) -> Self
Source§fn galois_orbit(self) -> Vec<Self>
fn galois_orbit(self) -> Vec<Self>
Source§impl Mul<BinaryField8> for Poly64
impl Mul<BinaryField8> for Poly64
Source§impl Mul<BinaryField16> for Poly64
impl Mul<BinaryField16> for Poly64
Source§impl Mul<BinaryField32> for Poly64
impl Mul<BinaryField32> for Poly64
Source§impl Mul<BinaryField64> for Poly64
impl Mul<BinaryField64> for Poly64
Source§impl Mul<Poly64> for BinaryField8
impl Mul<Poly64> for BinaryField8
Source§impl Mul<Poly64> for BinaryField16
impl Mul<Poly64> for BinaryField16
Source§impl Mul<Poly64> for BinaryField32
impl Mul<Poly64> for BinaryField32
Source§impl<T: Into<Self>> MulAssign<T> for Poly64
impl<T: Into<Self>> MulAssign<T> for Poly64
Source§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*= operation. Read moreSource§impl Ord for Poly64
impl Ord for Poly64
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 Poly64
Source§impl PackedFieldExtension<Poly64, Poly192> for Poly192
One element per vector, so every lane index is zero.
impl PackedFieldExtension<Poly64, Poly192> for Poly192
One element per vector, so every lane index is zero.
Source§fn from_ext_fn(f: impl Fn(usize) -> Self) -> Self
fn from_ext_fn(f: impl Fn(usize) -> Self) -> Self
f to each lane. Read moreSource§fn from_ext_slice(slice: &[Self]) -> Self
fn from_ext_slice(slice: &[Self]) -> Self
WIDTH slice of extension field elements into one packed extension. Read moreSource§fn extract(&self, lane: usize) -> Self
fn extract(&self, lane: usize) -> Self
Source§fn add_assign_lane(&mut self, lane: usize, value: Self)
fn add_assign_lane(&mut self, lane: usize, value: Self)
Source§fn packed_ext_powers(base: Self) -> Powers<Self> ⓘ
fn packed_ext_powers(base: Self) -> Powers<Self> ⓘ
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]
fn pack_ext_columns<const N: usize>(rows: &[[ExtField; N]]) -> [Self; N]
Source§fn pack_ext_columns_fn<const N: usize>(
row_fn: impl Fn(usize) -> [ExtField; N],
) -> [Self; N]
fn pack_ext_columns_fn<const N: usize>( row_fn: impl Fn(usize) -> [ExtField; N], ) -> [Self; N]
N columns using a closure that produces each row. Read moreSource§fn to_ext_slice(&self, out: &mut [ExtField])
fn to_ext_slice(&self, out: &mut [ExtField])
W lanes into the given slice. Read moreSource§fn unpack_ext_into<const N: usize>(
packed: &[Self; N],
rows: &mut [[ExtField; N]],
)
fn unpack_ext_into<const N: usize>( packed: &[Self; N], rows: &mut [[ExtField; N]], )
Source§fn unpack_ext_iter<const N: usize>(
packed: [Self; N],
) -> impl Iterator<Item = [ExtField; N]>
fn unpack_ext_iter<const N: usize>( packed: [Self; N], ) -> impl Iterator<Item = [ExtField; N]>
PackedFieldExtension::unpack_ext_into. Read moreSource§fn to_ext_iter(
iter: impl IntoIterator<Item = Self>,
) -> impl Iterator<Item = ExtField>
fn to_ext_iter( iter: impl IntoIterator<Item = Self>, ) -> impl Iterator<Item = ExtField>
ExtField per lane per packed value).Source§fn unpack_transpose_into(src: &[Self], dst: &mut [ExtField], src_width: usize)
fn unpack_transpose_into(src: &[Self], dst: &mut [ExtField], src_width: usize)
Source§impl PartialOrd for Poly64
impl PartialOrd for Poly64
Source§impl PrimeCharacteristicRing for Poly64
impl PrimeCharacteristicRing for Poly64
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§type PrimeSubfield = Gf2
type PrimeSubfield = Gf2
ℤ/p where the characteristic of this ring is p.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_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 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 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 bool_check(&self) -> Self
fn bool_check(&self) -> Self
x * (x - 1). Read moreSource§fn exp_const_u64<const POWER: u64>(&self) -> Self
fn exp_const_u64<const POWER: u64>(&self) -> Self
Source§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 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 RawDataSerializable for Poly64
impl RawDataSerializable for Poly64
Source§const NUM_BYTES: usize = 8
const NUM_BYTES: usize = 8
Source§fn into_bytes(self) -> impl IntoIterator<Item = u8>
fn into_bytes(self) -> impl IntoIterator<Item = u8>
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_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_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_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§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]>
impl StructuralPartialEq for Poly64
Source§impl Sub<BinaryField8> for Poly64
impl Sub<BinaryField8> for Poly64
Source§impl Sub<BinaryField16> for Poly64
impl Sub<BinaryField16> for Poly64
Source§impl Sub<BinaryField32> for Poly64
impl Sub<BinaryField32> for Poly64
Source§impl Sub<BinaryField64> for Poly64
impl Sub<BinaryField64> for Poly64
Source§impl Sub<Poly64> for BinaryField8
impl Sub<Poly64> for BinaryField8
Source§impl Sub<Poly64> for BinaryField16
impl Sub<Poly64> for BinaryField16
Source§impl Sub<Poly64> for BinaryField32
impl Sub<Poly64> for BinaryField32
Source§impl<T: Into<Self>> SubAssign<T> for Poly64
impl<T: Into<Self>> SubAssign<T> for Poly64
Source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-= operation. Read moreSource§impl TowerLevel for Poly64
impl TowerLevel for Poly64
Source§fn mul_alpha(self) -> Self
fn mul_alpha(self) -> Self
The tower scales by a basis vector, which costs it a shift.
Here the same element is an arbitrary one, so it costs a full product.
Source§fn from_le_byte_iter(bytes: impl Iterator<Item = u8>) -> Self
fn from_le_byte_iter(bytes: impl Iterator<Item = u8>) -> Self
§Panics
Panics if the stream ends before a whole element has been read.
Source§fn cantor_basis(i: usize) -> Self
fn cantor_basis(i: usize) -> Self
§Panics
Panics if the index is at least the bit width of the field.
Source§impl TranscriptField for Poly64
impl TranscriptField for Poly64
Source§fn algebra_tag(degree: usize, basis: [u8; 32]) -> TypeTag
fn algebra_tag(degree: usize, basis: [u8; 32]) -> TypeTag
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])
fn observe_seed<C: CanObserve<Self>>(challenger: &mut C, bytes: &[u8])
Auto Trait Implementations§
impl Freeze for Poly64
impl RefUnwindSafe for Poly64
impl Send for Poly64
impl Sync for Poly64
impl Unpin for Poly64
impl UnsafeUnpin for Poly64
impl UnwindSafe for Poly64
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