Struct twenty_first::shared_math::polynomial::Polynomial
source · pub struct Polynomial<FF: FiniteField> {
pub coefficients: Vec<FF>,
}
Fields§
§coefficients: Vec<FF>
Implementations§
source§impl<FF> Polynomial<FF>where
FF: FiniteField + MulAssign<BFieldElement>,
impl<FF> Polynomial<FF>where FF: FiniteField + MulAssign<BFieldElement>,
pub fn scale(&self, alpha: &BFieldElement) -> Self
pub fn fast_square(&self) -> Self
pub fn square(&self) -> Self
pub fn fast_mod_pow(&self, pow: BigInt) -> Self
pub fn fast_multiply( lhs: &Self, rhs: &Self, primitive_root: &BFieldElement, root_order: usize ) -> Self
pub fn fast_zerofier( domain: &[FF], primitive_root: &BFieldElement, root_order: usize ) -> Self
pub fn fast_evaluate( &self, domain: &[FF], primitive_root: &BFieldElement, root_order: usize ) -> Vec<FF>
pub fn fast_interpolate( domain: &[FF], values: &[FF], primitive_root: &BFieldElement, root_order: usize ) -> Self
pub fn batch_fast_interpolate( domain: &[FF], values_matrix: &Vec<Vec<FF>>, primitive_root: &BFieldElement, root_order: usize ) -> Vec<Self>
sourcepub fn fast_coset_evaluate(
&self,
offset: &BFieldElement,
generator: BFieldElement,
order: usize
) -> Vec<FF>
pub fn fast_coset_evaluate( &self, offset: &BFieldElement, generator: BFieldElement, order: usize ) -> Vec<FF>
Fast evaluate on a coset domain, which is the group generated by generator^i * offset
sourcepub fn fast_coset_interpolate(
offset: &BFieldElement,
generator: BFieldElement,
values: &[FF]
) -> Self
pub fn fast_coset_interpolate( offset: &BFieldElement, generator: BFieldElement, values: &[FF] ) -> Self
The inverse of fast_coset_evaluate
sourcepub fn fast_coset_divide(
lhs: &Polynomial<FF>,
rhs: &Polynomial<FF>,
offset: BFieldElement,
primitive_root: BFieldElement,
root_order: usize
) -> Polynomial<FF>
pub fn fast_coset_divide( lhs: &Polynomial<FF>, rhs: &Polynomial<FF>, offset: BFieldElement, primitive_root: BFieldElement, root_order: usize ) -> Polynomial<FF>
Divide two polynomials under the homomorphism of evaluation for a N^2 -> N*log(N) speedup Since we often want to use this fast division for numerators and divisors that evaluate to zero in their domain, we do the division with an offset from the polynomials’ original domains. The issue of zero in the numerator and divisor arises when we divide a transition polynomial with a zerofier.
source§impl<FF: FiniteField> Polynomial<FF>
impl<FF: FiniteField> Polynomial<FF>
pub const fn new(coefficients: Vec<FF>) -> Self
pub fn new_const(element: FF) -> Self
pub fn normalize(&mut self)
pub fn from_constant(constant: FF) -> Self
pub fn is_x(&self) -> bool
pub fn evaluate(&self, x: &FF) -> FF
pub fn leading_coefficient(&self) -> Option<FF>
pub fn lagrange_interpolate(domain: &[FF], values: &[FF]) -> Self
pub fn are_colinear_3(p0: (FF, FF), p1: (FF, FF), p2: (FF, FF)) -> bool
pub fn get_colinear_y(p0: (FF, FF), p1: (FF, FF), p2_x: FF) -> FF
pub fn zerofier(domain: &[FF]) -> Self
pub fn slow_square(&self) -> Self
source§impl<FF: FiniteField> Polynomial<FF>
impl<FF: FiniteField> Polynomial<FF>
pub fn are_colinear(points: &[(FF, FF)]) -> bool
pub fn lagrange_interpolate_zipped(points: &[(FF, FF)]) -> Self
source§impl<FF: FiniteField> Polynomial<FF>
impl<FF: FiniteField> Polynomial<FF>
pub fn multiply(self, other: Self) -> Self
pub fn mod_pow(&self, pow: BigInt) -> Self
pub fn shift_coefficients_mut(&mut self, power: usize, zero: FF)
pub fn shift_coefficients(&self, power: usize) -> Self
pub fn scalar_mul_mut(&mut self, scalar: FF)
pub fn scalar_mul(&self, scalar: FF) -> Self
sourcepub fn divide(&self, divisor: Self) -> (Self, Self)
pub fn divide(&self, divisor: Self) -> (Self, Self)
Return (quotient, remainder)
source§impl<FF: FiniteField> Polynomial<FF>
impl<FF: FiniteField> Polynomial<FF>
sourcepub fn xgcd(
x: Polynomial<FF>,
y: Polynomial<FF>
) -> (Polynomial<FF>, Polynomial<FF>, Polynomial<FF>)
pub fn xgcd( x: Polynomial<FF>, y: Polynomial<FF> ) -> (Polynomial<FF>, Polynomial<FF>, Polynomial<FF>)
Extended Euclidean algorithm with polynomials. Computes the greatest
common divisor gcd
as a monic polynomial, as well as the corresponding
Bézout coefficients a
and b
, satisfying gcd = a·x + b·y
source§impl<FF: FiniteField> Polynomial<FF>
impl<FF: FiniteField> Polynomial<FF>
pub fn degree(&self) -> isize
pub fn formal_derivative(&self) -> Self
Trait Implementations§
source§impl<FF: FiniteField> Add<Polynomial<FF>> for Polynomial<FF>
impl<FF: FiniteField> Add<Polynomial<FF>> for Polynomial<FF>
source§impl<FF: FiniteField> AddAssign<Polynomial<FF>> for Polynomial<FF>
impl<FF: FiniteField> AddAssign<Polynomial<FF>> for Polynomial<FF>
source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+=
operation. Read moresource§impl<FF: Clone + FiniteField> Clone for Polynomial<FF>
impl<FF: Clone + FiniteField> Clone for Polynomial<FF>
source§fn clone(&self) -> Polynomial<FF>
fn clone(&self) -> Polynomial<FF>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<FF: FiniteField> Debug for Polynomial<FF>
impl<FF: FiniteField> Debug for Polynomial<FF>
source§impl<FF: FiniteField> Display for Polynomial<FF>
impl<FF: FiniteField> Display for Polynomial<FF>
source§impl<FF: FiniteField> Div<Polynomial<FF>> for Polynomial<FF>
impl<FF: FiniteField> Div<Polynomial<FF>> for Polynomial<FF>
source§impl From<Polynomial<BFieldElement>> for XFieldElement
impl From<Polynomial<BFieldElement>> for XFieldElement
source§fn from(poly: Polynomial<BFieldElement>) -> Self
fn from(poly: Polynomial<BFieldElement>) -> Self
Converts to this type from the input type.
source§impl From<XFieldElement> for Polynomial<BFieldElement>
impl From<XFieldElement> for Polynomial<BFieldElement>
source§fn from(item: XFieldElement) -> Self
fn from(item: XFieldElement) -> Self
Converts to this type from the input type.
source§impl<FF: FiniteField> Hash for Polynomial<FF>
impl<FF: FiniteField> Hash for Polynomial<FF>
source§impl<FF: FiniteField> Mul<Polynomial<FF>> for Polynomial<FF>
impl<FF: FiniteField> Mul<Polynomial<FF>> for Polynomial<FF>
source§impl<FF: FiniteField> One for Polynomial<FF>
impl<FF: FiniteField> One for Polynomial<FF>
source§impl<FF: FiniteField> PartialEq<Polynomial<FF>> for Polynomial<FF>
impl<FF: FiniteField> PartialEq<Polynomial<FF>> for Polynomial<FF>
source§impl<FF: FiniteField> Rem<Polynomial<FF>> for Polynomial<FF>
impl<FF: FiniteField> Rem<Polynomial<FF>> for Polynomial<FF>
source§impl<FF: FiniteField> Sub<Polynomial<FF>> for Polynomial<FF>
impl<FF: FiniteField> Sub<Polynomial<FF>> for Polynomial<FF>
source§impl<FF: FiniteField> Zero for Polynomial<FF>
impl<FF: FiniteField> Zero for Polynomial<FF>
impl<FF: FiniteField> Eq for Polynomial<FF>
Auto Trait Implementations§
impl<FF> RefUnwindSafe for Polynomial<FF>where FF: RefUnwindSafe,
impl<FF> Send for Polynomial<FF>
impl<FF> Sync for Polynomial<FF>
impl<FF> Unpin for Polynomial<FF>where FF: Unpin,
impl<FF> UnwindSafe for Polynomial<FF>where FF: 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
Mutably borrows from an owned value. Read more