Struct OptimizedArcMatrix

Source
pub struct OptimizedArcMatrix<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize>(pub ArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>);
Expand description

Represents an optimized matrix of round constants.

This modifies the partial rounds in the middle of the permutation, wherein you add constants first before iterating through the partial rounds.

This method follows calc_equivalent_constants from Appendix B’s poseidonperm_x3_64_24_optimized.sage.

Tuple Fields§

§0: ArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Implementations§

Source§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Source

pub fn transpose(&self) -> OptimizedArcMatrix<N_COLS, N_ROWS, N_ELEMENTS>

Source

pub const fn new_from_known(elements: [Fq; N_ELEMENTS]) -> Self

Create a new matrix from a slice of elements.

Trait Implementations§

Source§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> Clone for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Source§

fn clone(&self) -> OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

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<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> Debug for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Source§

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

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

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> MatrixOperations for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Source§

fn new(elements: &[Fq]) -> Self

Create a OptimizedArcMatrix from its elements.

Source§

fn elements(&self) -> &[Fq]

Access elements as an array of arrays
Source§

fn get_element(&self, i: usize, j: usize) -> Fq

Get element[i,j]
Source§

fn set_element(&mut self, i: usize, j: usize, val: Fq)

Set element[i,j]
Source§

fn n_rows(&self) -> usize

Number of rows
Source§

fn n_cols(&self) -> usize

Number of columns
Source§

fn hadamard_product(&self, rhs: &Self) -> Result<Self, PoseidonParameterError>
where Self: Sized,

Compute Hadamard (element-wise) product
Source§

fn iter_rows(&self) -> Chunks<'_, Fq>

Get rows
Source§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> PartialEq for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Source§

fn eq(&self, other: &OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> Eq for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Source§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> StructuralPartialEq for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

Auto Trait Implementations§

§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> Freeze for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> RefUnwindSafe for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> Send for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> Sync for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> Unpin for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

§

impl<const N_ROWS: usize, const N_COLS: usize, const N_ELEMENTS: usize> UnwindSafe for OptimizedArcMatrix<N_ROWS, N_COLS, N_ELEMENTS>

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, 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> 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.