pub struct SparsePolyRingBase<R: RingStore> { /* private fields */ }
Expand description
The univariate polynomial ring R[X]
. Polynomials are stored as sparse vectors of
coefficients, thus giving improved performance in the case that most coefficients are
zero.
Unless polynomials are very sparse, [DensePolyRing
] will provide better performance.
§Example
let ZZ = StaticRing::<i32>::RING;
let P = SparsePolyRing::new(ZZ, "X");
let x10_plus_1 = P.add(P.pow(P.indeterminate(), 10), P.int_hom().map(1));
let power = P.pow(x10_plus_1, 10);
assert_eq!(0, *P.coefficient_at(&power, 1));
This ring has a CanIsoFromTo
to dense_poly::DensePolyRingBase
.
let ZZ = StaticRing::<i32>::RING;
let P = SparsePolyRing::new(ZZ, "X");
let P2 = DensePolyRing::new(ZZ, "X");
let high_power_of_x = P.pow(P.indeterminate(), 10);
assert_el_eq!(P2, P2.pow(P2.indeterminate(), 10), &P.can_iso(&P2).unwrap().map(high_power_of_x));
Trait Implementations§
Source§impl<R, P> CanHomFrom<P> for SparsePolyRingBase<R>where
R: RingStore,
R::Type: CanHomFrom<<P::BaseRing as RingStore>::Type>,
P: ImplGenericCanIsoFromToMarker,
impl<R, P> CanHomFrom<P> for SparsePolyRingBase<R>where
R: RingStore,
R::Type: CanHomFrom<<P::BaseRing as RingStore>::Type>,
P: ImplGenericCanIsoFromToMarker,
Source§type Homomorphism = <<<SparsePolyRingBase<R> as RingExtension>::BaseRing as RingStore>::Type as CanHomFrom<<<P as RingExtension>::BaseRing as RingStore>::Type>>::Homomorphism
type Homomorphism = <<<SparsePolyRingBase<R> as RingExtension>::BaseRing as RingStore>::Type as CanHomFrom<<<P as RingExtension>::BaseRing as RingStore>::Type>>::Homomorphism
Data required to compute the action of the canonical homomorphism on ring elements.
Source§fn has_canonical_hom(&self, from: &P) -> Option<Self::Homomorphism>
fn has_canonical_hom(&self, from: &P) -> Option<Self::Homomorphism>
If there is a canonical homomorphism
from -> self
, returns Some(data)
, where
data
is additional data that can be used to compute the action of the homomorphism
on ring elements. Otherwise, None
is returned.Source§fn map_in(
&self,
from: &P,
el: P::Element,
hom: &Self::Homomorphism,
) -> Self::Element
fn map_in( &self, from: &P, el: P::Element, hom: &Self::Homomorphism, ) -> Self::Element
Evaluates the homomorphism.
Source§fn map_in_ref(
&self,
from: &S,
el: &S::Element,
hom: &Self::Homomorphism,
) -> Self::Element
fn map_in_ref( &self, from: &S, el: &S::Element, hom: &Self::Homomorphism, ) -> Self::Element
Evaluates the homomorphism, taking the element by reference.
Source§fn mul_assign_map_in(
&self,
from: &S,
lhs: &mut Self::Element,
rhs: S::Element,
hom: &Self::Homomorphism,
)
fn mul_assign_map_in( &self, from: &S, lhs: &mut Self::Element, rhs: S::Element, hom: &Self::Homomorphism, )
Evaluates the homomorphism on
rhs
, and multiplies the result to lhs
.Source§fn mul_assign_map_in_ref(
&self,
from: &S,
lhs: &mut Self::Element,
rhs: &S::Element,
hom: &Self::Homomorphism,
)
fn mul_assign_map_in_ref( &self, from: &S, lhs: &mut Self::Element, rhs: &S::Element, hom: &Self::Homomorphism, )
Evaluates the homomorphism on
rhs
, taking it by reference, and multiplies the result to lhs
.Source§fn fma_map_in(
&self,
from: &S,
lhs: &Self::Element,
rhs: &S::Element,
summand: Self::Element,
hom: &Self::Homomorphism,
) -> Self::Element
fn fma_map_in( &self, from: &S, lhs: &Self::Element, rhs: &S::Element, summand: Self::Element, hom: &Self::Homomorphism, ) -> Self::Element
Fused-multiply-add. Computes
summand + lhs * rhs
, where rhs
is mapped into the ring via the homomorphism.Source§impl<R1, R2> CanHomFrom<SparsePolyRingBase<R1>> for SparsePolyRingBase<R2>
impl<R1, R2> CanHomFrom<SparsePolyRingBase<R1>> for SparsePolyRingBase<R2>
Source§type Homomorphism = <<R2 as RingStore>::Type as CanHomFrom<<R1 as RingStore>::Type>>::Homomorphism
type Homomorphism = <<R2 as RingStore>::Type as CanHomFrom<<R1 as RingStore>::Type>>::Homomorphism
Data required to compute the action of the canonical homomorphism on ring elements.
Source§fn has_canonical_hom(
&self,
from: &SparsePolyRingBase<R1>,
) -> Option<Self::Homomorphism>
fn has_canonical_hom( &self, from: &SparsePolyRingBase<R1>, ) -> Option<Self::Homomorphism>
If there is a canonical homomorphism
from -> self
, returns Some(data)
, where
data
is additional data that can be used to compute the action of the homomorphism
on ring elements. Otherwise, None
is returned.Source§fn map_in_ref(
&self,
from: &SparsePolyRingBase<R1>,
el: &SparsePolyRingEl<R1>,
hom: &Self::Homomorphism,
) -> Self::Element
fn map_in_ref( &self, from: &SparsePolyRingBase<R1>, el: &SparsePolyRingEl<R1>, hom: &Self::Homomorphism, ) -> Self::Element
Evaluates the homomorphism, taking the element by reference.
Source§fn map_in(
&self,
from: &SparsePolyRingBase<R1>,
el: <SparsePolyRingBase<R1> as RingBase>::Element,
hom: &Self::Homomorphism,
) -> Self::Element
fn map_in( &self, from: &SparsePolyRingBase<R1>, el: <SparsePolyRingBase<R1> as RingBase>::Element, hom: &Self::Homomorphism, ) -> Self::Element
Evaluates the homomorphism.
Source§fn mul_assign_map_in(
&self,
from: &S,
lhs: &mut Self::Element,
rhs: S::Element,
hom: &Self::Homomorphism,
)
fn mul_assign_map_in( &self, from: &S, lhs: &mut Self::Element, rhs: S::Element, hom: &Self::Homomorphism, )
Evaluates the homomorphism on
rhs
, and multiplies the result to lhs
.Source§fn mul_assign_map_in_ref(
&self,
from: &S,
lhs: &mut Self::Element,
rhs: &S::Element,
hom: &Self::Homomorphism,
)
fn mul_assign_map_in_ref( &self, from: &S, lhs: &mut Self::Element, rhs: &S::Element, hom: &Self::Homomorphism, )
Evaluates the homomorphism on
rhs
, taking it by reference, and multiplies the result to lhs
.Source§fn fma_map_in(
&self,
from: &S,
lhs: &Self::Element,
rhs: &S::Element,
summand: Self::Element,
hom: &Self::Homomorphism,
) -> Self::Element
fn fma_map_in( &self, from: &S, lhs: &Self::Element, rhs: &S::Element, summand: Self::Element, hom: &Self::Homomorphism, ) -> Self::Element
Fused-multiply-add. Computes
summand + lhs * rhs
, where rhs
is mapped into the ring via the homomorphism.Source§impl<R, P> CanIsoFromTo<P> for SparsePolyRingBase<R>where
R: RingStore,
R::Type: CanIsoFromTo<<P::BaseRing as RingStore>::Type>,
P: ImplGenericCanIsoFromToMarker,
impl<R, P> CanIsoFromTo<P> for SparsePolyRingBase<R>where
R: RingStore,
R::Type: CanIsoFromTo<<P::BaseRing as RingStore>::Type>,
P: ImplGenericCanIsoFromToMarker,
Source§type Isomorphism = <<<SparsePolyRingBase<R> as RingExtension>::BaseRing as RingStore>::Type as CanIsoFromTo<<<P as RingExtension>::BaseRing as RingStore>::Type>>::Isomorphism
type Isomorphism = <<<SparsePolyRingBase<R> as RingExtension>::BaseRing as RingStore>::Type as CanIsoFromTo<<<P as RingExtension>::BaseRing as RingStore>::Type>>::Isomorphism
Data required to compute a preimage under the canonical homomorphism.
Source§fn has_canonical_iso(&self, from: &P) -> Option<Self::Isomorphism>
fn has_canonical_iso(&self, from: &P) -> Option<Self::Isomorphism>
If there is a canonical homomorphism
from -> self
, and this homomorphism
is an isomorphism, returns Some(data)
, where data
is additional data that
can be used to compute preimages under the homomorphism. Otherwise, None
is
returned.Source§impl<R1, R2> CanIsoFromTo<SparsePolyRingBase<R1>> for SparsePolyRingBase<R2>
impl<R1, R2> CanIsoFromTo<SparsePolyRingBase<R1>> for SparsePolyRingBase<R2>
Source§type Isomorphism = <<R2 as RingStore>::Type as CanIsoFromTo<<R1 as RingStore>::Type>>::Isomorphism
type Isomorphism = <<R2 as RingStore>::Type as CanIsoFromTo<<R1 as RingStore>::Type>>::Isomorphism
Data required to compute a preimage under the canonical homomorphism.
Source§fn has_canonical_iso(
&self,
from: &SparsePolyRingBase<R1>,
) -> Option<Self::Isomorphism>
fn has_canonical_iso( &self, from: &SparsePolyRingBase<R1>, ) -> Option<Self::Isomorphism>
If there is a canonical homomorphism
from -> self
, and this homomorphism
is an isomorphism, returns Some(data)
, where data
is additional data that
can be used to compute preimages under the homomorphism. Otherwise, None
is
returned.Source§fn map_out(
&self,
from: &SparsePolyRingBase<R1>,
el: Self::Element,
iso: &Self::Isomorphism,
) -> SparsePolyRingEl<R1>
fn map_out( &self, from: &SparsePolyRingBase<R1>, el: Self::Element, iso: &Self::Isomorphism, ) -> SparsePolyRingEl<R1>
Computes the preimage of
el
under the canonical homomorphism from -> self
.Source§impl<R: RingStore> Debug for SparsePolyRingBase<R>
impl<R: RingStore> Debug for SparsePolyRingBase<R>
Source§impl<R> DivisibilityRing for SparsePolyRingBase<R>
impl<R> DivisibilityRing for SparsePolyRingBase<R>
Source§fn checked_left_div(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
) -> Option<Self::Element>
fn checked_left_div( &self, lhs: &Self::Element, rhs: &Self::Element, ) -> Option<Self::Element>
Checks whether there is an element
x
such that rhs * x = lhs
, and
returns it if it exists. Read moreSource§type PreparedDivisorData = ()
type PreparedDivisorData = ()
Additional data associated to a fixed ring element that can be used
to speed up division by this ring element. Read more
Source§fn divides_left(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
fn divides_left(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
Returns whether there is an element
x
such that rhs * x = lhs
.
If you need such an element, consider using DivisibilityRing::checked_left_div()
. Read moreSource§fn divides(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
fn divides(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
Same as
DivisibilityRing::divides_left()
, but requires a commutative ring.Source§fn checked_div(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
) -> Option<Self::Element>
fn checked_div( &self, lhs: &Self::Element, rhs: &Self::Element, ) -> Option<Self::Element>
Same as
DivisibilityRing::checked_left_div()
, but requires a commutative ring.Source§fn is_unit(&self, x: &Self::Element) -> bool
fn is_unit(&self, x: &Self::Element) -> bool
Returns whether the given element is a unit, i.e. has an inverse.
Source§fn balance_factor<'a, I>(&self, _elements: I) -> Option<Self::Element>
fn balance_factor<'a, I>(&self, _elements: I) -> Option<Self::Element>
Function that computes a “balancing” factor of a sequence of ring elements.
The only use of the balancing factor is to increase performance, in particular,
dividing all elements in the sequence by this factor should make them
“smaller” resp. cheaper to process. Read more
Source§fn prepare_divisor(&self, _: &Self::Element) -> Self::PreparedDivisorData
fn prepare_divisor(&self, _: &Self::Element) -> Self::PreparedDivisorData
“Prepares” an element of this ring for division. Read more
Source§fn checked_left_div_prepared(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
_rhs_prep: &Self::PreparedDivisorData,
) -> Option<Self::Element>
fn checked_left_div_prepared( &self, lhs: &Self::Element, rhs: &Self::Element, _rhs_prep: &Self::PreparedDivisorData, ) -> Option<Self::Element>
Same as
DivisibilityRing::checked_left_div()
but for a prepared divisor. Read moreSource§fn divides_left_prepared(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
_rhs_prep: &Self::PreparedDivisorData,
) -> bool
fn divides_left_prepared( &self, lhs: &Self::Element, rhs: &Self::Element, _rhs_prep: &Self::PreparedDivisorData, ) -> bool
Same as
DivisibilityRing::divides_left()
but for a prepared divisor. Read moreSource§fn is_unit_prepared(&self, x: &PreparedDivisor<Self>) -> bool
fn is_unit_prepared(&self, x: &PreparedDivisor<Self>) -> bool
Same as
DivisibilityRing::is_unit()
but for a prepared divisor. Read moreSource§impl<R> EuclideanRing for SparsePolyRingBase<R>
impl<R> EuclideanRing for SparsePolyRingBase<R>
Source§fn euclidean_div_rem(
&self,
lhs: Self::Element,
rhs: &Self::Element,
) -> (Self::Element, Self::Element)
fn euclidean_div_rem( &self, lhs: Self::Element, rhs: &Self::Element, ) -> (Self::Element, Self::Element)
Computes euclidean division with remainder. Read more
Source§fn euclidean_deg(&self, val: &Self::Element) -> Option<usize>
fn euclidean_deg(&self, val: &Self::Element) -> Option<usize>
Defines how “small” an element is. For details, see
EuclideanRing
.Source§impl<R> PartialEq for SparsePolyRingBase<R>where
R: RingStore,
impl<R> PartialEq for SparsePolyRingBase<R>where
R: RingStore,
Source§impl<R> PolyRing for SparsePolyRingBase<R>where
R: RingStore,
impl<R> PolyRing for SparsePolyRingBase<R>where
R: RingStore,
Source§type TermsIterator<'a> = TermIterator<'a, R>
where
Self: 'a
type TermsIterator<'a> = TermIterator<'a, R> where Self: 'a
Type of the iterator over all non-zero terms of a polynomial in this ring,
as returned by
PolyRing::terms()
.Source§fn indeterminate(&self) -> Self::Element
fn indeterminate(&self) -> Self::Element
Returns the indeterminate
X
generating this polynomial ring.Source§fn terms<'a>(&'a self, f: &'a Self::Element) -> TermIterator<'a, R> ⓘ
fn terms<'a>(&'a self, f: &'a Self::Element) -> TermIterator<'a, R> ⓘ
Returns all the nonzero terms of the given polynomial. Read more
Source§fn add_assign_from_terms<I>(&self, lhs: &mut Self::Element, rhs: I)
fn add_assign_from_terms<I>(&self, lhs: &mut Self::Element, rhs: I)
Adds the given terms to the given polynomial.
Source§fn coefficient_at<'a>(
&'a self,
f: &'a Self::Element,
i: usize,
) -> &'a El<Self::BaseRing>
fn coefficient_at<'a>( &'a self, f: &'a Self::Element, i: usize, ) -> &'a El<Self::BaseRing>
Returns the coefficient of
f
that corresponds to the monomial X^i
.Source§fn degree(&self, f: &Self::Element) -> Option<usize>
fn degree(&self, f: &Self::Element) -> Option<usize>
Returns the degree of the polynomial
f
, i.e. the value d
such that f
can be written as
f(X) = a0 + a1 * X + a2 * X^2 + ... + ad * X^d
. Returns None
if f
is zero.Source§fn div_rem_monic(
&self,
lhs: Self::Element,
rhs: &Self::Element,
) -> (Self::Element, Self::Element)
fn div_rem_monic( &self, lhs: Self::Element, rhs: &Self::Element, ) -> (Self::Element, Self::Element)
Compute the euclidean division by a monic polynomial
rhs
. Read moreSource§fn mul_assign_monomial(&self, lhs: &mut Self::Element, rhs_power: usize)
fn mul_assign_monomial(&self, lhs: &mut Self::Element, rhs_power: usize)
Multiplies the given polynomial with
X^rhs_power
.Source§fn truncate_monomials(
&self,
lhs: &mut Self::Element,
truncated_at_inclusive: usize,
)
fn truncate_monomials( &self, lhs: &mut Self::Element, truncated_at_inclusive: usize, )
Truncates the monomials of the given polynomial from the given position on, i.e.
computes the remainder of the polynomial division of
lhs
by X^truncated_at_inclusive
.Source§fn map_terms<P, H>(&self, from: &P, el: &P::Element, hom: H) -> Self::Element
fn map_terms<P, H>(&self, from: &P, el: &P::Element, hom: H) -> Self::Element
Computes the polynomial whose coefficients are the images of the coefficients of
el
under the given homomorphism. Read moreSource§impl<R> PrincipalIdealRing for SparsePolyRingBase<R>
impl<R> PrincipalIdealRing for SparsePolyRingBase<R>
Source§fn checked_div_min(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
) -> Option<Self::Element>
fn checked_div_min( &self, lhs: &Self::Element, rhs: &Self::Element, ) -> Option<Self::Element>
Similar to
DivisibilityRing::checked_left_div()
this computes a “quotient” q
of lhs
and rhs
, if it exists. However, we impose the additional constraint
that this quotient be minimal, i.e. there is no q'
with q' | q
properly and
q' * rhs = lhs
. Read moreSource§fn extended_ideal_gen(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
) -> (Self::Element, Self::Element, Self::Element)
fn extended_ideal_gen( &self, lhs: &Self::Element, rhs: &Self::Element, ) -> (Self::Element, Self::Element, Self::Element)
Computes a Bezout identity for the generator
g
of the ideal (lhs, rhs)
as g = s * lhs + t * rhs
. Read moreSource§fn ideal_gen(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
fn ideal_gen(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
Computes a generator
g
of the ideal (lhs, rhs) = (g)
, also known as greatest
common divisor. Read moreSource§fn annihilator(&self, val: &Self::Element) -> Self::Element
fn annihilator(&self, val: &Self::Element) -> Self::Element
Source§fn create_elimination_matrix(
&self,
a: &Self::Element,
b: &Self::Element,
) -> ([Self::Element; 4], Self::Element)
fn create_elimination_matrix( &self, a: &Self::Element, b: &Self::Element, ) -> ([Self::Element; 4], Self::Element)
Creates a matrix
A
of unit determinant such that A * (a, b)^T = (d, 0)
.
Returns (A, d)
.Source§fn ideal_gen_with_controller<Controller>(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
_: Controller,
) -> Self::Elementwhere
Controller: ComputationController,
fn ideal_gen_with_controller<Controller>(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
_: Controller,
) -> Self::Elementwhere
Controller: ComputationController,
As
PrincipalIdealRing::ideal_gen()
, this computes a generator of the ideal (lhs, rhs)
.
However, it additionally accepts a ComputationController
to customize the performed
computation.Source§impl<R: RingStore> RingBase for SparsePolyRingBase<R>
impl<R: RingStore> RingBase for SparsePolyRingBase<R>
Source§type Element = SparsePolyRingEl<R>
type Element = SparsePolyRingEl<R>
Type of elements of the ring
fn clone_el(&self, val: &Self::Element) -> Self::Element
fn add_assign_ref(&self, lhs: &mut Self::Element, rhs: &Self::Element)
fn add_assign(&self, lhs: &mut Self::Element, rhs: Self::Element)
fn sub_assign_ref(&self, lhs: &mut Self::Element, rhs: &Self::Element)
fn negate_inplace(&self, lhs: &mut Self::Element)
fn mul_assign(&self, lhs: &mut Self::Element, rhs: Self::Element)
fn mul_assign_ref(&self, lhs: &mut Self::Element, rhs: &Self::Element)
fn zero(&self) -> Self::Element
fn from_int(&self, value: i32) -> Self::Element
fn eq_el(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
Source§fn is_commutative(&self) -> bool
fn is_commutative(&self) -> bool
Returns whether the ring is commutative, i.e.
a * b = b * a
for all elements a, b
.
Note that addition is assumed to be always commutative.Source§fn is_noetherian(&self) -> bool
fn is_noetherian(&self) -> bool
Returns whether the ring is noetherian, i.e. every ideal is finitely generated. Read more
Source§fn dbg_within<'a>(
&self,
value: &Self::Element,
out: &mut Formatter<'a>,
env: EnvBindingStrength,
) -> Result
fn dbg_within<'a>( &self, value: &Self::Element, out: &mut Formatter<'a>, env: EnvBindingStrength, ) -> Result
Writes a human-readable representation of
value
to out
, taking into account the possible context
to place parenthesis as needed. Read morefn square(&self, value: &mut Self::Element)
fn mul_ref(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
fn mul_assign_int(&self, lhs: &mut Self::Element, rhs: i32)
Source§fn characteristic<I: IntegerRingStore + Copy>(&self, ZZ: I) -> Option<El<I>>where
I::Type: IntegerRing,
fn characteristic<I: IntegerRingStore + Copy>(&self, ZZ: I) -> Option<El<I>>where
I::Type: IntegerRing,
Returns the characteristic of this ring as an element of the given
implementation of
ZZ
. Read moreSource§fn is_approximate(&self) -> bool
fn is_approximate(&self) -> bool
Returns whether this ring computes with approximations to elements.
This would usually be the case for rings that are based on
f32
or
f64
, to represent real or complex numbers. Read morefn one(&self) -> Self::Element
fn neg_one(&self) -> Self::Element
fn is_zero(&self, value: &Self::Element) -> bool
fn is_one(&self, value: &Self::Element) -> bool
fn is_neg_one(&self, value: &Self::Element) -> bool
Source§fn fma(
&self,
lhs: &Self::Element,
rhs: &Self::Element,
summand: Self::Element,
) -> Self::Element
fn fma( &self, lhs: &Self::Element, rhs: &Self::Element, summand: Self::Element, ) -> Self::Element
Fused-multiply-add. This computes
summand + lhs * rhs
.fn negate(&self, value: Self::Element) -> Self::Element
fn sub_assign(&self, lhs: &mut Self::Element, rhs: Self::Element)
fn mul_int(&self, lhs: Self::Element, rhs: i32) -> Self::Element
fn mul_int_ref(&self, lhs: &Self::Element, rhs: i32) -> Self::Element
Source§fn fma_int(
&self,
lhs: &Self::Element,
rhs: i32,
summand: Self::Element,
) -> Self::Element
fn fma_int( &self, lhs: &Self::Element, rhs: i32, summand: Self::Element, ) -> Self::Element
Fused-multiply-add with an integer. This computes
summand + lhs * rhs
.Source§fn sub_self_assign(&self, lhs: &mut Self::Element, rhs: Self::Element)
fn sub_self_assign(&self, lhs: &mut Self::Element, rhs: Self::Element)
Computes
lhs := rhs - lhs
.Source§fn sub_self_assign_ref(&self, lhs: &mut Self::Element, rhs: &Self::Element)
fn sub_self_assign_ref(&self, lhs: &mut Self::Element, rhs: &Self::Element)
Computes
lhs := rhs - lhs
.fn add_ref(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
fn add_ref_fst(&self, lhs: &Self::Element, rhs: Self::Element) -> Self::Element
fn add_ref_snd(&self, lhs: Self::Element, rhs: &Self::Element) -> Self::Element
fn add(&self, lhs: Self::Element, rhs: Self::Element) -> Self::Element
fn sub_ref(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
fn sub_ref_fst(&self, lhs: &Self::Element, rhs: Self::Element) -> Self::Element
fn sub_ref_snd(&self, lhs: Self::Element, rhs: &Self::Element) -> Self::Element
fn sub(&self, lhs: Self::Element, rhs: Self::Element) -> Self::Element
fn mul_ref_fst(&self, lhs: &Self::Element, rhs: Self::Element) -> Self::Element
fn mul_ref_snd(&self, lhs: Self::Element, rhs: &Self::Element) -> Self::Element
fn mul(&self, lhs: Self::Element, rhs: Self::Element) -> Self::Element
Source§fn pow_gen<R: RingStore>(
&self,
x: Self::Element,
power: &El<R>,
integers: R,
) -> Self::Elementwhere
R::Type: IntegerRing,
fn pow_gen<R: RingStore>(
&self,
x: Self::Element,
power: &El<R>,
integers: R,
) -> Self::Elementwhere
R::Type: IntegerRing,
Raises
x
to the power of an arbitrary, nonnegative integer given by
a custom integer ring implementation. Read moreSource§impl<R: RingStore> RingExtension for SparsePolyRingBase<R>
impl<R: RingStore> RingExtension for SparsePolyRingBase<R>
Source§fn from(&self, x: El<Self::BaseRing>) -> Self::Element
fn from(&self, x: El<Self::BaseRing>) -> Self::Element
Maps an element of the base ring into this ring. Read more
Source§fn from_ref(&self, x: &El<Self::BaseRing>) -> Self::Element
fn from_ref(&self, x: &El<Self::BaseRing>) -> Self::Element
Maps an element of the base ring (given as reference) into this ring.
Source§fn mul_assign_base(&self, lhs: &mut Self::Element, rhs: &El<Self::BaseRing>)
fn mul_assign_base(&self, lhs: &mut Self::Element, rhs: &El<Self::BaseRing>)
Computes
lhs := lhs * rhs
, where rhs
is mapped into this
ring via RingExtension::from_ref()
. Note that this may be
faster than self.mul_assign(lhs, self.from_ref(rhs))
.fn fma_base( &self, lhs: &Self::Element, rhs: &El<Self::BaseRing>, summand: Self::Element, ) -> Self::Element
Source§fn mul_assign_base_through_hom<S: ?Sized + RingBase, H: Homomorphism<S, <Self::BaseRing as RingStore>::Type>>(
&self,
lhs: &mut Self::Element,
rhs: &S::Element,
hom: H,
)
fn mul_assign_base_through_hom<S: ?Sized + RingBase, H: Homomorphism<S, <Self::BaseRing as RingStore>::Type>>( &self, lhs: &mut Self::Element, rhs: &S::Element, hom: H, )
Computes
lhs := lhs * rhs
, where rhs
is mapped into this ring
via the given homomorphism, followed by the inclusion (as specified by
RingExtension::from_ref()
). Read moreimpl<R> Domain for SparsePolyRingBase<R>
impl<R> ImplGenericCanIsoFromToMarker for SparsePolyRingBase<R>where
R: RingStore,
Auto Trait Implementations§
impl<R> Freeze for SparsePolyRingBase<R>
impl<R> RefUnwindSafe for SparsePolyRingBase<R>
impl<R> Send for SparsePolyRingBase<R>
impl<R> Sync for SparsePolyRingBase<R>
impl<R> Unpin for SparsePolyRingBase<R>
impl<R> UnwindSafe for SparsePolyRingBase<R>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<R> ComputeInnerProduct for R
impl<R> ComputeInnerProduct for R
Source§default fn inner_product_ref_fst<'a, I>(
&self,
els: I,
) -> <R as RingBase>::Element
default fn inner_product_ref_fst<'a, I>( &self, els: I, ) -> <R as RingBase>::Element
Available on crate feature
unstable-enable
only.Computes the inner product
sum_i lhs[i] * rhs[i]
.Source§default fn inner_product_ref<'a, I>(&self, els: I) -> <R as RingBase>::Element
default fn inner_product_ref<'a, I>(&self, els: I) -> <R as RingBase>::Element
Available on crate feature
unstable-enable
only.Computes the inner product
sum_i lhs[i] * rhs[i]
.Source§impl<R, S> CooleyTuckeyButterfly<S> for R
impl<R, S> CooleyTuckeyButterfly<S> for R
Source§default fn butterfly<V, H>(
&self,
hom: H,
values: &mut V,
twiddle: &<S as RingBase>::Element,
i1: usize,
i2: usize,
)
default fn butterfly<V, H>( &self, hom: H, values: &mut V, twiddle: &<S as RingBase>::Element, i1: usize, i2: usize, )
👎Deprecated
Should compute
(values[i1], values[i2]) := (values[i1] + twiddle * values[i2], values[i1] - twiddle * values[i2])
. Read moreSource§default fn butterfly_new<H>(
hom: H,
x: &mut <R as RingBase>::Element,
y: &mut <R as RingBase>::Element,
twiddle: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
default fn butterfly_new<H>(
hom: H,
x: &mut <R as RingBase>::Element,
y: &mut <R as RingBase>::Element,
twiddle: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
Should compute
(x, y) := (x + twiddle * y, x - twiddle * y)
. Read moreSource§default fn inv_butterfly<V, H>(
&self,
hom: H,
values: &mut V,
twiddle: &<S as RingBase>::Element,
i1: usize,
i2: usize,
)
default fn inv_butterfly<V, H>( &self, hom: H, values: &mut V, twiddle: &<S as RingBase>::Element, i1: usize, i2: usize, )
👎Deprecated
Should compute
(values[i1], values[i2]) := (values[i1] + values[i2], (values[i1] - values[i2]) * twiddle)
Read moreSource§default fn inv_butterfly_new<H>(
hom: H,
x: &mut <R as RingBase>::Element,
y: &mut <R as RingBase>::Element,
twiddle: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
default fn inv_butterfly_new<H>(
hom: H,
x: &mut <R as RingBase>::Element,
y: &mut <R as RingBase>::Element,
twiddle: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
Should compute
(x, y) := (x + y, (x - y) * twiddle)
Read moreSource§default fn prepare_for_fft(&self, _value: &mut <R as RingBase>::Element)
default fn prepare_for_fft(&self, _value: &mut <R as RingBase>::Element)
Possibly pre-processes elements before the FFT starts. Here you can
bring ring element into a certain form, and assume during
CooleyTuckeyButterfly::butterfly_new()
that the inputs are in this form.Source§default fn prepare_for_inv_fft(&self, _value: &mut <R as RingBase>::Element)
default fn prepare_for_inv_fft(&self, _value: &mut <R as RingBase>::Element)
Possibly pre-processes elements before the inverse FFT starts. Here you can
bring ring element into a certain form, and assume during
CooleyTuckeyButterfly::inv_butterfly_new()
that the inputs are in this form.Source§impl<R, S> CooleyTukeyRadix3Butterfly<S> for R
impl<R, S> CooleyTukeyRadix3Butterfly<S> for R
Source§default fn prepare_for_fft(&self, _value: &mut <R as RingBase>::Element)
Available on crate feature unstable-enable
only.
default fn prepare_for_fft(&self, _value: &mut <R as RingBase>::Element)
unstable-enable
only.Possibly pre-processes elements before the FFT starts. Here you can bring ring element
into a certain form, and assume during CooleyTukeyRadix3Butterfly::butterfly()
that the inputs are in this form.
Source§default fn prepare_for_inv_fft(&self, _value: &mut <R as RingBase>::Element)
Available on crate feature unstable-enable
only.
default fn prepare_for_inv_fft(&self, _value: &mut <R as RingBase>::Element)
unstable-enable
only.Possibly pre-processes elements before the inverse FFT starts. Here you can bring ring element
into a certain form, and assume during CooleyTukeyRadix3Butterfly::inv_butterfly()
that the inputs are in this form.
Source§default fn butterfly<H>(
hom: H,
a: &mut <R as RingBase>::Element,
b: &mut <R as RingBase>::Element,
c: &mut <R as RingBase>::Element,
z: &<S as RingBase>::Element,
t: &<S as RingBase>::Element,
t_sqr_z_sqr: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
default fn butterfly<H>(
hom: H,
a: &mut <R as RingBase>::Element,
b: &mut <R as RingBase>::Element,
c: &mut <R as RingBase>::Element,
z: &<S as RingBase>::Element,
t: &<S as RingBase>::Element,
t_sqr_z_sqr: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
Available on crate feature
unstable-enable
only.Should compute
(a, b, c) := (a + t b + t^2 c, a + t z b + t^2 z^2 c, a + t z^2 b + t^2 z c)
. Read moreSource§default fn inv_butterfly<H>(
hom: H,
a: &mut <R as RingBase>::Element,
b: &mut <R as RingBase>::Element,
c: &mut <R as RingBase>::Element,
z: &<S as RingBase>::Element,
t: &<S as RingBase>::Element,
t_sqr: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
default fn inv_butterfly<H>(
hom: H,
a: &mut <R as RingBase>::Element,
b: &mut <R as RingBase>::Element,
c: &mut <R as RingBase>::Element,
z: &<S as RingBase>::Element,
t: &<S as RingBase>::Element,
t_sqr: &<S as RingBase>::Element,
)where
H: Homomorphism<S, R>,
Available on crate feature
unstable-enable
only.Should compute
(a, b, c) := (a + b + c, t (a + z^2 b + z c), t^2 (a + z b + z^2 c))
. Read moreSource§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>
Converts
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>
Converts
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<R> KaratsubaHint for R
impl<R> KaratsubaHint for R
Source§default fn karatsuba_threshold(&self) -> usize
default fn karatsuba_threshold(&self) -> usize
Available on crate feature
unstable-enable
only.Define a threshold from which on
KaratsubaAlgorithm
will use the Karatsuba algorithm. Read moreSource§impl<R> LinSolveRing for Rwhere
R: PrincipalIdealRing + ?Sized,
impl<R> LinSolveRing for Rwhere
R: PrincipalIdealRing + ?Sized,
Source§default fn solve_right<V1, V2, V3, A>(
&self,
lhs: SubmatrixMut<'_, V1, <R as RingBase>::Element>,
rhs: SubmatrixMut<'_, V2, <R as RingBase>::Element>,
out: SubmatrixMut<'_, V3, <R as RingBase>::Element>,
allocator: A,
) -> SolveResultwhere
V1: AsPointerToSlice<<R as RingBase>::Element>,
V2: AsPointerToSlice<<R as RingBase>::Element>,
V3: AsPointerToSlice<<R as RingBase>::Element>,
A: Allocator,
default fn solve_right<V1, V2, V3, A>(
&self,
lhs: SubmatrixMut<'_, V1, <R as RingBase>::Element>,
rhs: SubmatrixMut<'_, V2, <R as RingBase>::Element>,
out: SubmatrixMut<'_, V3, <R as RingBase>::Element>,
allocator: A,
) -> SolveResultwhere
V1: AsPointerToSlice<<R as RingBase>::Element>,
V2: AsPointerToSlice<<R as RingBase>::Element>,
V3: AsPointerToSlice<<R as RingBase>::Element>,
A: Allocator,
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R> StrassenHint for R
impl<R> StrassenHint for R
Source§default fn strassen_threshold(&self) -> usize
default fn strassen_threshold(&self) -> usize
Available on crate feature
unstable-enable
only.Define a threshold from which on
StrassenAlgorithm
will use the Strassen algorithm. Read more