pub struct Polynomial<F> {
pub coefficients: Vec<F>,
}Expand description
Represents a polynomial with coefficients of type F.
Fields§
§coefficients: Vec<F>Coefficients of the polynomial, ordered from lowest to highest degree.
Implementations§
Source§impl<F> Polynomial<F>where
F: Clone,
impl<F> Polynomial<F>where
F: Clone,
Sourcepub fn new(coefficients: Vec<F>) -> Polynomial<F>
pub fn new(coefficients: Vec<F>) -> Polynomial<F>
Creates a new polynomial from the provided coefficients.
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Sourcepub fn hadamard_mul(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn hadamard_mul(&self, other: &Polynomial<F>) -> Polynomial<F>
Multiplies two polynomials coefficient-wise (Hadamard multiplication).
Sourcepub fn hadamard_div(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn hadamard_div(&self, other: &Polynomial<F>) -> Polynomial<F>
Divides two polynomials coefficient-wise (Hadamard division).
Sourcepub fn hadamard_inv(&self) -> Polynomial<F>
pub fn hadamard_inv(&self) -> Polynomial<F>
Computes the coefficient-wise inverse (Hadamard inverse).
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Source§impl<F> Polynomial<F>
The following implementations are specific to cyclotomic polynomial rings,
i.e., F[ X ] / <X^n + 1>, and are used extensively in Falcon.
impl<F> Polynomial<F>
The following implementations are specific to cyclotomic polynomial rings, i.e., F[ X ] / <X^n + 1>, and are used extensively in Falcon.
Sourcepub fn reduce_by_cyclotomic(&self, n: usize) -> Polynomial<F>
pub fn reduce_by_cyclotomic(&self, n: usize) -> Polynomial<F>
Reduce the polynomial by X^n + 1.
Sourcepub fn field_norm(&self) -> Polynomial<F>
pub fn field_norm(&self) -> Polynomial<F>
Computes the field norm of the polynomial as an element of the cyclotomic ring F[ X ] / <X^n + 1 > relative to one of half the size, i.e., F[ X ] / <X^(n/2) + 1> .
Corresponds to formula 3.25 in the spec [1, p.30].
Sourcepub fn lift_next_cyclotomic(&self) -> Polynomial<F>
pub fn lift_next_cyclotomic(&self) -> Polynomial<F>
Lifts an element from a cyclotomic polynomial ring to one of double the size.
Sourcepub fn galois_adjoint(&self) -> Polynomial<F>
pub fn galois_adjoint(&self) -> Polynomial<F>
Computes the galois adjoint of the polynomial in the cyclotomic ring F[ X ] / < X^n + 1 > , which corresponds to f(x^2).
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Sourcepub fn karatsuba(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn karatsuba(&self, other: &Polynomial<F>) -> Polynomial<F>
Multiply two polynomials using Karatsuba’s divide-and-conquer algorithm.
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Sourcepub fn shift(&self, shamt: usize) -> Polynomial<F>
pub fn shift(&self, shamt: usize) -> Polynomial<F>
Shifts the polynomial by the specified amount (adds leading zeros).
Sourcepub fn constant(f: F) -> Polynomial<F>
pub fn constant(f: F) -> Polynomial<F>
Creates a constant polynomial with a single coefficient.
Sourcepub fn map<G, C>(&self, closure: C) -> Polynomial<G>
pub fn map<G, C>(&self, closure: C) -> Polynomial<G>
Applies a function to each coefficient and returns a new polynomial.
Source§impl Polynomial<FalconFelt>
impl Polynomial<FalconFelt>
Sourcepub fn norm_squared(&self) -> u64
pub fn norm_squared(&self) -> u64
Computes the squared L2 norm of the polynomial.
Sourcepub fn to_elements(&self) -> Vec<Goldilocks>
pub fn to_elements(&self) -> Vec<Goldilocks>
Returns the coefficients of this polynomial as field elements.
Sourcepub fn mul_modulo_p(
a: &Polynomial<FalconFelt>,
b: &Polynomial<FalconFelt>,
) -> [u64; 1024]
pub fn mul_modulo_p( a: &Polynomial<FalconFelt>, b: &Polynomial<FalconFelt>, ) -> [u64; 1024]
Multiplies two polynomials over Z_p[x] without reducing modulo p. Given that the degrees of the input polynomials are less than 512 and their coefficients are less than the modulus q equal to 12289, the resulting product polynomial is guaranteed to have coefficients less than the Miden prime.
Note that this multiplication is not over Z_p[x]/(phi).
Sourcepub fn reduce_negacyclic(a: &[u64; 1024]) -> Polynomial<FalconFelt>
pub fn reduce_negacyclic(a: &[u64; 1024]) -> Polynomial<FalconFelt>
Reduces a polynomial, that is the product of two polynomials over Z_p[x], modulo the irreducible polynomial phi. This results in an element in Z_p[x]/(phi).
Source§impl Polynomial<Goldilocks>
impl Polynomial<Goldilocks>
Sourcepub fn to_elements(&self) -> Vec<Goldilocks>
pub fn to_elements(&self) -> Vec<Goldilocks>
Returns the coefficients of this polynomial as Miden field elements.
Source§impl Polynomial<i16>
impl Polynomial<i16>
Sourcepub fn to_balanced_values(&self) -> Vec<i16>
pub fn to_balanced_values(&self) -> Vec<i16>
Returns the balanced values of the coefficients of this polynomial.
Trait Implementations§
Source§impl<F> Add for &Polynomial<F>
impl<F> Add for &Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
+ operator.Source§fn add(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Add>::Output
fn add(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Add>::Output
+ operation. Read moreSource§impl<F> Add for Polynomial<F>
impl<F> Add for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
+ operator.Source§fn add(self, rhs: Polynomial<F>) -> <Polynomial<F> as Add>::Output
fn add(self, rhs: Polynomial<F>) -> <Polynomial<F> as Add>::Output
+ operation. Read moreSource§impl<F> AddAssign for Polynomial<F>
impl<F> AddAssign for Polynomial<F>
Source§fn add_assign(&mut self, rhs: Polynomial<F>)
fn add_assign(&mut self, rhs: Polynomial<F>)
+= operation. Read moreSource§impl<F> Clone for Polynomial<F>where
F: Clone,
impl<F> Clone for Polynomial<F>where
F: Clone,
Source§fn clone(&self) -> Polynomial<F>
fn clone(&self) -> Polynomial<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<F> Debug for Polynomial<F>where
F: Debug,
impl<F> Debug for Polynomial<F>where
F: Debug,
Source§impl<F> Default for Polynomial<F>where
F: Default,
impl<F> Default for Polynomial<F>where
F: Default,
Source§fn default() -> Polynomial<F>
fn default() -> Polynomial<F>
Source§impl<F> Div for Polynomial<F>
impl<F> Div for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
/ operator.Source§fn div(self, denominator: Polynomial<F>) -> <Polynomial<F> as Div>::Output
fn div(self, denominator: Polynomial<F>) -> <Polynomial<F> as Div>::Output
/ operation. Read moreSource§impl From<&Polynomial<FalconFelt>> for Polynomial<Goldilocks>
impl From<&Polynomial<FalconFelt>> for Polynomial<Goldilocks>
Source§fn from(item: &Polynomial<FalconFelt>) -> Polynomial<Goldilocks>
fn from(item: &Polynomial<FalconFelt>) -> Polynomial<Goldilocks>
Source§impl From<&Polynomial<i16>> for Polynomial<FalconFelt>
impl From<&Polynomial<i16>> for Polynomial<FalconFelt>
Source§fn from(item: &Polynomial<i16>) -> Polynomial<FalconFelt>
fn from(item: &Polynomial<i16>) -> Polynomial<FalconFelt>
Source§impl From<Polynomial<FalconFelt>> for Polynomial<Goldilocks>
impl From<Polynomial<FalconFelt>> for Polynomial<Goldilocks>
Source§fn from(item: Polynomial<FalconFelt>) -> Polynomial<Goldilocks>
fn from(item: Polynomial<FalconFelt>) -> Polynomial<Goldilocks>
Source§impl From<Polynomial<FalconFelt>> for PublicKey
impl From<Polynomial<FalconFelt>> for PublicKey
Source§fn from(pk_poly: Polynomial<FalconFelt>) -> PublicKey
fn from(pk_poly: Polynomial<FalconFelt>) -> PublicKey
Source§impl From<Polynomial<FalconFelt>> for SignaturePoly
impl From<Polynomial<FalconFelt>> for SignaturePoly
Source§fn from(pk_poly: Polynomial<FalconFelt>) -> SignaturePoly
fn from(pk_poly: Polynomial<FalconFelt>) -> SignaturePoly
Source§impl From<Polynomial<i16>> for Polynomial<FalconFelt>
impl From<Polynomial<i16>> for Polynomial<FalconFelt>
Source§fn from(item: Polynomial<i16>) -> Polynomial<FalconFelt>
fn from(item: Polynomial<i16>) -> Polynomial<FalconFelt>
Source§impl<F> Mul<F> for &Polynomial<F>
impl<F> Mul<F> for &Polynomial<F>
Source§impl<F> Mul<F> for Polynomial<F>
impl<F> Mul<F> for Polynomial<F>
Source§impl<F> Mul for &Polynomial<F>
impl<F> Mul for &Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.Source§fn mul(self, other: &Polynomial<F>) -> <&Polynomial<F> as Mul>::Output
fn mul(self, other: &Polynomial<F>) -> <&Polynomial<F> as Mul>::Output
* operation. Read moreSource§impl<F> Mul for Polynomial<F>
impl<F> Mul for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.Source§fn mul(self, other: Polynomial<F>) -> <Polynomial<F> as Mul>::Output
fn mul(self, other: Polynomial<F>) -> <Polynomial<F> as Mul>::Output
* operation. Read moreSource§impl<F> Neg for &Polynomial<F>
impl<F> Neg for &Polynomial<F>
Source§impl<F> Neg for Polynomial<F>
impl<F> Neg for Polynomial<F>
Source§impl<F> One for Polynomial<F>
impl<F> One for Polynomial<F>
Source§fn one() -> Polynomial<F>
fn one() -> Polynomial<F>
Source§impl<F> PartialEq for Polynomial<F>
impl<F> PartialEq for Polynomial<F>
Source§impl<F> Sub for &Polynomial<F>
impl<F> Sub for &Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.Source§fn sub(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Sub>::Output
fn sub(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Sub>::Output
- operation. Read moreSource§impl<F> Sub for Polynomial<F>
impl<F> Sub for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.Source§fn sub(self, rhs: Polynomial<F>) -> <Polynomial<F> as Sub>::Output
fn sub(self, rhs: Polynomial<F>) -> <Polynomial<F> as Sub>::Output
- operation. Read moreSource§impl<F> SubAssign for Polynomial<F>
impl<F> SubAssign for Polynomial<F>
Source§fn sub_assign(&mut self, rhs: Polynomial<F>)
fn sub_assign(&mut self, rhs: Polynomial<F>)
-= operation. Read moreSource§impl<F> Zero for Polynomial<F>
impl<F> Zero for Polynomial<F>
Source§impl<F> Zeroize for Polynomial<F>where
F: Zeroize,
impl<F> Zeroize for Polynomial<F>where
F: Zeroize,
impl<F> Eq for Polynomial<F>
impl<F> ZeroizeOnDrop for Polynomial<F>where
F: Zeroize,
Auto Trait Implementations§
impl<F> Freeze for Polynomial<F>
impl<F> RefUnwindSafe for Polynomial<F>where
F: RefUnwindSafe,
impl<F> Send for Polynomial<F>where
F: Send,
impl<F> Sync for Polynomial<F>where
F: Sync,
impl<F> Unpin for Polynomial<F>where
F: Unpin,
impl<F> UnwindSafe for Polynomial<F>where
F: 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,
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<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more