pub struct DynamicPolynomialF<F: PrimeField> {
pub coeffs: Vec<F>,
}Expand description
Polynomials of dynamic degree. The implementation is tailored to work with random finite fields. To be used in UAIR and PIOP where ZIP+ degree bound is not observed anymore.
Note that operations involving dynamic polynomials
do not trim leading zeros meaning
one can end up with unequal objects of the type
DynamicPoly<F> that represent equal polynomials,
therefore trim has to be called before checking
equality.
Fields§
§coeffs: Vec<F>Implementations§
Source§impl<F: PrimeField> DynamicPolynomialF<F>
impl<F: PrimeField> DynamicPolynomialF<F>
Sourcepub fn new_trimmed(coeffs: impl AsRef<[F]>) -> Self
pub fn new_trimmed(coeffs: impl AsRef<[F]>) -> Self
Create a new polynomial with the given coefficients.
pub fn new(coeffs: impl AsRef<[F]>) -> Self
pub fn degree(&self) -> Option<usize>
pub fn trim(&mut self)
pub fn constant_poly(a: F) -> Self
Sourcepub fn rotate_right<const D: usize>(
&self,
c: usize,
field_cfg: &F::Config,
) -> Self
pub fn rotate_right<const D: usize>( &self, c: usize, field_cfg: &F::Config, ) -> Self
Right-rotate the coefficient vector by c positions within width D.
The output coefficient at position i is the input coefficient at
(i + c) mod D. Missing coefficients are padded with zero before the
rotation.
Sourcepub fn shr<const D: usize>(&self, c: usize, field_cfg: &F::Config) -> Self
pub fn shr<const D: usize>(&self, c: usize, field_cfg: &F::Config) -> Self
Right-shift the coefficient vector by c positions within width D.
The output coefficient at position i is the input coefficient at
i + c, or zero when that index is outside width D. Missing
coefficients are padded with zero before the shift.
Trait Implementations§
Source§impl<F: PrimeField> Add<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
impl<F: PrimeField> Add<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Add for DynamicPolynomialF<F>
impl<F: PrimeField> Add for DynamicPolynomialF<F>
Source§impl<F: PrimeField> AddAssign<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
impl<F: PrimeField> AddAssign<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
Source§fn add_assign(&mut self, rhs: &Self)
fn add_assign(&mut self, rhs: &Self)
+= operation. Read moreSource§impl<F: PrimeField> AddAssign for DynamicPolynomialF<F>
impl<F: PrimeField> AddAssign for DynamicPolynomialF<F>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+= operation. Read moreSource§impl<F: PrimeField> CheckedAdd for DynamicPolynomialF<F>
impl<F: PrimeField> CheckedAdd for DynamicPolynomialF<F>
Source§fn checked_add(&self, rhs: &Self) -> Option<Self>
fn checked_add(&self, rhs: &Self) -> Option<Self>
None is
returned.Source§impl<F: PrimeField> CheckedMul for DynamicPolynomialF<F>
impl<F: PrimeField> CheckedMul for DynamicPolynomialF<F>
Source§fn checked_mul(&self, rhs: &Self) -> Option<Self>
fn checked_mul(&self, rhs: &Self) -> Option<Self>
None is returned.Source§impl<F: PrimeField> CheckedNeg for DynamicPolynomialF<F>
impl<F: PrimeField> CheckedNeg for DynamicPolynomialF<F>
Source§fn checked_neg(&self) -> Option<Self>
fn checked_neg(&self) -> Option<Self>
None for results that can’t be represented, like signed MIN
values that can’t be positive, or non-zero unsigned values that can’t be negative. Read moreSource§impl<F: PrimeField> CheckedSub for DynamicPolynomialF<F>
impl<F: PrimeField> CheckedSub for DynamicPolynomialF<F>
Source§fn checked_sub(&self, rhs: &Self) -> Option<Self>
fn checked_sub(&self, rhs: &Self) -> Option<Self>
None is returned.Source§impl<F: Clone + PrimeField> Clone for DynamicPolynomialF<F>
impl<F: Clone + PrimeField> Clone for DynamicPolynomialF<F>
Source§fn clone(&self) -> DynamicPolynomialF<F>
fn clone(&self) -> DynamicPolynomialF<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<F: PrimeField> ConstZero for DynamicPolynomialF<F>
impl<F: PrimeField> ConstZero for DynamicPolynomialF<F>
Source§impl<F: Debug + PrimeField> Debug for DynamicPolynomialF<F>
impl<F: Debug + PrimeField> Debug for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Default for DynamicPolynomialF<F>
impl<F: PrimeField> Default for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Display for DynamicPolynomialF<F>
impl<F: PrimeField> Display for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Div for DynamicPolynomialF<F>
impl<F: PrimeField> Div for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Euclid for DynamicPolynomialF<F>
impl<F: PrimeField> Euclid for DynamicPolynomialF<F>
Source§fn div_euclid(&self, v: &Self) -> Self
fn div_euclid(&self, v: &Self) -> Self
rem_euclid. Read moreSource§fn rem_euclid(&self, v: &Self) -> Self
fn rem_euclid(&self, v: &Self) -> Self
self (mod v). Read moreSource§fn div_rem_euclid(&self, divisor: &Self) -> (Self, Self)
fn div_rem_euclid(&self, divisor: &Self) -> (Self, Self)
Source§impl<F: PrimeField> EvaluatablePolynomial<F, F> for DynamicPolynomialF<F>
impl<F: PrimeField> EvaluatablePolynomial<F, F> for DynamicPolynomialF<F>
Source§type EvaluationPoint = F
type EvaluationPoint = F
Out,
for multivariate this is [Out].Source§fn evaluate_at_point(&self, point: &F) -> Result<F, EvaluationError>
fn evaluate_at_point(&self, point: &F) -> Result<F, EvaluationError>
Source§impl<F: PrimeField, const DEGFEE_PLUS_ONE: usize> From<DensePolynomial<F, DEGFEE_PLUS_ONE>> for DynamicPolynomialF<F>
impl<F: PrimeField, const DEGFEE_PLUS_ONE: usize> From<DensePolynomial<F, DEGFEE_PLUS_ONE>> for DynamicPolynomialF<F>
Source§fn from(dense_poly: DensePolynomial<F, DEGFEE_PLUS_ONE>) -> Self
fn from(dense_poly: DensePolynomial<F, DEGFEE_PLUS_ONE>) -> Self
Source§impl<F: PrimeField> From<Vec<F>> for DynamicPolynomialF<F>
impl<F: PrimeField> From<Vec<F>> for DynamicPolynomialF<F>
Source§impl<F: PrimeField> FromIterator<F> for DynamicPolynomialF<F>
impl<F: PrimeField> FromIterator<F> for DynamicPolynomialF<F>
Source§fn from_iter<T: IntoIterator<Item = F>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = F>>(iter: T) -> Self
Source§impl<F: Hash + PrimeField> Hash for DynamicPolynomialF<F>
impl<F: Hash + PrimeField> Hash for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Mul<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
impl<F: PrimeField> Mul<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
Source§impl<'a, F: PrimeField> Mul for &'a DynamicPolynomialF<F>
impl<'a, F: PrimeField> Mul for &'a DynamicPolynomialF<F>
Source§impl<F: PrimeField> Mul for DynamicPolynomialF<F>
impl<F: PrimeField> Mul for DynamicPolynomialF<F>
Source§impl<F: PrimeField> MulAssign<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
impl<F: PrimeField> MulAssign<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
Source§fn mul_assign(&mut self, rhs: &Self)
fn mul_assign(&mut self, rhs: &Self)
*= operation. Read moreSource§impl<F: PrimeField> MulAssign for DynamicPolynomialF<F>
impl<F: PrimeField> MulAssign for DynamicPolynomialF<F>
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*= operation. Read moreSource§impl<F: PrimeField> Neg for DynamicPolynomialF<F>
impl<F: PrimeField> Neg for DynamicPolynomialF<F>
Source§impl<F: PartialEq + PrimeField> PartialEq for DynamicPolynomialF<F>
impl<F: PartialEq + PrimeField> PartialEq for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Polynomial<F> for DynamicPolynomialF<F>
impl<F: PrimeField> Polynomial<F> for DynamicPolynomialF<F>
const DEGREE_BOUND: usize = usize::MAX
Source§impl<F: PrimeField> Rem for DynamicPolynomialF<F>
impl<F: PrimeField> Rem for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Sub<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
impl<F: PrimeField> Sub<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
Source§impl<F: PrimeField> Sub for DynamicPolynomialF<F>
impl<F: PrimeField> Sub for DynamicPolynomialF<F>
Source§impl<F: PrimeField> SubAssign<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
impl<F: PrimeField> SubAssign<&DynamicPolynomialF<F>> for DynamicPolynomialF<F>
Source§fn sub_assign(&mut self, rhs: &Self)
fn sub_assign(&mut self, rhs: &Self)
-= operation. Read moreSource§impl<F: PrimeField> SubAssign for DynamicPolynomialF<F>
impl<F: PrimeField> SubAssign for DynamicPolynomialF<F>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-= operation. Read moreSource§impl<F: PrimeField> Zero for DynamicPolynomialF<F>
impl<F: PrimeField> Zero for DynamicPolynomialF<F>
impl<F: Eq + PrimeField> Eq for DynamicPolynomialF<F>
impl<F: PrimeField> Semiring for DynamicPolynomialF<F>
impl<F: PrimeField> StructuralPartialEq for DynamicPolynomialF<F>
Auto Trait Implementations§
impl<F> Freeze for DynamicPolynomialF<F>
impl<F> RefUnwindSafe for DynamicPolynomialF<F>where
F: RefUnwindSafe,
impl<F> Send for DynamicPolynomialF<F>
impl<F> Sync for DynamicPolynomialF<F>
impl<F> Unpin for DynamicPolynomialF<F>where
F: Unpin,
impl<F> UnsafeUnpin for DynamicPolynomialF<F>
impl<F> UnwindSafe for DynamicPolynomialF<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> 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