pub struct DenseMatrix<T, V = Vec<T>> {
pub values: V,
pub width: usize,
/* private fields */
}Expand description
A dense matrix in row-major format, with customizable backing storage.
The data is stored as a flat buffer, where rows are laid out consecutively.
Fields§
§values: VFlat buffer of matrix values in row-major order.
width: usizeNumber of columns in the matrix.
The number of rows is implicitly determined as values.len() / width.
Implementations§
Source§impl<T: Clone + Send + Sync, S: DenseStorage<T>> DenseMatrix<T, S>
impl<T: Clone + Send + Sync, S: DenseStorage<T>> DenseMatrix<T, S>
Sourcepub fn new(values: S, width: usize) -> Self
pub fn new(values: S, width: usize) -> Self
Create a new dense matrix of the given dimensions, backed by the given storage.
§Panics
Panics in debug builds if values.len() % width != 0. Release builds silently
construct a matrix whose row/column indexing is inconsistent with the storage —
callers must validate dimensions before calling.
Sourcepub fn as_view(&self) -> RowMajorMatrixView<'_, T>
pub fn as_view(&self) -> RowMajorMatrixView<'_, T>
Get a view of the matrix, i.e. a reference to the underlying data.
Sourcepub fn as_view_mut(&mut self) -> RowMajorMatrixViewMut<'_, T>
pub fn as_view_mut(&mut self) -> RowMajorMatrixViewMut<'_, T>
Get a mutable view of the matrix, i.e. a mutable reference to the underlying data.
Sourcepub fn copy_from<S2>(&mut self, source: &DenseMatrix<T, S2>)
pub fn copy_from<S2>(&mut self, source: &DenseMatrix<T, S2>)
Copy the values from the given matrix into this matrix.
Sourcepub fn flatten_to_base<F: Field>(self) -> RowMajorMatrix<F>where
T: ExtensionField<F>,
pub fn flatten_to_base<F: Field>(self) -> RowMajorMatrix<F>where
T: ExtensionField<F>,
Flatten an extension field matrix to a base field matrix.
Sourcepub fn row_slices(&self) -> impl DoubleEndedIterator<Item = &[T]>
pub fn row_slices(&self) -> impl DoubleEndedIterator<Item = &[T]>
Get an iterator over the rows of the matrix.
Sourcepub fn par_row_slices(&self) -> impl IndexedParallelIterator<Item = &[T]>where
T: Sync,
pub fn par_row_slices(&self) -> impl IndexedParallelIterator<Item = &[T]>where
T: Sync,
Get a parallel iterator over the rows of the matrix.
Sourcepub fn rows_mut(&mut self) -> impl Iterator<Item = &mut [T]>
pub fn rows_mut(&mut self) -> impl Iterator<Item = &mut [T]>
Get a mutable iterator over the rows of the matrix.
Sourcepub fn par_rows_mut<'a>(
&'a mut self,
) -> impl IndexedParallelIterator<Item = &'a mut [T]>
pub fn par_rows_mut<'a>( &'a mut self, ) -> impl IndexedParallelIterator<Item = &'a mut [T]>
Get a mutable parallel iterator over the rows of the matrix.
Sourcepub fn horizontally_packed_row_mut<P>(
&mut self,
r: usize,
) -> (&mut [P], &mut [T])
pub fn horizontally_packed_row_mut<P>( &mut self, r: usize, ) -> (&mut [P], &mut [T])
Get a mutable iterator over the rows of the matrix which packs the rows into packed values.
If P::WIDTH does not divide self.width, the remainder of the row will be returned as a
base slice.
Sourcepub fn par_scale_row(&mut self, r: usize, scale: T)
pub fn par_scale_row(&mut self, r: usize, scale: T)
Scale the given row by the given value.
§Performance
This function is parallelized, which may introduce some overhead compared to
Self::scale_row when the width is small.
§Panics
Panics if r larger than self.height().
Sourcepub fn split_rows(
&self,
r: usize,
) -> (RowMajorMatrixView<'_, T>, RowMajorMatrixView<'_, T>)
pub fn split_rows( &self, r: usize, ) -> (RowMajorMatrixView<'_, T>, RowMajorMatrixView<'_, T>)
Split the matrix into two matrix views, one with the first r rows and one with the remaining rows.
§Panics
Panics if r larger than self.height().
Sourcepub fn split_rows_mut(
&mut self,
r: usize,
) -> (RowMajorMatrixViewMut<'_, T>, RowMajorMatrixViewMut<'_, T>)
pub fn split_rows_mut( &mut self, r: usize, ) -> (RowMajorMatrixViewMut<'_, T>, RowMajorMatrixViewMut<'_, T>)
Split the matrix into two mutable matrix views, one with the first r rows and one with the remaining rows.
§Panics
Panics if r larger than self.height().
Sourcepub fn par_row_chunks(
&self,
chunk_rows: usize,
) -> impl IndexedParallelIterator<Item = RowMajorMatrixView<'_, T>>where
T: Send,
pub fn par_row_chunks(
&self,
chunk_rows: usize,
) -> impl IndexedParallelIterator<Item = RowMajorMatrixView<'_, T>>where
T: Send,
Get an iterator over the rows of the matrix which takes chunk_rows rows at a time.
If chunk_rows does not divide the height of the matrix, the last chunk will be smaller.
Sourcepub fn par_row_chunks_exact(
&self,
chunk_rows: usize,
) -> impl IndexedParallelIterator<Item = RowMajorMatrixView<'_, T>>where
T: Send,
pub fn par_row_chunks_exact(
&self,
chunk_rows: usize,
) -> impl IndexedParallelIterator<Item = RowMajorMatrixView<'_, T>>where
T: Send,
Get a parallel iterator over the rows of the matrix which takes chunk_rows rows at a time.
If chunk_rows does not divide the height of the matrix, the last chunk will be smaller.
Sourcepub fn par_row_chunks_mut(
&mut self,
chunk_rows: usize,
) -> impl IndexedParallelIterator<Item = RowMajorMatrixViewMut<'_, T>>
pub fn par_row_chunks_mut( &mut self, chunk_rows: usize, ) -> impl IndexedParallelIterator<Item = RowMajorMatrixViewMut<'_, T>>
Get a mutable iterator over the rows of the matrix which takes chunk_rows rows at a time.
If chunk_rows does not divide the height of the matrix, the last chunk will be smaller.
Sourcepub fn row_chunks_exact_mut(
&mut self,
chunk_rows: usize,
) -> impl Iterator<Item = RowMajorMatrixViewMut<'_, T>>
pub fn row_chunks_exact_mut( &mut self, chunk_rows: usize, ) -> impl Iterator<Item = RowMajorMatrixViewMut<'_, T>>
Get a mutable iterator over the rows of the matrix which takes chunk_rows rows at a time.
If chunk_rows does not divide the height of the matrix, the last up to chunk_rows - 1 rows
of the matrix will be omitted.
Sourcepub fn par_row_chunks_exact_mut(
&mut self,
chunk_rows: usize,
) -> impl IndexedParallelIterator<Item = RowMajorMatrixViewMut<'_, T>>
pub fn par_row_chunks_exact_mut( &mut self, chunk_rows: usize, ) -> impl IndexedParallelIterator<Item = RowMajorMatrixViewMut<'_, T>>
Get a parallel mutable iterator over the rows of the matrix which takes chunk_rows rows at a time.
If chunk_rows does not divide the height of the matrix, the last up to chunk_rows - 1 rows
of the matrix will be omitted.
Sourcepub fn row_pair_mut(
&mut self,
row_1: usize,
row_2: usize,
) -> (&mut [T], &mut [T])
pub fn row_pair_mut( &mut self, row_1: usize, row_2: usize, ) -> (&mut [T], &mut [T])
Get a pair of mutable slices of the given rows.
§Panics
Panics if row_1 or row_2 are out of bounds or if row_1 >= row_2.
Sourcepub fn packed_row_pair_mut<P>(
&mut self,
row_1: usize,
row_2: usize,
) -> ((&mut [P], &mut [T]), (&mut [P], &mut [T]))
pub fn packed_row_pair_mut<P>( &mut self, row_1: usize, row_2: usize, ) -> ((&mut [P], &mut [T]), (&mut [P], &mut [T]))
Get a pair of mutable slices of the given rows, both packed into packed field elements.
If P:WIDTH does not divide self.width, the remainder of the row will be returned as a base slice.
§Panics
Panics if row_1 or row_2 are out of bounds or if row_1 >= row_2.
Sourcepub fn bit_reversed_zero_pad(self, added_bits: usize) -> RowMajorMatrix<T>where
T: Field,
pub fn bit_reversed_zero_pad(self, added_bits: usize) -> RowMajorMatrix<T>where
T: Field,
Append zeros to the “end” of the given matrix, except that the matrix is in bit-reversed order, so in actuality we’re interleaving zero rows.
Source§impl<T: Clone + Default + Send + Sync> DenseMatrix<T>
impl<T: Clone + Default + Send + Sync> DenseMatrix<T>
pub fn as_cow<'a>(self) -> RowMajorMatrixCow<'a, T>
pub fn rand<R: Rng>(rng: &mut R, rows: usize, cols: usize) -> Selfwhere
StandardUniform: Distribution<T>,
pub fn rand_nonzero<R: Rng>(rng: &mut R, rows: usize, cols: usize) -> Self
Sourcepub fn with_random_cols<R>(&self, num_cols: usize, rng: R) -> Self
pub fn with_random_cols<R>(&self, num_cols: usize, rng: R) -> Self
Return a copy of this matrix with additional columns filled with random values appended on the right.
The original columns are preserved unchanged and the new trailing columns in each row are populated independently from the provided random number generator.
§Memory Layout
Original (h × w): Result (h × (w + num_cols)):
[ a00 a01 … a0w ] → [ a00 a01 … a0w | r0 r1 … rN ]
[ a10 a11 … a1w ] [ a10 a11 … a1w | r0 r1 … rN ]
… …§Arguments
num_cols: number of random columns to append.rng: random number generator used to sample each new element.
§Returns
A new matrix with width equal to self.width() + num_cols.
Sourcepub fn with_zero_cols(&self, num_cols: usize) -> Selfwhere
T: Field,
pub fn with_zero_cols(&self, num_cols: usize) -> Selfwhere
T: Field,
Return a copy of this matrix with additional zero-filled columns appended on the right.
Delegates to cloning the matrix and calling the in-place widening method with a zero fill value.
§Memory Layout
Original (h × w): Result (h × (w + num_cols)):
[ a00 a01 … a0w ] → [ a00 a01 … a0w | 0 0 … 0 ]
[ a10 a11 … a1w ] [ a10 a11 … a1w | 0 0 … 0 ]
… …§Arguments
num_cols: number of zero columns to append.
§Returns
A new matrix with width equal to self.width() + num_cols.
pub fn pad_to_height(&mut self, new_height: usize, fill: T)
Sourcepub fn pad_to_power_of_two_height(&mut self, fill: T)
pub fn pad_to_power_of_two_height(&mut self, fill: T)
Pad the matrix height to the next power of two by appending rows filled with fill.
This is commonly used in proof systems where trace matrices must have power-of-two heights.
§Behavior
- If the matrix is empty (height = 0), it is padded to have exactly one row of
fillvalues. - If the height is already a power of two, the matrix is unchanged.
- Otherwise, the matrix is padded to the next power of two height.
Sourcepub fn pad_to_min_power_of_two_height(&mut self, min_height: usize, fill: T)
pub fn pad_to_min_power_of_two_height(&mut self, min_height: usize, fill: T)
Pad the matrix height to at least a given minimum, rounded up to the next power of two.
Appends rows filled with the provided fill value. Useful in batch proving where multiple trace matrices must share a minimum height while still satisfying the power-of-two requirement.
§Logic
- Round both the current height and the minimum up to the next power of two.
- Take the maximum of those two values as the target.
- Append fill rows until the target is reached.
§Behavior
- If the matrix already meets or exceeds the target, it is unchanged.
- If the minimum is 0, this reduces to padding to the next power of two.
- If the matrix is empty (height = 0), it is padded entirely with fill values.
Sourcepub fn from_flat_padded(values: Vec<T>, width: usize, fill: T) -> Self
pub fn from_flat_padded(values: Vec<T>, width: usize, fill: T) -> Self
Build a matrix from a flat buffer whose length may not be a multiple of the requested width.
Useful when constructing trace matrices from a stream of values where the final row may be incomplete.
§Arguments
values: flat row-major data, ownership transferred to avoid a copy.width: number of columns (must be > 0).fill: value used to complete the last row or to create an empty row.
§Returns
A dense matrix with ceil(values.len() / width) rows (at least 1).
§Panics
Panics if width is zero.
Sourcepub fn widen_right(&mut self, extra_cols: usize, fill: T)where
T: Copy,
pub fn widen_right(&mut self, extra_cols: usize, fill: T)where
T: Copy,
Return a new matrix with additional columns appended to the right of every row, filled with a constant value.
Useful when a trace matrix needs extra selector or flag columns that are initialised to a default.
§Memory Layout
Before (width = W): After (width = W + extra):
[ d0 d1 ... d_{W-1} ] [ d0 d1 ... d_{W-1} fill ... fill ]
[ .. ] [ .. ]§Algorithm
Rows are relocated back-to-front so that earlier (lower-address) source data is never overwritten before it is read.
- Grow the backing buffer to
height * new_width. - Walk rows from the last to the first.
- For each row, move its elements to the new position and fill the trailing gap with the provided value.
§Arguments
extra_cols: number of columns to append (0 is a no-op).fill: value written into every new column.
Source§impl<T: Copy + Default + Send + Sync, V: DenseStorage<T>> DenseMatrix<T, V>
impl<T: Copy + Default + Send + Sync, V: DenseStorage<T>> DenseMatrix<T, V>
Sourcepub fn transpose(&self) -> RowMajorMatrix<T>
pub fn transpose(&self) -> RowMajorMatrix<T>
Return the transpose of this matrix.
Sourcepub fn transpose_into<W: DenseStorage<T> + BorrowMut<[T]>>(
&self,
other: &mut DenseMatrix<T, W>,
)
pub fn transpose_into<W: DenseStorage<T> + BorrowMut<[T]>>( &self, other: &mut DenseMatrix<T, W>, )
Transpose the matrix returning the result in other without intermediate allocation.
Trait Implementations§
Source§impl<T: Clone + Send + Sync, S: DenseStorage<T>> BitReversibleMatrix<T> for DenseMatrix<T, S>
impl<T: Clone + Send + Sync, S: DenseStorage<T>> BitReversibleMatrix<T> for DenseMatrix<T, S>
Source§type BitRev = RowIndexMappedView<BitReversalPerm, DenseMatrix<T, S>>
type BitRev = RowIndexMappedView<BitReversalPerm, DenseMatrix<T, S>>
Source§fn bit_reverse_rows(self) -> Self::BitRev
fn bit_reverse_rows(self) -> Self::BitRev
Source§impl<T: Clone, V: Clone> Clone for DenseMatrix<T, V>
impl<T: Clone, V: Clone> Clone for DenseMatrix<T, V>
Source§fn clone(&self) -> DenseMatrix<T, V>
fn clone(&self) -> DenseMatrix<T, V>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl<T: Copy, V: Copy> Copy for DenseMatrix<T, V>
Source§impl<'de, T, V> Deserialize<'de> for DenseMatrix<T, V>where
V: Deserialize<'de>,
impl<'de, T, V> Deserialize<'de> for DenseMatrix<T, V>where
V: Deserialize<'de>,
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>,
impl<T: Eq, V: Eq> Eq for DenseMatrix<T, V>
Source§impl<T: Clone + Send + Sync, S: DenseStorage<T>> Matrix<T> for DenseMatrix<T, S>
impl<T: Clone + Send + Sync, S: DenseStorage<T>> Matrix<T> for DenseMatrix<T, S>
Source§unsafe fn get_unchecked(&self, r: usize, c: usize) -> T
unsafe fn get_unchecked(&self, r: usize, c: usize) -> T
Source§unsafe fn row_subseq_unchecked(
&self,
r: usize,
start: usize,
end: usize,
) -> impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>
unsafe fn row_subseq_unchecked( &self, r: usize, start: usize, end: usize, ) -> impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>
Source§unsafe fn row_subslice_unchecked(
&self,
r: usize,
start: usize,
end: usize,
) -> impl Deref<Target = [T]>
unsafe fn row_subslice_unchecked( &self, r: usize, start: usize, end: usize, ) -> impl Deref<Target = [T]>
r-th row as something which can be coerced to a slice. Read moreSource§fn to_row_major_matrix(self) -> RowMajorMatrix<T>
fn to_row_major_matrix(self) -> RowMajorMatrix<T>
RowMajorMatrix by collecting all rows into a single vector.Source§fn horizontally_packed_row<'a, P>(
&'a self,
r: usize,
) -> (impl Iterator<Item = P> + Send + Sync, impl Iterator<Item = T> + Send + Sync)where
P: PackedValue<Value = T>,
T: Clone + 'a,
fn horizontally_packed_row<'a, P>(
&'a self,
r: usize,
) -> (impl Iterator<Item = P> + Send + Sync, impl Iterator<Item = T> + Send + Sync)where
P: PackedValue<Value = T>,
T: Clone + 'a,
r-th row. Read moreSource§fn padded_horizontally_packed_row<'a, P>(
&'a self,
r: usize,
) -> impl Iterator<Item = P> + Send + Sync
fn padded_horizontally_packed_row<'a, P>( &'a self, r: usize, ) -> impl Iterator<Item = P> + Send + Sync
r-th row. Read moreSource§fn vertically_packed_row<P>(&self, r: usize) -> impl Iterator<Item = P>where
T: Copy,
P: PackedValue<Value = T>,
fn vertically_packed_row<P>(&self, r: usize) -> impl Iterator<Item = P>where
T: Copy,
P: PackedValue<Value = T>,
Source§fn vertically_packed_row_pair<P>(&self, r: usize, step: usize) -> Vec<P>where
T: Copy,
P: PackedValue<Value = T>,
fn vertically_packed_row_pair<P>(&self, r: usize, step: usize) -> Vec<P>where
T: Copy,
P: PackedValue<Value = T>,
Source§fn dimensions(&self) -> Dimensions
fn dimensions(&self) -> Dimensions
Source§fn get(&self, r: usize, c: usize) -> Option<T>
fn get(&self, r: usize, c: usize) -> Option<T>
Source§fn row(
&self,
r: usize,
) -> Option<impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>>
fn row( &self, r: usize, ) -> Option<impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>>
r-th row. Read moreSource§unsafe fn row_unchecked(
&self,
r: usize,
) -> impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>
unsafe fn row_unchecked( &self, r: usize, ) -> impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>
r-th row. Read moreSource§fn row_slice(&self, r: usize) -> Option<impl Deref<Target = [T]>>
fn row_slice(&self, r: usize) -> Option<impl Deref<Target = [T]>>
r-th row as something which can be coerced to a slice. Read moreSource§unsafe fn row_slice_unchecked(&self, r: usize) -> impl Deref<Target = [T]>
unsafe fn row_slice_unchecked(&self, r: usize) -> impl Deref<Target = [T]>
r-th row as something which can be coerced to a slice. Read moreSource§fn rows(&self) -> impl Iterator<Item = impl Iterator<Item = T>> + Send + Sync
fn rows(&self) -> impl Iterator<Item = impl Iterator<Item = T>> + Send + Sync
Source§fn par_rows(
&self,
) -> impl IndexedParallelIterator<Item = impl Iterator<Item = T>> + Send + Sync
fn par_rows( &self, ) -> impl IndexedParallelIterator<Item = impl Iterator<Item = T>> + Send + Sync
Source§fn wrapping_row_slices(
&self,
r: usize,
c: usize,
) -> Vec<impl Deref<Target = [T]>>
fn wrapping_row_slices( &self, r: usize, c: usize, ) -> Vec<impl Deref<Target = [T]>>
r through r + c. If anything is larger than self.height()
simply wrap around to the beginning of the matrix.Source§fn first_row(
&self,
) -> Option<impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>>
fn first_row( &self, ) -> Option<impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>>
Source§fn last_row(
&self,
) -> Option<impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>>
fn last_row( &self, ) -> Option<impl IntoIterator<Item = T, IntoIter = impl Iterator<Item = T> + Send + Sync>>
Source§fn par_horizontally_packed_rows<'a, P>(
&'a self,
) -> impl IndexedParallelIterator<Item = (impl Iterator<Item = P> + Send + Sync, impl Iterator<Item = T> + Send + Sync)>where
P: PackedValue<Value = T>,
T: Clone + 'a,
fn par_horizontally_packed_rows<'a, P>(
&'a self,
) -> impl IndexedParallelIterator<Item = (impl Iterator<Item = P> + Send + Sync, impl Iterator<Item = T> + Send + Sync)>where
P: PackedValue<Value = T>,
T: Clone + 'a,
Source§fn par_padded_horizontally_packed_rows<'a, P>(
&'a self,
) -> impl IndexedParallelIterator<Item = impl Iterator<Item = P> + Send + Sync>
fn par_padded_horizontally_packed_rows<'a, P>( &'a self, ) -> impl IndexedParallelIterator<Item = impl Iterator<Item = P> + Send + Sync>
Source§fn vertically_strided(
self,
stride: usize,
offset: usize,
) -> VerticallyStridedMatrixView<Self>where
Self: Sized,
fn vertically_strided(
self,
stride: usize,
offset: usize,
) -> VerticallyStridedMatrixView<Self>where
Self: Sized,
Source§fn columnwise_dot_product<EF>(&self, v: &[EF]) -> Vec<EF>where
T: Field,
EF: ExtensionField<T>,
fn columnwise_dot_product<EF>(&self, v: &[EF]) -> Vec<EF>where
T: Field,
EF: ExtensionField<T>,
v and take the sum across rows.
v can be a vector of extension elements.Source§fn columnwise_dot_product_batched<EF, const N: usize>(
&self,
vs: &[FieldArray<EF, N>],
) -> Vec<FieldArray<EF, N>>where
T: Field,
EF: ExtensionField<T>,
fn columnwise_dot_product_batched<EF, const N: usize>(
&self,
vs: &[FieldArray<EF, N>],
) -> Vec<FieldArray<EF, N>>where
T: Field,
EF: ExtensionField<T>,
Source§fn rowwise_packed_dot_product<EF>(
&self,
vec: &[EF::ExtensionPacking],
) -> impl IndexedParallelIterator<Item = EF>where
T: Field,
EF: ExtensionField<T>,
fn rowwise_packed_dot_product<EF>(
&self,
vec: &[EF::ExtensionPacking],
) -> impl IndexedParallelIterator<Item = EF>where
T: Field,
EF: ExtensionField<T>,
M . vec, aka take the dot product of each
row of M by vec. If the length of vec is longer than the width of M,
vec is truncated to the first width() elements. Read moreSource§impl<T: PartialEq, V: PartialEq> PartialEq for DenseMatrix<T, V>
impl<T: PartialEq, V: PartialEq> PartialEq for DenseMatrix<T, V>
Source§fn eq(&self, other: &DenseMatrix<T, V>) -> bool
fn eq(&self, other: &DenseMatrix<T, V>) -> bool
self and other values to be equal, and is used by ==.Source§impl<T, V> Serialize for DenseMatrix<T, V>where
V: Serialize,
impl<T, V> Serialize for DenseMatrix<T, V>where
V: Serialize,
impl<T, V> StructuralPartialEq for DenseMatrix<T, V>
Auto Trait Implementations§
impl<T, V> Freeze for DenseMatrix<T, V>where
V: Freeze,
impl<T, V> RefUnwindSafe for DenseMatrix<T, V>where
V: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, V> Send for DenseMatrix<T, V>
impl<T, V> Sync for DenseMatrix<T, V>
impl<T, V> Unpin for DenseMatrix<T, V>
impl<T, V> UnsafeUnpin for DenseMatrix<T, V>where
V: UnsafeUnpin,
impl<T, V> UnwindSafe for DenseMatrix<T, V>where
V: UnwindSafe,
T: UnwindSafe,
Blanket Implementations§
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<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<F, M> Interpolate<F> for Mwhere
F: TwoAdicField,
M: Matrix<F>,
impl<F, M> Interpolate<F> for Mwhere
F: TwoAdicField,
M: Matrix<F>,
Source§fn interpolate_subgroup<EF: ExtensionField<F>>(&self, point: EF) -> Vec<EF>
fn interpolate_subgroup<EF: ExtensionField<F>>(&self, point: EF) -> Vec<EF>
Source§fn interpolate_coset<EF: ExtensionField<F>>(
&self,
shift: F,
point: EF,
) -> Vec<EF>
fn interpolate_coset<EF: ExtensionField<F>>( &self, shift: F, point: EF, ) -> Vec<EF>
Source§fn interpolate_coset_with_precomputation<EF: ExtensionField<F>>(
&self,
shift: F,
point: EF,
adjusted_weights: &[EF],
) -> Vec<EF>
fn interpolate_coset_with_precomputation<EF: ExtensionField<F>>( &self, shift: F, point: EF, adjusted_weights: &[EF], ) -> Vec<EF>
Source§impl<F, M> InterpolateArbitrary<F> for M
impl<F, M> InterpolateArbitrary<F> for M
Source§fn interpolate_arbitrary_point<EF: ExtensionField<F>>(
&self,
x_coords: &[F],
point: EF,
) -> Option<Vec<EF>>
fn interpolate_arbitrary_point<EF: ExtensionField<F>>( &self, x_coords: &[F], point: EF, ) -> Option<Vec<EF>>
point via barycentric interpolation. Read moreSource§fn interpolate_arbitrary_with_precomputation<EF: ExtensionField<F>>(
&self,
weights: &[F],
diff_invs: &[EF],
) -> Vec<EF>
fn interpolate_arbitrary_with_precomputation<EF: ExtensionField<F>>( &self, weights: &[F], diff_invs: &[EF], ) -> Vec<EF>
Source§fn recover_coefficients(&self, x_coords: &[F]) -> Option<RowMajorMatrix<F>>
fn recover_coefficients(&self, x_coords: &[F]) -> Option<RowMajorMatrix<F>>
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 more