pub struct MPZBase;mpir only.Expand description
Arbitrary-precision integer ring, implemented by binding to the well-known and heavily optimized library mpir (fork of gmp).
TODO: Remove Copy at next breaking release.
Implementations§
Source§impl MPZBase
impl MPZBase
Sourcepub fn from_le_bytes(&self, dst: &mut MPZEl, input: &[u8])
pub fn from_le_bytes(&self, dst: &mut MPZEl, input: &[u8])
Interprets the bytes in input as little endian bytes and returns the
nonnegative integer represented by them.
Sourcepub fn from_base_u64_repr(&self, dst: &mut MPZEl, input: &[u64])
pub fn from_base_u64_repr(&self, dst: &mut MPZEl, input: &[u64])
Interprets the u64 as digits w.r.t. base 2^64 (with least-significant digit first)
and returns the nonnegative integer represented by them.
pub fn abs_base_u64_repr_len(&self, src: &MPZEl) -> usize
Sourcepub fn abs_base_u64_repr(&self, src: &MPZEl, out: &mut [u64])
pub fn abs_base_u64_repr(&self, src: &MPZEl, out: &mut [u64])
Inverse to MPZBase::from_base_u64_repr().
pub fn to_le_bytes_len(&self, src: &MPZEl) -> usize
Sourcepub fn to_le_bytes(&self, src: &MPZEl, out: &mut [u8])
pub fn to_le_bytes(&self, src: &MPZEl, out: &mut [u8])
Inverse to MPZBase::from_le_bytes().
Trait Implementations§
Source§impl<'de> Deserialize<'de> for MPZBase
impl<'de> Deserialize<'de> for MPZBase
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl DivisibilityRing for MPZBase
impl DivisibilityRing for MPZBase
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>
x such that rhs * x = lhs, and
returns it if it exists. Read moreSource§fn balance_factor<'a, I>(&self, elements: I) -> Option<Self::Element>
fn balance_factor<'a, I>(&self, elements: I) -> Option<Self::Element>
Source§type PreparedDivisorData = ()
type PreparedDivisorData = ()
Source§fn divides_left(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
fn divides_left(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
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
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>
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
Source§fn prepare_divisor(&self, _: &Self::Element) -> Self::PreparedDivisorData
fn prepare_divisor(&self, _: &Self::Element) -> Self::PreparedDivisorData
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>
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
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
DivisibilityRing::is_unit() but for a prepared divisor. Read moreSource§impl EuclideanRing for MPZBase
impl EuclideanRing for MPZBase
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)
Source§fn euclidean_rem(
&self,
lhs: Self::Element,
rhs: &Self::Element,
) -> Self::Element
fn euclidean_rem( &self, lhs: Self::Element, rhs: &Self::Element, ) -> Self::Element
Source§fn euclidean_div(
&self,
lhs: Self::Element,
rhs: &Self::Element,
) -> Self::Element
fn euclidean_div( &self, lhs: Self::Element, rhs: &Self::Element, ) -> Self::Element
Source§fn euclidean_deg(&self, val: &Self::Element) -> Option<usize>
fn euclidean_deg(&self, val: &Self::Element) -> Option<usize>
EuclideanRing.Source§impl EvalPolyLocallyRing for MPZBase
impl EvalPolyLocallyRing for MPZBase
Source§type LocalComputationData<'ring> = RingValue<ZnBase<RingValue<AsFieldBase<RingValue<ZnBase>>>, RingRef<'ring, MPZBase>>>
where
Self: 'ring
type LocalComputationData<'ring> = RingValue<ZnBase<RingValue<AsFieldBase<RingValue<ZnBase>>>, RingRef<'ring, MPZBase>>> where Self: 'ring
unstable-enable only.Source§type LocalRing<'ring> = RingValue<AsFieldBase<RingValue<ZnBase>>>
where
Self: 'ring
type LocalRing<'ring> = RingValue<AsFieldBase<RingValue<ZnBase>>> where Self: 'ring
unstable-enable only.Source§type LocalRingBase<'ring> = AsFieldBase<RingValue<ZnBase>>
where
Self: 'ring
type LocalRingBase<'ring> = AsFieldBase<RingValue<ZnBase>> where Self: 'ring
unstable-enable only.Source§fn ln_pseudo_norm(&self, el: &Self::Element) -> f64
fn ln_pseudo_norm(&self, el: &Self::Element) -> f64
unstable-enable only.Source§fn local_computation<'ring>(
&'ring self,
ln_pseudo_norm_bound: f64,
) -> Self::LocalComputationData<'ring>
fn local_computation<'ring>( &'ring self, ln_pseudo_norm_bound: f64, ) -> Self::LocalComputationData<'ring>
unstable-enable only.Source§fn local_ring_at<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
i: usize,
) -> Self::LocalRing<'ring>where
Self: 'ring,
fn local_ring_at<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
i: usize,
) -> Self::LocalRing<'ring>where
Self: 'ring,
unstable-enable only.i-th local ring belonging to the given computation.Source§fn local_ring_count<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
) -> usizewhere
Self: 'ring,
fn local_ring_count<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
) -> usizewhere
Self: 'ring,
unstable-enable only.k of local rings that are required
to get the correct result of the given computation.Source§fn reduce<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
el: &Self::Element,
) -> Vec<<Self::LocalRingBase<'ring> as RingBase>::Element>where
Self: 'ring,
fn reduce<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
el: &Self::Element,
) -> Vec<<Self::LocalRingBase<'ring> as RingBase>::Element>where
Self: 'ring,
unstable-enable only.R -> R1 x ... x Rk, i.e. maps the given element into each of
the local rings.Source§fn lift_combine<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
el: &[<Self::LocalRingBase<'ring> as RingBase>::Element],
) -> Self::Elementwhere
Self: 'ring,
fn lift_combine<'ring>(
&self,
computation: &Self::LocalComputationData<'ring>,
el: &[<Self::LocalRingBase<'ring> as RingBase>::Element],
) -> Self::Elementwhere
Self: 'ring,
unstable-enable only.R -> R1 x ... x Rk, i.e. a ring element x that reduces
to each of the given local rings under the map EvalPolyLocallyRing::reduce(). Read moreSource§impl FiniteRingSpecializable for MPZBase
impl FiniteRingSpecializable for MPZBase
Source§fn specialize<O: FiniteRingOperation<Self>>(op: O) -> O::Output
fn specialize<O: FiniteRingOperation<Self>>(op: O) -> O::Output
unstable-enable only.Source§fn is_finite_ring() -> bool
fn is_finite_ring() -> bool
unstable-enable only.Source§impl HashableElRing for MPZBase
impl HashableElRing for MPZBase
Source§impl IntCast<MPZBase> for RustBigintRingBase
impl IntCast<MPZBase> for RustBigintRingBase
Source§impl IntCast<RustBigintRingBase> for MPZBase
impl IntCast<RustBigintRingBase> for MPZBase
Source§fn cast(&self, _: &RustBigintRingBase, el: RustBigint) -> Self::Element
fn cast(&self, _: &RustBigintRingBase, el: RustBigint) -> Self::Element
Source§impl IntegerPolyGCDRing for MPZBase
impl IntegerPolyGCDRing for MPZBase
Source§type LocalRingAsZnBase<'ring> = <MPZBase as PolyGCDLocallyDomain>::LocalRingBase<'ring>
where
Self: 'ring
type LocalRingAsZnBase<'ring> = <MPZBase as PolyGCDLocallyDomain>::LocalRingBase<'ring> where Self: 'ring
unstable-enable only.Source§type LocalRingAsZn<'ring> = <MPZBase as PolyGCDLocallyDomain>::LocalRing<'ring>
where
Self: 'ring
type LocalRingAsZn<'ring> = <MPZBase as PolyGCDLocallyDomain>::LocalRing<'ring> where Self: 'ring
unstable-enable only.Source§fn local_ring_as_zn<'a, 'ring>(
&self,
local_field: &'a Self::LocalRing<'ring>,
) -> &'a Self::LocalRingAsZn<'ring>where
Self: 'ring,
fn local_ring_as_zn<'a, 'ring>(
&self,
local_field: &'a Self::LocalRing<'ring>,
) -> &'a Self::LocalRingAsZn<'ring>where
Self: 'ring,
unstable-enable only.Source§fn local_ring_into_zn<'ring>(
&self,
local_field: Self::LocalRing<'ring>,
) -> Self::LocalRingAsZn<'ring>where
Self: 'ring,
fn local_ring_into_zn<'ring>(
&self,
local_field: Self::LocalRing<'ring>,
) -> Self::LocalRingAsZn<'ring>where
Self: 'ring,
unstable-enable only.Source§fn principal_ideal_generator<'ring>(
&self,
p: &Self::SuitableIdeal<'ring>,
) -> El<BigIntRing>where
Self: 'ring,
fn principal_ideal_generator<'ring>(
&self,
p: &Self::SuitableIdeal<'ring>,
) -> El<BigIntRing>where
Self: 'ring,
unstable-enable only.Source§impl IntegerRing for MPZBase
impl IntegerRing for MPZBase
Source§fn to_float_approx(&self, el: &Self::Element) -> f64
fn to_float_approx(&self, el: &Self::Element) -> f64
Source§fn from_float_approx(&self, el: f64) -> Option<Self::Element>
fn from_float_approx(&self, el: f64) -> Option<Self::Element>
None, although this is usually
the case on infinity and NaN. Read moreSource§fn mul_pow_2(&self, el: &mut Self::Element, power: usize)
fn mul_pow_2(&self, el: &mut Self::Element, power: usize)
Source§fn euclidean_div_pow_2(&self, el: &mut Self::Element, power: usize)
fn euclidean_div_pow_2(&self, el: &mut Self::Element, power: usize)
|remainder| < |divisor|, and thus would otherwise
leave multiple possible results). Read moreSource§fn abs_highest_set_bit(&self, value: &Self::Element) -> Option<usize>
fn abs_highest_set_bit(&self, value: &Self::Element) -> Option<usize>
abs(value),
or None if the value is zero. Read moreSource§fn abs_lowest_set_bit(&self, value: &Self::Element) -> Option<usize>
fn abs_lowest_set_bit(&self, value: &Self::Element) -> Option<usize>
abs(value),
or None if the value is zero. Read moreSource§fn rounded_div(&self, lhs: Self::Element, rhs: &Self::Element) -> Self::Element
fn rounded_div(&self, lhs: Self::Element, rhs: &Self::Element) -> Self::Element
round(0.5)), we round towards +/- infinity. Read moreSource§fn get_uniformly_random_bits<G: FnMut() -> u64>(
&self,
log2_bound_exclusive: usize,
rng: G,
) -> Self::Element
fn get_uniformly_random_bits<G: FnMut() -> u64>( &self, log2_bound_exclusive: usize, rng: G, ) -> Self::Element
[0, 2^log_bound_exclusive - 1], assuming that
rng provides uniformly random values in the whole range of u64.Source§fn representable_bits(&self) -> Option<usize>
fn representable_bits(&self) -> Option<usize>
n such that this ring can represent at least [-2^n, ..., 2^n - 1].
Returning None means that the size of representable integers is unbounded.Source§fn power_of_two(&self, power: usize) -> Self::Element
fn power_of_two(&self, power: usize) -> Self::Element
2^power in this integer ring.Source§impl InterpolationBaseRing for MPZBase
impl InterpolationBaseRing for MPZBase
Source§type ExtendedRing<'a> = RingRef<'a, MPZBase>
where
Self: 'a
type ExtendedRing<'a> = RingRef<'a, MPZBase> where Self: 'a
unstable-enable only.Source§type ExtendedRingBase<'a> = MPZBase
where
Self: 'a
type ExtendedRingBase<'a> = MPZBase where Self: 'a
unstable-enable only.Source§fn in_base<'a, S>(&self, _ext_ring: S, el: El<S>) -> Option<Self::Element>where
Self: 'a,
S: RingStore<Type = Self::ExtendedRingBase<'a>>,
fn in_base<'a, S>(&self, _ext_ring: S, el: El<S>) -> Option<Self::Element>where
Self: 'a,
S: RingStore<Type = Self::ExtendedRingBase<'a>>,
unstable-enable only.Source§fn in_extension<'a, S>(&self, _ext_ring: S, el: Self::Element) -> El<S>where
Self: 'a,
S: RingStore<Type = Self::ExtendedRingBase<'a>>,
fn in_extension<'a, S>(&self, _ext_ring: S, el: Self::Element) -> El<S>where
Self: 'a,
S: RingStore<Type = Self::ExtendedRingBase<'a>>,
unstable-enable only.Source§fn interpolation_points<'a>(
&'a self,
count: usize,
) -> (Self::ExtendedRing<'a>, Vec<El<Self::ExtendedRing<'a>>>)
fn interpolation_points<'a>( &'a self, count: usize, ) -> (Self::ExtendedRing<'a>, Vec<El<Self::ExtendedRing<'a>>>)
unstable-enable only.count points such that the difference between any two of them
is a non-zero-divisor. Read moreSource§impl OrderedRing for MPZBase
impl OrderedRing for MPZBase
Source§fn is_leq(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
fn is_leq(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
lhs <= rhs.Source§fn is_geq(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
fn is_geq(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
lhs >= rhs.Source§impl PolyGCDLocallyDomain for MPZBase
impl PolyGCDLocallyDomain for MPZBase
Source§type LocalRing<'ring> = RingValue<ZnBase<RingValue<MPZBase>>>
where
Self: 'ring
type LocalRing<'ring> = RingValue<ZnBase<RingValue<MPZBase>>> where Self: 'ring
unstable-enable only.Source§type LocalRingBase<'ring> = ZnBase<RingValue<MPZBase>>
where
Self: 'ring
type LocalRingBase<'ring> = ZnBase<RingValue<MPZBase>> where Self: 'ring
unstable-enable only.Source§type LocalFieldBase<'ring> = AsFieldBase<RingValue<ZnBase>>
where
Self: 'ring
type LocalFieldBase<'ring> = AsFieldBase<RingValue<ZnBase>> where Self: 'ring
unstable-enable only.Source§type LocalField<'ring> = RingValue<AsFieldBase<RingValue<ZnBase>>>
where
Self: 'ring
type LocalField<'ring> = RingValue<AsFieldBase<RingValue<ZnBase>>> where Self: 'ring
unstable-enable only.Source§type SuitableIdeal<'ring> = i64
where
Self: 'ring
type SuitableIdeal<'ring> = i64 where Self: 'ring
unstable-enable only.Source§fn reconstruct_ring_el<'local, 'element, 'ring, V1, V2>(
&self,
_p: &Self::SuitableIdeal<'ring>,
from: V1,
_e: usize,
x: V2,
) -> Self::Element
fn reconstruct_ring_el<'local, 'element, 'ring, V1, V2>( &self, _p: &Self::SuitableIdeal<'ring>, from: V1, _e: usize, x: V2, ) -> Self::Element
unstable-enable only.x in R such that x mod mi^e is equal to the given value,
for every maximal ideal mi over I.
In cases where the factors of polynomials in R[X] do not necessarily have coefficients
in R, this function might have to do rational reconstruction.Source§fn maximal_ideal_factor_count<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
) -> usizewhere
Self: 'ring,
fn maximal_ideal_factor_count<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
) -> usizewhere
Self: 'ring,
unstable-enable only.ideal.Source§fn lift_partial<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
from: (&Self::LocalRingBase<'ring>, usize),
to: (&Self::LocalRingBase<'ring>, usize),
max_ideal_idx: usize,
x: El<Self::LocalRing<'ring>>,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
fn lift_partial<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
from: (&Self::LocalRingBase<'ring>, usize),
to: (&Self::LocalRingBase<'ring>, usize),
max_ideal_idx: usize,
x: El<Self::LocalRing<'ring>>,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
unstable-enable only.y in R / mi^to_e such that y = x mod mi^from_e.
In particular, y does not have to be “short” in any sense, but any lift
is a valid result.Source§fn local_field_at<'ring>(
&self,
p: &Self::SuitableIdeal<'ring>,
max_ideal_idx: usize,
) -> Self::LocalField<'ring>where
Self: 'ring,
fn local_field_at<'ring>(
&self,
p: &Self::SuitableIdeal<'ring>,
max_ideal_idx: usize,
) -> Self::LocalField<'ring>where
Self: 'ring,
unstable-enable only.Source§fn local_ring_at<'ring>(
&self,
p: &Self::SuitableIdeal<'ring>,
e: usize,
max_ideal_idx: usize,
) -> Self::LocalRing<'ring>where
Self: 'ring,
fn local_ring_at<'ring>(
&self,
p: &Self::SuitableIdeal<'ring>,
e: usize,
max_ideal_idx: usize,
) -> Self::LocalRing<'ring>where
Self: 'ring,
unstable-enable only.R / mi^e, where mi is the i-th maximal ideal over I.Source§fn random_suitable_ideal<'ring, F>(
&'ring self,
rng: F,
) -> Self::SuitableIdeal<'ring>
fn random_suitable_ideal<'ring, F>( &'ring self, rng: F, ) -> Self::SuitableIdeal<'ring>
unstable-enable only.Source§fn base_ring_to_field<'ring>(
&self,
_ideal: &Self::SuitableIdeal<'ring>,
from: &Self::LocalRingBase<'ring>,
to: &Self::LocalFieldBase<'ring>,
max_ideal_idx: usize,
x: El<Self::LocalRing<'ring>>,
) -> El<Self::LocalField<'ring>>where
Self: 'ring,
fn base_ring_to_field<'ring>(
&self,
_ideal: &Self::SuitableIdeal<'ring>,
from: &Self::LocalRingBase<'ring>,
to: &Self::LocalFieldBase<'ring>,
max_ideal_idx: usize,
x: El<Self::LocalRing<'ring>>,
) -> El<Self::LocalField<'ring>>where
Self: 'ring,
unstable-enable only.R / miSource§fn field_to_base_ring<'ring>(
&self,
_ideal: &Self::SuitableIdeal<'ring>,
from: &Self::LocalFieldBase<'ring>,
to: &Self::LocalRingBase<'ring>,
max_ideal_idx: usize,
x: El<Self::LocalField<'ring>>,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
fn field_to_base_ring<'ring>(
&self,
_ideal: &Self::SuitableIdeal<'ring>,
from: &Self::LocalFieldBase<'ring>,
to: &Self::LocalRingBase<'ring>,
max_ideal_idx: usize,
x: El<Self::LocalField<'ring>>,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
unstable-enable only.R / miSource§fn reduce_ring_el<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
to: (&Self::LocalRingBase<'ring>, usize),
max_ideal_idx: usize,
x: Self::Element,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
fn reduce_ring_el<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
to: (&Self::LocalRingBase<'ring>, usize),
max_ideal_idx: usize,
x: Self::Element,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
unstable-enable only.Source§fn reduce_partial<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
from: (&Self::LocalRingBase<'ring>, usize),
to: (&Self::LocalRingBase<'ring>, usize),
max_ideal_idx: usize,
x: El<Self::LocalRing<'ring>>,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
fn reduce_partial<'ring>(
&self,
_p: &Self::SuitableIdeal<'ring>,
from: (&Self::LocalRingBase<'ring>, usize),
to: (&Self::LocalRingBase<'ring>, usize),
max_ideal_idx: usize,
x: El<Self::LocalRing<'ring>>,
) -> El<Self::LocalRing<'ring>>where
Self: 'ring,
unstable-enable only.Source§fn heuristic_exponent<'ring, 'a, I>(
&self,
p: &i64,
poly_deg: usize,
coefficients: I,
) -> usize
fn heuristic_exponent<'ring, 'a, I>( &self, p: &i64, poly_deg: usize, coefficients: I, ) -> usize
unstable-enable only.e such that we hope that the factors of a polynomial of given degree,
involving the given coefficient can already be read of (via PolyGCDLocallyDomain::reconstruct_ring_el())
their reductions modulo I^e. Note that this is just a heuristic, and if it does not work,
the implementation will gradually try larger e. Thus, even if this function returns constant
1, correctness will not be affected, but giving a good guess can improve performanceSource§impl PrincipalIdealRing for MPZBase
impl PrincipalIdealRing for MPZBase
Source§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)
g of the ideal (lhs, rhs)
as g = s * lhs + t * rhs. Read moreSource§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>
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 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)
A of unit determinant such that A * (a, b)^T = (d, 0).
Returns (A, d).Source§fn ideal_gen(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
fn ideal_gen(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
g of the ideal (lhs, rhs) = (g), also known as greatest
common divisor. Read moreSource§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,
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 RingBase for MPZBase
impl RingBase for MPZBase
fn clone_el(&self, val: &Self::Element) -> Self::Element
fn mul_ref(&self, lhs: &Self::Element, rhs: &Self::Element) -> Self::Element
fn negate_inplace(&self, lhs: &mut Self::Element)
fn zero(&self) -> Self::Element
fn one(&self) -> 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 add_assign(&self, lhs: &mut Self::Element, rhs: Self::Element)
fn add_assign_ref(&self, lhs: &mut Self::Element, rhs: &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 mul_assign_int(&self, lhs: &mut Self::Element, rhs: i32)
fn sub(&self, lhs: Self::Element, rhs: Self::Element) -> Self::Element
fn from_int(&self, value: i32) -> Self::Element
fn eq_el(&self, lhs: &Self::Element, rhs: &Self::Element) -> bool
fn is_zero(&self, val: &Self::Element) -> bool
fn is_one(&self, val: &Self::Element) -> bool
fn is_neg_one(&self, val: &Self::Element) -> bool
Source§fn is_noetherian(&self) -> bool
fn is_noetherian(&self) -> bool
Source§fn is_commutative(&self) -> bool
fn is_commutative(&self) -> bool
a * b = b * a for all elements a, b.
Note that addition is assumed to be always commutative.Source§fn is_approximate(&self) -> bool
fn is_approximate(&self) -> bool
f32 or
f64, to represent real or complex numbers. Read moreSource§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
value to out, taking into account the possible context
to place parenthesis as needed. Read moreSource§fn characteristic<I: IntegerRingStore + Copy>(
&self,
other_ZZ: I,
) -> Option<El<I>>where
I::Type: IntegerRing,
fn characteristic<I: IntegerRingStore + Copy>(
&self,
other_ZZ: I,
) -> Option<El<I>>where
I::Type: IntegerRing,
ZZ. Read morefn sub_assign_ref(&self, lhs: &mut Self::Element, rhs: &Self::Element)
fn neg_one(&self) -> Self::Element
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
summand + lhs * rhs.fn square(&self, value: &mut Self::Element)
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
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)
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)
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 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,
x to the power of an arbitrary, nonnegative integer given by
a custom integer ring implementation. Read moreSource§impl SerializableElementRing for MPZBase
impl SerializableElementRing for MPZBase
Source§fn deserialize<'de, D>(
&self,
deserializer: D,
) -> Result<Self::Element, D::Error>where
D: Deserializer<'de>,
fn deserialize<'de, D>(
&self,
deserializer: D,
) -> Result<Self::Element, D::Error>where
D: Deserializer<'de>,
unstable-enable only.impl Copy for MPZBase
impl Domain for MPZBase
impl Eq for MPZBase
impl StructuralPartialEq for MPZBase
Auto Trait Implementations§
impl Freeze for MPZBase
impl RefUnwindSafe for MPZBase
impl Send for MPZBase
impl Sync for MPZBase
impl Unpin for MPZBase
impl UnwindSafe for MPZBase
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<I, J> CanHomFrom<I> for J
impl<I, J> CanHomFrom<I> for J
Source§type Homomorphism = ()
type Homomorphism = ()
Source§fn has_canonical_hom(&self, _: &I) -> Option<<J as CanHomFrom<I>>::Homomorphism>
fn has_canonical_hom(&self, _: &I) -> Option<<J as CanHomFrom<I>>::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: &I,
el: <I as RingBase>::Element,
_: &<J as CanHomFrom<I>>::Homomorphism,
) -> <J as RingBase>::Element
fn map_in( &self, from: &I, el: <I as RingBase>::Element, _: &<J as CanHomFrom<I>>::Homomorphism, ) -> <J as RingBase>::Element
Source§default fn map_in_ref(
&self,
from: &I,
el: &<I as RingBase>::Element,
hom: &<J as CanHomFrom<I>>::Homomorphism,
) -> <J as RingBase>::Element
default fn map_in_ref( &self, from: &I, el: &<I as RingBase>::Element, hom: &<J as CanHomFrom<I>>::Homomorphism, ) -> <J as RingBase>::Element
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, )
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, )
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
summand + lhs * rhs, where rhs is mapped into the ring via the homomorphism.Source§impl<I, J> CanIsoFromTo<I> for J
impl<I, J> CanIsoFromTo<I> for J
Source§type Isomorphism = ()
type Isomorphism = ()
Source§fn has_canonical_iso(
&self,
_: &I,
) -> Option<<J as CanIsoFromTo<I>>::Isomorphism>
fn has_canonical_iso( &self, _: &I, ) -> Option<<J as CanIsoFromTo<I>>::Isomorphism>
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: &I,
el: <J as RingBase>::Element,
_: &<J as CanIsoFromTo<I>>::Isomorphism,
) -> <I as RingBase>::Element
fn map_out( &self, from: &I, el: <J as RingBase>::Element, _: &<J as CanIsoFromTo<I>>::Isomorphism, ) -> <I as RingBase>::Element
el under the canonical homomorphism from -> self.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
unstable-enable only.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
unstable-enable only.sum_i lhs[i] * rhs[i].Source§impl<R> ComputeResultantRing for R
impl<R> ComputeResultantRing for R
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, )
(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>,
(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, )
(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>,
(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)
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)
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>,
unstable-enable only.(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>,
unstable-enable only.(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>
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<R> KaratsubaHint for R
impl<R> KaratsubaHint for R
Source§default fn karatsuba_threshold(&self) -> usize
default fn karatsuba_threshold(&self) -> usize
unstable-enable only.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> PolyTFracGCDRing for R
impl<R> PolyTFracGCDRing for R
Source§default fn power_decomposition<P>(
poly_ring: P,
poly: &<<P as RingStore>::Type as RingBase>::Element,
) -> Vec<(<<P as RingStore>::Type as RingBase>::Element, usize)>
default fn power_decomposition<P>( poly_ring: P, poly: &<<P as RingStore>::Type as RingBase>::Element, ) -> Vec<(<<P as RingStore>::Type as RingBase>::Element, usize)>
f1, f2, ... such that a f = f1 f2^2 f3^3 ...
for some non-zero-divisor a of this ring. They are returned as tuples (fi, i)
where deg(fi) > 0. Read moreSource§default fn power_decomposition_with_controller<P, Controller>(
poly_ring: P,
poly: &<<P as RingStore>::Type as RingBase>::Element,
controller: Controller,
) -> Vec<(<<P as RingStore>::Type as RingBase>::Element, usize)>where
P: RingStore + Copy,
<P as RingStore>::Type: PolyRing + DivisibilityRing,
<<P as RingStore>::Type as RingExtension>::BaseRing: RingStore<Type = R>,
Controller: ComputationController,
default fn power_decomposition_with_controller<P, Controller>(
poly_ring: P,
poly: &<<P as RingStore>::Type as RingBase>::Element,
controller: Controller,
) -> Vec<(<<P as RingStore>::Type as RingBase>::Element, usize)>where
P: RingStore + Copy,
<P as RingStore>::Type: PolyRing + DivisibilityRing,
<<P as RingStore>::Type as RingExtension>::BaseRing: RingStore<Type = R>,
Controller: ComputationController,
PolyTFracGCDRing::power_decomposition(), this writes a polynomial as a product
of powers of square-free polynomials. However, it additionally accepts a ComputationController
to customize the performed computation.Source§default fn gcd<P>(
poly_ring: P,
lhs: &<<P as RingStore>::Type as RingBase>::Element,
rhs: &<<P as RingStore>::Type as RingBase>::Element,
) -> <<P as RingStore>::Type as RingBase>::Element
default fn gcd<P>( poly_ring: P, lhs: &<<P as RingStore>::Type as RingBase>::Element, rhs: &<<P as RingStore>::Type as RingBase>::Element, ) -> <<P as RingStore>::Type as RingBase>::Element
f, g over the fraction field,
which is the largest-degree polynomial d such that d | a f, a g for some non-zero-divisor
a of this ring. Read moreSource§fn gcd_with_controller<P, Controller>(
poly_ring: P,
lhs: &<<P as RingStore>::Type as RingBase>::Element,
rhs: &<<P as RingStore>::Type as RingBase>::Element,
controller: Controller,
) -> <<P as RingStore>::Type as RingBase>::Elementwhere
P: RingStore + Copy,
<P as RingStore>::Type: PolyRing + DivisibilityRing,
<<P as RingStore>::Type as RingExtension>::BaseRing: RingStore<Type = R>,
Controller: ComputationController,
fn gcd_with_controller<P, Controller>(
poly_ring: P,
lhs: &<<P as RingStore>::Type as RingBase>::Element,
rhs: &<<P as RingStore>::Type as RingBase>::Element,
controller: Controller,
) -> <<P as RingStore>::Type as RingBase>::Elementwhere
P: RingStore + Copy,
<P as RingStore>::Type: PolyRing + DivisibilityRing,
<<P as RingStore>::Type as RingExtension>::BaseRing: RingStore<Type = R>,
Controller: ComputationController,
PolyTFracGCDRing::gcd(), this computes the gcd of two polynomials.
However, it additionally accepts a ComputationController to customize
the performed computation.Source§fn squarefree_part<P>(poly_ring: P, poly: &El<P>) -> El<P>where
P: RingStore + Copy,
P::Type: PolyRing + DivisibilityRing,
<P::Type as RingExtension>::BaseRing: RingStore<Type = Self>,
fn squarefree_part<P>(poly_ring: P, poly: &El<P>) -> El<P>where
P: RingStore + Copy,
P::Type: PolyRing + DivisibilityRing,
<P::Type as RingExtension>::BaseRing: RingStore<Type = Self>,
f, which is the largest-degree squarefree
polynomial d such that d | a f for some non-zero-divisor a of this ring. Read moreSource§impl<R> StrassenHint for R
impl<R> StrassenHint for R
Source§default fn strassen_threshold(&self) -> usize
default fn strassen_threshold(&self) -> usize
unstable-enable only.StrassenAlgorithm will use the Strassen algorithm. Read more