Struct ColMatrix

Source
pub struct ColMatrix<E>
where E: FieldElement,
{ /* private fields */ }
Expand description

A two-dimensional matrix of field elements arranged in column-major order.

This struct is used as a backing type for many objects manipulated by the prover. The matrix itself does not assign any contextual meaning to the values stored in it. For example, columns may contain evaluations of polynomials, or polynomial coefficients, or really anything else. However, the matrix does expose a number of methods which make assumptions about the underlying data.

A matrix imposes the following restrictions on its content:

  • A matrix must consist of at least 1 column and at least 2 rows.
  • All columns must be of the same length.
  • Number of rows must be a power of two.

Implementations§

Source§

impl<E> ColMatrix<E>
where E: FieldElement,

Source

pub fn new(columns: Vec<Vec<E>>) -> ColMatrix<E>

Returns a new [Matrix] instantiated with the data from the specified columns.

§Panics

Panics if:

  • The provided vector of columns is empty.
  • Not all of the columns have the same number of elements.
  • Number of rows is smaller than or equal to 1.
  • Number of rows is not a power of two.
Source

pub fn num_cols(&self) -> usize

Returns the number of columns in this matrix.

Source

pub fn num_base_cols(&self) -> usize

Returns the number of base field columns in this matrix.

The number of base field columns is defined as the number of columns multiplied by the extension degree of field elements contained in this matrix.

Source

pub fn num_rows(&self) -> usize

Returns the number of rows in this matrix.

Source

pub fn get(&self, col_idx: usize, row_idx: usize) -> E

Returns the element located at the specified column and row indexes in this matrix.

§Panics

Panics if either col_idx or row_idx are out of bounds for this matrix.

Source

pub fn get_base_element( &self, base_col_idx: usize, row_idx: usize, ) -> <E as FieldElement>::BaseField

Returns base field elements located at the specified column and row indexes in this matrix.

For STARK fields, base_col_idx is the same as col_idx used in Self::get method. For extension fields, each column in the matrix is viewed as 2 or more columns in the base field.

Thus, for example, if we are in a degree 2 extension field, base_col_idx = 0 would refer to the first base element of the first column, base_col_idx = 1 would refer to the second base element of the first column, base_col_idx = 2 would refer to the first base element of the second column etc.

§Panics

Panics if either base_col_idx or row_idx are out of bounds for this matrix.

Source

pub fn set(&mut self, col_idx: usize, row_idx: usize, value: E)

Set the cell in this matrix at the specified column and row indexes to the provided value.

§Panics

Panics if either col_idx or row_idx are out of bounds for this matrix.

Source

pub fn get_column(&self, col_idx: usize) -> &[E]

Returns a reference to the column at the specified index.

Source

pub fn get_column_mut(&mut self, col_idx: usize) -> &mut [E]

Returns a reference to the column at the specified index.

Source

pub fn read_row_into(&self, row_idx: usize, row: &mut [E])

Copies values of all columns at the specified row into the specified row slice.

§Panics

Panics if row_idx is out of bounds for this matrix.

Source

pub fn update_row(&mut self, row_idx: usize, row: &[E])

Updates a row in this matrix at the specified index to the provided data.

§Panics

Panics if row_idx is out of bounds for this matrix.

Source

pub fn merge_column(&mut self, column: Vec<E>)

Merges a column to the end of the matrix provided its length matches the matrix.

§Panics

Panics if the column has a different length to other columns in the matrix.

Source

pub fn remove_column(&mut self, index: usize) -> Vec<E>

Removes a column of the matrix given its index.

§Panics

Panics if the column index is out of range.

Source

pub fn columns(&self) -> ColumnIter<'_, E>

Returns an iterator over the columns of this matrix.

Source

pub fn columns_mut(&mut self) -> ColumnIterMut<'_, E>

Returns a mutable iterator over the columns of this matrix.

Source

pub fn interpolate_columns(&self) -> ColMatrix<E>

Interpolates columns of the matrix into polynomials in coefficient form and returns the result.

The interpolation is performed as follows:

  • Each column of the matrix is interpreted as evaluations of degree num_rows - 1 polynomial over a subgroup of size num_rows.
  • Then each column is interpolated using iFFT algorithm into a polynomial in coefficient form.
  • The resulting polynomials are returned as a single matrix where each column contains coefficients of a degree num_rows - 1 polynomial.
Source

pub fn interpolate_columns_into(self) -> ColMatrix<E>

Interpolates columns of the matrix into polynomials in coefficient form and returns the result. The input matrix is consumed in the process.

The interpolation is performed as follows:

  • Each column of the matrix is interpreted as evaluations of degree num_rows - 1 polynomial over a subgroup of size num_rows.
  • Then each column is interpolated (in place) using iFFT algorithm into a polynomial in coefficient form.
  • The resulting polynomials are returned as a single matrix where each column contains coefficients of a degree num_rows - 1 polynomial.
Source

pub fn evaluate_columns_over( &self, domain: &StarkDomain<<E as FieldElement>::BaseField>, ) -> ColMatrix<E>

Evaluates polynomials contained in the columns of this matrix over the specified domain and returns the result.

The evaluation is done as follows:

  • Each column of the matrix is interpreted as coefficients of degree num_rows - 1 polynomial.
  • These polynomials are evaluated over the LDE domain defined by the specified StarkDomain using FFT algorithm. The domain specification includes the size of the subgroup as well as the domain offset (to define a coset).
  • The resulting evaluations are returned in a new Matrix.
Source

pub fn evaluate_columns_at<F>(&self, x: F) -> Vec<F>
where F: FieldElement + From<E>,

Evaluates polynomials contained in the columns of this matrix at a single point x.

Source

pub fn commit_to_rows<H, V>(&self) -> V
where H: ElementHasher<BaseField = <E as FieldElement>::BaseField>, V: VectorCommitment<H>,

Returns a commitment to this matrix.

The commitment is built as follows:

  • Each row of the matrix is hashed into a single digest of the specified hash function.
  • The resulting vector of digests is committed to using the specified vector commitment scheme.
  • The resulting commitment is returned as the commitment to the entire matrix.
Source

pub fn into_columns(self) -> Vec<Vec<E>>

Returns the columns of this matrix as a list of vectors.

TODO: replace this with an iterator.

Trait Implementations§

Source§

impl<E> Clone for ColMatrix<E>
where E: Clone + FieldElement,

Source§

fn clone(&self) -> ColMatrix<E>

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<E> Debug for ColMatrix<E>
where E: Debug + FieldElement,

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<E> Freeze for ColMatrix<E>

§

impl<E> RefUnwindSafe for ColMatrix<E>
where E: RefUnwindSafe,

§

impl<E> Send for ColMatrix<E>

§

impl<E> Sync for ColMatrix<E>

§

impl<E> Unpin for ColMatrix<E>
where E: Unpin,

§

impl<E> UnwindSafe for ColMatrix<E>
where E: UnwindSafe,

Blanket Implementations§

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<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> 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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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