pub struct RustBigintRingBase<A: Allocator + Clone = Global> { /* private fields */ }
Expand description
Arbitrary-precision integer implementation.
This is a not-too-well optimized implementation, written in pure Rust.
If you need very high performance, consider using crate::rings::mpir::MPZ
(requires an installation of mpir and activating the feature “mpir”).
Implementations§
Source§impl<A: Allocator + Clone> RustBigintRingBase<A>
impl<A: Allocator + Clone> RustBigintRingBase<A>
Sourcepub fn map_i128(&self, val: &RustBigint<A>) -> Option<i128>
pub fn map_i128(&self, val: &RustBigint<A>) -> Option<i128>
If the given big integer fits into a i128
, this will be
returned. Otherwise, None
is returned.
Sourcepub fn abs_base_u64_repr<'a>(
&self,
el: &'a RustBigint,
) -> impl 'a + Iterator<Item = u64>
pub fn abs_base_u64_repr<'a>( &self, el: &'a RustBigint, ) -> impl 'a + Iterator<Item = u64>
Returns an iterator over the digits of the 2^64
-adic digit
representation of the absolute value of the given element.
Sourcepub fn from_base_u64_repr<I>(&self, data: I) -> RustBigint
pub fn from_base_u64_repr<I>(&self, data: I) -> RustBigint
Interprets the elements of the iterator as digits in a 2^64
-adic
digit representation, and returns the big integer represented by it.
Trait Implementations§
Source§impl<A: Clone + Allocator + Clone> Clone for RustBigintRingBase<A>
impl<A: Clone + Allocator + Clone> Clone for RustBigintRingBase<A>
Source§fn clone(&self) -> RustBigintRingBase<A>
fn clone(&self) -> RustBigintRingBase<A>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<'de> Deserialize<'de> for RustBigintRingBase<Global>
impl<'de> Deserialize<'de> for RustBigintRingBase<Global>
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<A: Allocator + Clone> DivisibilityRing for RustBigintRingBase<A>
impl<A: Allocator + Clone> DivisibilityRing for RustBigintRingBase<A>
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<A: Allocator + Clone> EuclideanRing for RustBigintRingBase<A>
impl<A: Allocator + Clone> EuclideanRing for RustBigintRingBase<A>
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_deg(&self, val: &Self::Element) -> Option<usize>
fn euclidean_deg(&self, val: &Self::Element) -> Option<usize>
EuclideanRing
.Source§impl<A> EvalPolyLocallyRing for RustBigintRingBase<A>
impl<A> EvalPolyLocallyRing for RustBigintRingBase<A>
Source§type LocalComputationData<'ring> = RingValue<ZnBase<RingValue<AsFieldBase<RingValue<ZnBase>>>, RingRef<'ring, RustBigintRingBase<A>>>>
where
Self: 'ring
type LocalComputationData<'ring> = RingValue<ZnBase<RingValue<AsFieldBase<RingValue<ZnBase>>>, RingRef<'ring, RustBigintRingBase<A>>>> 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<A> FiniteRingSpecializable for RustBigintRingBase<A>
impl<A> FiniteRingSpecializable for RustBigintRingBase<A>
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<A: Allocator + Clone> HashableElRing for RustBigintRingBase<A>
impl<A: Allocator + Clone> HashableElRing for RustBigintRingBase<A>
Source§impl IntCast<MPZBase> for RustBigintRingBase
Available on crate feature mpir
only.
impl IntCast<MPZBase> for RustBigintRingBase
mpir
only.Source§impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i128>
impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i128>
Source§fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i128
fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i128
Source§impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i16>
impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i16>
Source§fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i16
fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i16
Source§impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i32>
impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i32>
Source§fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i32
fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i32
Source§impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i64>
impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i64>
Source§fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i64
fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i64
Source§impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i8>
impl<A: Allocator + Clone> IntCast<RustBigintRingBase<A>> for StaticRingBase<i8>
Source§fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i8
fn cast(&self, from: &RustBigintRingBase<A>, value: RustBigint<A>) -> i8
Source§impl<A1: Allocator + Clone, A2: Allocator + Clone> IntCast<RustBigintRingBase<A2>> for RustBigintRingBase<A1>
impl<A1: Allocator + Clone, A2: Allocator + Clone> IntCast<RustBigintRingBase<A2>> for RustBigintRingBase<A1>
Source§fn cast(
&self,
_: &RustBigintRingBase<A2>,
value: RustBigint<A2>,
) -> Self::Element
fn cast( &self, _: &RustBigintRingBase<A2>, value: RustBigint<A2>, ) -> Self::Element
Source§impl IntCast<RustBigintRingBase> for MPZBase
Available on crate feature mpir
only.
impl IntCast<RustBigintRingBase> for MPZBase
mpir
only.Source§fn cast(&self, _: &RustBigintRingBase, el: RustBigint) -> Self::Element
fn cast(&self, _: &RustBigintRingBase, el: RustBigint) -> Self::Element
Source§impl<A: Allocator + Clone> IntCast<StaticRingBase<i128>> for RustBigintRingBase<A>
impl<A: Allocator + Clone> IntCast<StaticRingBase<i128>> for RustBigintRingBase<A>
Source§fn cast(&self, _: &StaticRingBase<i128>, value: i128) -> RustBigint<A>
fn cast(&self, _: &StaticRingBase<i128>, value: i128) -> RustBigint<A>
Source§impl<A: Allocator + Clone> IntCast<StaticRingBase<i16>> for RustBigintRingBase<A>
impl<A: Allocator + Clone> IntCast<StaticRingBase<i16>> for RustBigintRingBase<A>
Source§fn cast(&self, _: &StaticRingBase<i16>, value: i16) -> RustBigint<A>
fn cast(&self, _: &StaticRingBase<i16>, value: i16) -> RustBigint<A>
Source§impl<A: Allocator + Clone> IntCast<StaticRingBase<i32>> for RustBigintRingBase<A>
impl<A: Allocator + Clone> IntCast<StaticRingBase<i32>> for RustBigintRingBase<A>
Source§fn cast(&self, _: &StaticRingBase<i32>, value: i32) -> RustBigint<A>
fn cast(&self, _: &StaticRingBase<i32>, value: i32) -> RustBigint<A>
Source§impl<A: Allocator + Clone> IntCast<StaticRingBase<i64>> for RustBigintRingBase<A>
impl<A: Allocator + Clone> IntCast<StaticRingBase<i64>> for RustBigintRingBase<A>
Source§fn cast(&self, _: &StaticRingBase<i64>, value: i64) -> RustBigint<A>
fn cast(&self, _: &StaticRingBase<i64>, value: i64) -> RustBigint<A>
Source§impl<A: Allocator + Clone> IntCast<StaticRingBase<i8>> for RustBigintRingBase<A>
impl<A: Allocator + Clone> IntCast<StaticRingBase<i8>> for RustBigintRingBase<A>
Source§fn cast(&self, _: &StaticRingBase<i8>, value: i8) -> RustBigint<A>
fn cast(&self, _: &StaticRingBase<i8>, value: i8) -> RustBigint<A>
Source§impl<A> IntegerPolyGCDRing for RustBigintRingBase<A>
impl<A> IntegerPolyGCDRing for RustBigintRingBase<A>
Source§type LocalRingAsZnBase<'ring> = <RustBigintRingBase<A> as PolyGCDLocallyDomain>::LocalRingBase<'ring>
where
Self: 'ring
type LocalRingAsZnBase<'ring> = <RustBigintRingBase<A> as PolyGCDLocallyDomain>::LocalRingBase<'ring> where Self: 'ring
unstable-enable
only.Source§type LocalRingAsZn<'ring> = <RustBigintRingBase<A> as PolyGCDLocallyDomain>::LocalRing<'ring>
where
Self: 'ring
type LocalRingAsZn<'ring> = <RustBigintRingBase<A> 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<A: Allocator + Clone> IntegerRing for RustBigintRingBase<A>
impl<A: Allocator + Clone> IntegerRing for RustBigintRingBase<A>
Source§fn to_float_approx(&self, value: &Self::Element) -> f64
fn to_float_approx(&self, value: &Self::Element) -> f64
Source§fn from_float_approx(&self, value: f64) -> Option<Self::Element>
fn from_float_approx(&self, value: f64) -> Option<Self::Element>
None
, although this is usually
the case on infinity and NaN. 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 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 euclidean_div_pow_2(&self, value: &mut Self::Element, power: usize)
fn euclidean_div_pow_2(&self, value: &mut Self::Element, power: usize)
|remainder| < |divisor|
, and thus would otherwise
leave multiple possible results). Read moreSource§fn mul_pow_2(&self, value: &mut Self::Element, power: usize)
fn mul_pow_2(&self, value: &mut Self::Element, power: usize)
Source§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 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 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<A> InterpolationBaseRing for RustBigintRingBase<A>
impl<A> InterpolationBaseRing for RustBigintRingBase<A>
Source§type ExtendedRing<'a> = RingRef<'a, RustBigintRingBase<A>>
where
Self: 'a
type ExtendedRing<'a> = RingRef<'a, RustBigintRingBase<A>> where Self: 'a
unstable-enable
only.Source§type ExtendedRingBase<'a> = RustBigintRingBase<A>
where
Self: 'a
type ExtendedRingBase<'a> = RustBigintRingBase<A> 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<A: Allocator + Clone> OrderedRing for RustBigintRingBase<A>
impl<A: Allocator + Clone> OrderedRing for RustBigintRingBase<A>
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<A> PolyGCDLocallyDomain for RustBigintRingBase<A>
impl<A> PolyGCDLocallyDomain for RustBigintRingBase<A>
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 / mi
Source§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 / mi
Source§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<A: Allocator + Clone> PrincipalIdealRing for RustBigintRingBase<A>
impl<A: Allocator + Clone> PrincipalIdealRing for RustBigintRingBase<A>
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>
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)
g
of the ideal (lhs, rhs)
as g = s * lhs + t * rhs
. 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<A: Allocator + Clone> RingBase for RustBigintRingBase<A>
impl<A: Allocator + Clone> RingBase for RustBigintRingBase<A>
Source§type Element = RustBigint<A>
type Element = RustBigint<A>
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)
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 mul_int(&self, lhs: Self::Element, rhs: i32) -> 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
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 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_noetherian(&self) -> bool
fn is_noetherian(&self) -> bool
Source§fn dbg_within<'a>(
&self,
value: &Self::Element,
out: &mut Formatter<'a>,
_: EnvBindingStrength,
) -> Result
fn dbg_within<'a>( &self, value: &Self::Element, out: &mut Formatter<'a>, _: 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 moreSource§fn is_approximate(&self) -> bool
fn is_approximate(&self) -> bool
f32
or
f64
, to represent real or complex numbers. Read morefn one(&self) -> Self::Element
fn neg_one(&self) -> Self::Element
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_assign_int(&self, lhs: &mut Self::Element, rhs: i32)
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 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(&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<A: Allocator + Clone> SerializableElementRing for RustBigintRingBase<A>
impl<A: Allocator + Clone> SerializableElementRing for RustBigintRingBase<A>
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.Source§impl Serialize for RustBigintRingBase<Global>
impl Serialize for RustBigintRingBase<Global>
impl<A: Copy + Allocator + Clone> Copy for RustBigintRingBase<A>
impl<A: Allocator + Clone> Domain for RustBigintRingBase<A>
Auto Trait Implementations§
impl<A> Freeze for RustBigintRingBase<A>where
A: Freeze,
impl<A> RefUnwindSafe for RustBigintRingBase<A>where
A: RefUnwindSafe,
impl<A> Send for RustBigintRingBase<A>where
A: Send,
impl<A> Sync for RustBigintRingBase<A>where
A: Sync,
impl<A> Unpin for RustBigintRingBase<A>where
A: Unpin,
impl<A> UnwindSafe for RustBigintRingBase<A>where
A: 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<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