ExtensionField

Trait ExtensionField 

Source
pub trait ExtensionField<F: Field>:
    Field
    + From<F>
    + TryInto<F>
    + Add<F, Output = Self>
    + Sub<F, Output = Self>
    + Mul<F, Output = Self>
    + AddAssign<F>
    + SubAssign<F>
    + MulAssign<F> {
    const LOG_DEGREE: usize;
    const DEGREE: usize = _;

    // Required methods
    fn basis(i: usize) -> Self;
    fn from_bases_sparse(
        base_elems: impl IntoIterator<Item = F>,
        log_stride: usize,
    ) -> Self;
    fn iter_bases(&self) -> impl Iterator<Item = F>;
    fn into_iter_bases(self) -> impl Iterator<Item = F>;
    unsafe fn get_base_unchecked(&self, i: usize) -> F;
    fn square_transpose(values: &mut [Self]);

    // Provided methods
    fn from_bases(base_elems: impl IntoIterator<Item = F>) -> Self { ... }
    fn get_base(&self, i: usize) -> F { ... }
}

Required Associated Constants§

Source

const LOG_DEGREE: usize

Base-2 logarithm of the extension degree.

Provided Associated Constants§

Source

const DEGREE: usize = _

Extension degree.

DEGREE is guaranteed to equal 2^LOG_DEGREE.

Required Methods§

Source

fn basis(i: usize) -> Self

For 0 <= i < DEGREE, returns i-th basis field element.

§Preconditions
  • i must be in the range [0, Self::DEGREE).
Source

fn from_bases_sparse( base_elems: impl IntoIterator<Item = F>, log_stride: usize, ) -> Self

A specialized version of from_bases which assumes that only base field elements with indices dividing 2^log_stride can be nonzero.

base_elems should have length at most ceil(DEGREE / 2^LOG_STRIDE). Note that ExtensionField::from_bases is a special case of from_bases_sparse with log_stride = 0.

§Preconditions
  • log_stride must be at most LOG_DEGREE.
  • base_elems must have at most ceil(DEGREE / 2^log_stride) elements.
Source

fn iter_bases(&self) -> impl Iterator<Item = F>

Iterator over base field elements.

Source

fn into_iter_bases(self) -> impl Iterator<Item = F>

Convert into an iterator over base field elements.

Source

unsafe fn get_base_unchecked(&self, i: usize) -> F

Returns the i-th base field element without bounds checking.

§Safety

i must be less than DEGREE.

Source

fn square_transpose(values: &mut [Self])

Transpose square block of subfield elements within values in place.

§Preconditions
  • values.len() must equal DEGREE.

Provided Methods§

Source

fn from_bases(base_elems: impl IntoIterator<Item = F>) -> Self

Create an extension field element from a slice of base field elements in order consistent with basis(i) return values. Potentially faster than taking an inner product with a vector of basis elements.

§Preconditions
  • base_elems must have at most DEGREE elements.
Source

fn get_base(&self, i: usize) -> F

Returns the i-th base field element.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§