pub struct SparsePolynomial<F: Field, T: Term> {
pub num_vars: usize,
pub terms: Vec<(F, T)>,
}
Expand description
Stores a sparse multivariate polynomial in coefficient form.
Fields§
§num_vars: usize
The number of variables the polynomial supports
terms: Vec<(F, T)>
List of each term along with its coefficient
Trait Implementations§
Source§impl<'a, 'b, F: Field, T: Term> Add<&'a SparsePolynomial<F, T>> for &'b SparsePolynomial<F, T>
impl<'a, 'b, F: Field, T: Term> Add<&'a SparsePolynomial<F, T>> for &'b SparsePolynomial<F, T>
Source§type Output = SparsePolynomial<F, T>
type Output = SparsePolynomial<F, T>
The resulting type after applying the
+
operator.Source§fn add(self, other: &'a SparsePolynomial<F, T>) -> SparsePolynomial<F, T>
fn add(self, other: &'a SparsePolynomial<F, T>) -> SparsePolynomial<F, T>
Performs the
+
operation. Read moreSource§impl<F: Field, T: Term> Add for SparsePolynomial<F, T>
impl<F: Field, T: Term> Add for SparsePolynomial<F, T>
Source§type Output = SparsePolynomial<F, T>
type Output = SparsePolynomial<F, T>
The resulting type after applying the
+
operator.Source§fn add(self, other: SparsePolynomial<F, T>) -> Self
fn add(self, other: SparsePolynomial<F, T>) -> Self
Performs the
+
operation. Read moreSource§impl<'a, F: Field, T: Term> AddAssign<&'a SparsePolynomial<F, T>> for SparsePolynomial<F, T>
impl<'a, F: Field, T: Term> AddAssign<&'a SparsePolynomial<F, T>> for SparsePolynomial<F, T>
Source§fn add_assign(&mut self, other: &'a SparsePolynomial<F, T>)
fn add_assign(&mut self, other: &'a SparsePolynomial<F, T>)
Performs the
+=
operation. Read moreSource§impl<'a, F: Field, T: Term> AddAssign<(F, &'a SparsePolynomial<F, T>)> for SparsePolynomial<F, T>
impl<'a, F: Field, T: Term> AddAssign<(F, &'a SparsePolynomial<F, T>)> for SparsePolynomial<F, T>
Source§fn add_assign(&mut self, (f, other): (F, &'a SparsePolynomial<F, T>))
fn add_assign(&mut self, (f, other): (F, &'a SparsePolynomial<F, T>))
Performs the
+=
operation. Read moreSource§impl<F: Field, T: Term> CanonicalDeserialize for SparsePolynomial<F, T>
impl<F: Field, T: Term> CanonicalDeserialize for SparsePolynomial<F, T>
Source§fn deserialize_with_mode<R: Read>(
reader: R,
compress: Compress,
validate: Validate,
) -> Result<Self, SerializationError>
fn deserialize_with_mode<R: Read>( reader: R, compress: Compress, validate: Validate, ) -> Result<Self, SerializationError>
The general deserialize method that takes in customization flags.
fn deserialize_compressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_compressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
Source§impl<F: Field, T: Term> CanonicalSerialize for SparsePolynomial<F, T>
impl<F: Field, T: Term> CanonicalSerialize for SparsePolynomial<F, T>
Source§fn serialize_with_mode<W: Write>(
&self,
writer: W,
compress: Compress,
) -> Result<(), SerializationError>
fn serialize_with_mode<W: Write>( &self, writer: W, compress: Compress, ) -> Result<(), SerializationError>
The general serialize method that takes in customization flags.
fn serialized_size(&self, compress: Compress) -> usize
fn serialize_compressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn compressed_size(&self) -> usize
fn serialize_uncompressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn uncompressed_size(&self) -> usize
Source§impl<F: Field> DenseMVPolynomial<F> for SparsePolynomial<F, SparseTerm>
impl<F: Field> DenseMVPolynomial<F> for SparsePolynomial<F, SparseTerm>
Source§fn rand<R: Rng>(d: usize, l: usize, rng: &mut R) -> Self
fn rand<R: Rng>(d: usize, l: usize, rng: &mut R) -> Self
Outputs an l
-variate polynomial which is the sum of l
d
-degree
univariate polynomials where each coefficient is sampled uniformly at random.
Source§fn from_coefficients_vec(num_vars: usize, terms: Vec<(F, SparseTerm)>) -> Self
fn from_coefficients_vec(num_vars: usize, terms: Vec<(F, SparseTerm)>) -> Self
Constructs a new polynomial from a list of tuples of the form (coeff, Self::Term)
§Examples
use ark_poly::{
polynomial::multivariate::{SparsePolynomial, SparseTerm, Term},
DenseMVPolynomial, Polynomial,
};
use ark_test_curves::bls12_381::Fq;
// Create a multivariate polynomial in 3 variables, with 4 terms:
// 2*x_0^3 + x_0*x_2 + x_1*x_2 + 5
let poly = SparsePolynomial::from_coefficients_vec(
3,
vec![
(Fq::from(2), SparseTerm::new(vec![(0, 3)])),
(Fq::from(1), SparseTerm::new(vec![(0, 1), (2, 1)])),
(Fq::from(1), SparseTerm::new(vec![(1, 1), (2, 1)])),
(Fq::from(5), SparseTerm::new(vec![])),
],
);
Source§fn terms(&self) -> &[(F, Self::Term)]
fn terms(&self) -> &[(F, Self::Term)]
Returns the terms of a self
as a list of tuples of the form (coeff, Self::Term)
Source§type Term = SparseTerm
type Term = SparseTerm
The type of the terms of
self
Source§fn from_coefficients_slice(num_vars: usize, terms: &[(F, Self::Term)]) -> Self
fn from_coefficients_slice(num_vars: usize, terms: &[(F, Self::Term)]) -> Self
Constructs a new polynomial from a list of tuples of the form
(coeff, Self::Term)
Source§impl<F: Field, T: Term> Neg for SparsePolynomial<F, T>
impl<F: Field, T: Term> Neg for SparsePolynomial<F, T>
Source§type Output = SparsePolynomial<F, T>
type Output = SparsePolynomial<F, T>
The resulting type after applying the
-
operator.Source§fn neg(self) -> SparsePolynomial<F, T>
fn neg(self) -> SparsePolynomial<F, T>
Performs the unary
-
operation. Read moreSource§impl<F: Field> Polynomial<F> for SparsePolynomial<F, SparseTerm>
impl<F: Field> Polynomial<F> for SparsePolynomial<F, SparseTerm>
Source§fn degree(&self) -> usize
fn degree(&self) -> usize
Returns the total degree of the polynomial
§Examples
use ark_poly::{
polynomial::multivariate::{SparsePolynomial, SparseTerm},
DenseMVPolynomial, Polynomial,
};
use ark_std::test_rng;
use ark_test_curves::bls12_381::Fq;
let rng = &mut test_rng();
// Create a multivariate polynomial of degree 7
let poly: SparsePolynomial<Fq, SparseTerm> = SparsePolynomial::rand(7, 2, rng);
assert_eq!(poly.degree(), 7);
Source§fn evaluate(&self, point: &Vec<F>) -> F
fn evaluate(&self, point: &Vec<F>) -> F
Evaluates self
at the given point
in Self::Point
.
§Examples
use ark_ff::UniformRand;
use ark_poly::{
polynomial::multivariate::{SparsePolynomial, SparseTerm, Term},
DenseMVPolynomial, Polynomial,
};
use ark_std::test_rng;
use ark_test_curves::bls12_381::Fq;
let rng = &mut test_rng();
let poly = SparsePolynomial::rand(4, 3, rng);
let random_point = vec![Fq::rand(rng); 3];
// The result will be a single element in the field.
let result: Fq = poly.evaluate(&random_point);
Source§impl<'a, 'b, F: Field, T: Term> Sub<&'a SparsePolynomial<F, T>> for &'b SparsePolynomial<F, T>
impl<'a, 'b, F: Field, T: Term> Sub<&'a SparsePolynomial<F, T>> for &'b SparsePolynomial<F, T>
Source§type Output = SparsePolynomial<F, T>
type Output = SparsePolynomial<F, T>
The resulting type after applying the
-
operator.Source§fn sub(self, other: &'a SparsePolynomial<F, T>) -> SparsePolynomial<F, T>
fn sub(self, other: &'a SparsePolynomial<F, T>) -> SparsePolynomial<F, T>
Performs the
-
operation. Read moreSource§impl<'a, F: Field, T: Term> SubAssign<&'a SparsePolynomial<F, T>> for SparsePolynomial<F, T>
impl<'a, F: Field, T: Term> SubAssign<&'a SparsePolynomial<F, T>> for SparsePolynomial<F, T>
Source§fn sub_assign(&mut self, other: &'a SparsePolynomial<F, T>)
fn sub_assign(&mut self, other: &'a SparsePolynomial<F, T>)
Performs the
-=
operation. Read moreSource§impl<F: Field, T: Term> Valid for SparsePolynomial<F, T>
impl<F: Field, T: Term> Valid for SparsePolynomial<F, T>
fn check(&self) -> Result<(), SerializationError>
fn batch_check<'a>(
batch: impl Iterator<Item = &'a Self> + Send,
) -> Result<(), SerializationError>where
Self: 'a,
impl<F: Field, T: Term> Eq for SparsePolynomial<F, T>
Auto Trait Implementations§
impl<F, T> Freeze for SparsePolynomial<F, T>
impl<F, T> RefUnwindSafe for SparsePolynomial<F, T>where
F: RefUnwindSafe,
T: RefUnwindSafe,
impl<F, T> Send for SparsePolynomial<F, T>
impl<F, T> Sync for SparsePolynomial<F, T>
impl<F, T> Unpin for SparsePolynomial<F, T>
impl<F, T> UnwindSafe for SparsePolynomial<F, T>where
F: 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
Mutably borrows from an owned value. Read more
Source§impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
fn hash<H>(&self) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
fn hash_uncompressed<H>(
&self,
) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)