pub struct RingElementWrapper<R>where
R: RingStore,{ /* private fields */ }Expand description
Stores a ring element together with its ring, so that ring operations do
not require explicit mention of the ring object. This can be used both for
convenience of notation (i.e. use a + b instead of ring.add(a, b)) and
might also be necessary when e.g. storing elements in a set.
§Examples
let ring = DensePolyRing::new(StaticRing::<i64>::RING, "X");
let x = RingElementWrapper::new(&ring, ring.indeterminate());
println!("The result is: {}", x.clone() + x.clone() * x);
// instead of
let x = ring.indeterminate();
println!("The result is: {}", ring.format(&ring.add(ring.mul(ring.clone_el(&x), ring.clone_el(&x)), ring.clone_el(&x))));You can also retrieve the wrapped element
let ring = DensePolyRing::new(StaticRing::<i64>::RING, "X");
let x = RingElementWrapper::new(&ring, ring.indeterminate());
assert_el_eq!(&ring, ring.add(ring.mul(ring.clone_el(&x), ring.clone_el(&x)), ring.clone_el(&x)), (x.clone() + x.clone() * x).unwrap());Implementations§
Source§impl<R: RingStore> RingElementWrapper<R>
impl<R: RingStore> RingElementWrapper<R>
Sourcepub const fn new(ring: R, element: El<R>) -> Self
pub const fn new(ring: R, element: El<R>) -> Self
Creates a new RingElementWrapper wrapping the given element of the given ring.
Sourcepub fn pow(self, power: usize) -> Self
pub fn pow(self, power: usize) -> Self
Raises the stored element to the given power.
Consider using RingElementWrapper::pow_ref() if you don’t want to
move the element.
Sourcepub fn pow_ref(&self, power: usize) -> Selfwhere
R: Clone,
pub fn pow_ref(&self, power: usize) -> Selfwhere
R: Clone,
Raises the stored element to the given power.
Sourcepub fn unwrap_ref(&self) -> &El<R>
pub fn unwrap_ref(&self) -> &El<R>
Returns the stored element as reference.
Trait Implementations§
Source§impl<'a, 'b, R: RingStore + Clone> Add<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
impl<'a, 'b, R: RingStore + Clone> Add<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
+ operator.Source§impl<'a, R: RingStore> Add<&'a RingElementWrapper<R>> for RingElementWrapper<R>
impl<'a, R: RingStore> Add<&'a RingElementWrapper<R>> for RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
+ operator.Source§impl<'a, R: RingStore + Clone> Add<&'a RingElementWrapper<R>> for i32
impl<'a, R: RingStore + Clone> Add<&'a RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
+ operator.Source§impl<'a, R: RingStore> Add<RingElementWrapper<R>> for &'a RingElementWrapper<R>
impl<'a, R: RingStore> Add<RingElementWrapper<R>> for &'a RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
+ operator.Source§impl<R: RingStore> Add<RingElementWrapper<R>> for i32
impl<R: RingStore> Add<RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
+ operator.Source§impl<R: RingStore> Add for RingElementWrapper<R>
impl<R: RingStore> Add for RingElementWrapper<R>
Source§impl<'a, R: RingStore> AddAssign<&'a RingElementWrapper<R>> for RingElementWrapper<R>
impl<'a, R: RingStore> AddAssign<&'a RingElementWrapper<R>> for RingElementWrapper<R>
Source§fn add_assign(&mut self, rhs: &'a Self)
fn add_assign(&mut self, rhs: &'a Self)
Performs the
+= operation. Read moreSource§impl<R: RingStore> AddAssign<i32> for RingElementWrapper<R>
impl<R: RingStore> AddAssign<i32> for RingElementWrapper<R>
Source§fn add_assign(&mut self, rhs: i32)
fn add_assign(&mut self, rhs: i32)
Performs the
+= operation. Read moreSource§impl<R: RingStore> AddAssign for RingElementWrapper<R>
impl<R: RingStore> AddAssign for RingElementWrapper<R>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+= operation. Read moreSource§impl<R: RingStore> Debug for RingElementWrapper<R>
impl<R: RingStore> Debug for RingElementWrapper<R>
Source§impl<R: RingStore> Deref for RingElementWrapper<R>
impl<R: RingStore> Deref for RingElementWrapper<R>
Source§impl<R: RingStore> Display for RingElementWrapper<R>
impl<R: RingStore> Display for RingElementWrapper<R>
Source§impl<'a, 'b, R: RingStore + Clone> Div<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
impl<'a, 'b, R: RingStore + Clone> Div<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
/ operator.Source§impl<'a, R: RingStore + Clone> Div<&'a RingElementWrapper<R>> for RingElementWrapper<R>
impl<'a, R: RingStore + Clone> Div<&'a RingElementWrapper<R>> for RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
/ operator.Source§impl<'a, R: RingStore + Clone> Div<&'a RingElementWrapper<R>> for i32
impl<'a, R: RingStore + Clone> Div<&'a RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
/ operator.Source§impl<'a, R: RingStore + Clone> Div<RingElementWrapper<R>> for &'a RingElementWrapper<R>
impl<'a, R: RingStore + Clone> Div<RingElementWrapper<R>> for &'a RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
/ operator.Source§impl<R: RingStore> Div<RingElementWrapper<R>> for i32
impl<R: RingStore> Div<RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
/ operator.Source§impl<R: RingStore> Div for RingElementWrapper<R>
impl<R: RingStore> Div for RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
/ operator.Source§impl<R: RingStore> Hash for RingElementWrapper<R>where
R::Type: HashableElRing,
impl<R: RingStore> Hash for RingElementWrapper<R>where
R::Type: HashableElRing,
Source§impl<'a, 'b, R: RingStore + Clone> Mul<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
impl<'a, 'b, R: RingStore + Clone> Mul<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
* operator.Source§impl<'a, R: RingStore> Mul<&'a RingElementWrapper<R>> for RingElementWrapper<R>
impl<'a, R: RingStore> Mul<&'a RingElementWrapper<R>> for RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
* operator.Source§impl<'a, R: RingStore + Clone> Mul<&'a RingElementWrapper<R>> for i32
impl<'a, R: RingStore + Clone> Mul<&'a RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
* operator.Source§impl<'a, R: RingStore> Mul<RingElementWrapper<R>> for &'a RingElementWrapper<R>
impl<'a, R: RingStore> Mul<RingElementWrapper<R>> for &'a RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
* operator.Source§impl<R: RingStore> Mul<RingElementWrapper<R>> for i32
impl<R: RingStore> Mul<RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
* operator.Source§impl<R: RingStore> Mul for RingElementWrapper<R>
impl<R: RingStore> Mul for RingElementWrapper<R>
Source§impl<'a, R: RingStore> MulAssign<&'a RingElementWrapper<R>> for RingElementWrapper<R>
impl<'a, R: RingStore> MulAssign<&'a RingElementWrapper<R>> for RingElementWrapper<R>
Source§fn mul_assign(&mut self, rhs: &'a Self)
fn mul_assign(&mut self, rhs: &'a Self)
Performs the
*= operation. Read moreSource§impl<R: RingStore> MulAssign<i32> for RingElementWrapper<R>
impl<R: RingStore> MulAssign<i32> for RingElementWrapper<R>
Source§fn mul_assign(&mut self, rhs: i32)
fn mul_assign(&mut self, rhs: i32)
Performs the
*= operation. Read moreSource§impl<R: RingStore> MulAssign for RingElementWrapper<R>
impl<R: RingStore> MulAssign for RingElementWrapper<R>
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the
*= operation. Read moreSource§impl<R: RingStore> PartialEq for RingElementWrapper<R>
impl<R: RingStore> PartialEq for RingElementWrapper<R>
Source§impl<'a, 'b, R: RingStore + Clone> Sub<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
impl<'a, 'b, R: RingStore + Clone> Sub<&'a RingElementWrapper<R>> for &'b RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
- operator.Source§impl<'a, R: RingStore> Sub<&'a RingElementWrapper<R>> for RingElementWrapper<R>
impl<'a, R: RingStore> Sub<&'a RingElementWrapper<R>> for RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
- operator.Source§impl<'a, R: RingStore + Clone> Sub<&'a RingElementWrapper<R>> for i32
impl<'a, R: RingStore + Clone> Sub<&'a RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
- operator.Source§impl<'a, R: RingStore> Sub<RingElementWrapper<R>> for &'a RingElementWrapper<R>
impl<'a, R: RingStore> Sub<RingElementWrapper<R>> for &'a RingElementWrapper<R>
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
- operator.Source§impl<R: RingStore> Sub<RingElementWrapper<R>> for i32
impl<R: RingStore> Sub<RingElementWrapper<R>> for i32
Source§type Output = RingElementWrapper<R>
type Output = RingElementWrapper<R>
The resulting type after applying the
- operator.Source§impl<R: RingStore> Sub for RingElementWrapper<R>
impl<R: RingStore> Sub for RingElementWrapper<R>
Source§impl<'a, R: RingStore> SubAssign<&'a RingElementWrapper<R>> for RingElementWrapper<R>
impl<'a, R: RingStore> SubAssign<&'a RingElementWrapper<R>> for RingElementWrapper<R>
Source§fn sub_assign(&mut self, rhs: &'a Self)
fn sub_assign(&mut self, rhs: &'a Self)
Performs the
-= operation. Read moreSource§impl<R: RingStore> SubAssign<i32> for RingElementWrapper<R>
impl<R: RingStore> SubAssign<i32> for RingElementWrapper<R>
Source§fn sub_assign(&mut self, rhs: i32)
fn sub_assign(&mut self, rhs: i32)
Performs the
-= operation. Read moreSource§impl<R: RingStore> SubAssign for RingElementWrapper<R>
impl<R: RingStore> SubAssign for RingElementWrapper<R>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the
-= operation. Read moreimpl<R: RingStore + Copy> Copy for RingElementWrapper<R>
impl<R: RingStore> Eq for RingElementWrapper<R>
Auto Trait Implementations§
impl<R> Freeze for RingElementWrapper<R>
impl<R> RefUnwindSafe for RingElementWrapper<R>
impl<R> Send for RingElementWrapper<R>
impl<R> Sync for RingElementWrapper<R>
impl<R> Unpin for RingElementWrapper<R>
impl<R> UnwindSafe for RingElementWrapper<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<'a, R, C> ConvolutionAlgorithm<R> for C
impl<'a, R, C> ConvolutionAlgorithm<R> for C
Source§fn compute_convolution<S, V1, V2>(
&self,
lhs: V1,
rhs: V2,
dst: &mut [<R as RingBase>::Element],
ring: S,
)where
S: RingStore<Type = R> + Copy,
V1: VectorView<<R as RingBase>::Element>,
V2: VectorView<<R as RingBase>::Element>,
fn compute_convolution<S, V1, V2>(
&self,
lhs: V1,
rhs: V2,
dst: &mut [<R as RingBase>::Element],
ring: S,
)where
S: RingStore<Type = R> + Copy,
V1: VectorView<<R as RingBase>::Element>,
V2: VectorView<<R as RingBase>::Element>,
Source§fn supports_ring<S>(&self, ring: S) -> bool
fn supports_ring<S>(&self, ring: S) -> bool
Returns whether this convolution algorithm supports computations of
the given ring. Read more
Source§fn specialize_prepared_convolution<F>(
function: F,
) -> Result<<F as PreparedConvolutionOperation<C, R>>::Output, F>where
F: PreparedConvolutionOperation<C, R>,
fn specialize_prepared_convolution<F>(
function: F,
) -> Result<<F as PreparedConvolutionOperation<C, R>>::Output, F>where
F: PreparedConvolutionOperation<C, R>,
If this convolution implements
PreparedConvolutionAlgorithm, then
the given function is called and its result is returned. Otherwise,
Err is returned.Source§impl<R> DivisibilityRingStore for R
impl<R> DivisibilityRingStore for R
Source§impl<R> EuclideanRingStore for R
impl<R> EuclideanRingStore for R
Source§impl<T, R> FFTAlgorithm<R> for T
impl<T, R> FFTAlgorithm<R> for T
Source§fn root_of_unity<S>(&self, ring: S) -> &<R as RingBase>::Element
fn root_of_unity<S>(&self, ring: S) -> &<R as RingBase>::Element
The root of unity used for the FFT. While all primitive
n-th roots
of unity can be used equally for computing a Fourier transform, the
concrete one used determines the order of the output values. Read moreSource§fn unordered_fft_permutation(&self, i: usize) -> usize
fn unordered_fft_permutation(&self, i: usize) -> usize
On input
i, returns j such that unordered_fft(values)[i] contains the evaluation
at zeta^(-j) of values (note the -, which is standard convention for Fourier transforms).
Here zeta is the value returned by FFTAlgorithm::root_of_unity(). Read moreSource§fn unordered_fft_permutation_inv(&self, i: usize) -> usize
fn unordered_fft_permutation_inv(&self, i: usize) -> usize
The inverse of
FFTAlgorithm::unordered_fft_permutation(), i.e. for all i, have
self.unordered_fft_permutation_inv(self.unordered_fft_permutation(i)) == i.Source§fn fft<V, S>(&self, values: V, ring: S)
fn fft<V, S>(&self, values: V, ring: S)
Computes the Fourier transform of the given
values over the specified ring.
The output is in standard order, i.e. the i-th output element is the evaluation
of the input at self.root_of_unity()^(-i) (note the -, which is standard
convention for Fourier transforms). Read moreSource§fn inv_fft<V, S>(&self, values: V, ring: S)
fn inv_fft<V, S>(&self, values: V, ring: S)
Computes the Fourier transform of the given
values over the specified ring.
The output is in standard order, i.e. the i-th output element is the evaluation
of the input at self.root_of_unity()^i, divided by self.len(). Read moreSource§fn unordered_fft<V, S>(&self, values: V, ring: S)
fn unordered_fft<V, S>(&self, values: V, ring: S)
Computes the Fourier transform of the given values, but the output values are arbitrarily permuted
(in a way compatible with
FFTAlgorithm::unordered_inv_fft()). Read moreSource§fn unordered_inv_fft<V, S>(&self, values: V, ring: S)
fn unordered_inv_fft<V, S>(&self, values: V, ring: S)
Inverse to
FFTAlgorithm::unordered_fft(), with basically the same contract.Source§impl<R> FiniteRingStore for R
impl<R> FiniteRingStore for R
Source§fn elements<'a>(&'a self) -> <Self::Type as FiniteRing>::ElementsIter<'a>
fn elements<'a>(&'a self) -> <Self::Type as FiniteRing>::ElementsIter<'a>
Source§fn size<I: IntegerRingStore + Copy>(&self, ZZ: I) -> Option<El<I>>where
I::Type: IntegerRing,
fn size<I: IntegerRingStore + Copy>(&self, ZZ: I) -> Option<El<I>>where
I::Type: IntegerRing,
See
FiniteRing::size().Source§impl<R> FreeAlgebraStore for R
impl<R> FreeAlgebraStore for R
Source§fn canonical_gen(&self) -> El<Self>
fn canonical_gen(&self) -> El<Self>
Source§fn wrt_canonical_basis<'a>(
&'a self,
el: &'a El<Self>,
) -> <Self::Type as FreeAlgebra>::VectorRepresentation<'a>
fn wrt_canonical_basis<'a>( &'a self, el: &'a El<Self>, ) -> <Self::Type as FreeAlgebra>::VectorRepresentation<'a>
Source§fn from_canonical_basis<V>(&self, vec: V) -> El<Self>where
V: IntoIterator<Item = El<<Self::Type as RingExtension>::BaseRing>>,
V::IntoIter: DoubleEndedIterator,
fn from_canonical_basis<V>(&self, vec: V) -> El<Self>where
V: IntoIterator<Item = El<<Self::Type as RingExtension>::BaseRing>>,
V::IntoIter: DoubleEndedIterator,
Source§fn from_canonical_basis_extended<V>(&self, vec: V) -> El<Self>
fn from_canonical_basis_extended<V>(&self, vec: V) -> El<Self>
Source§fn generating_poly<P, H>(&self, poly_ring: P, hom: H) -> El<P>where
P: PolyRingStore,
P::Type: PolyRing,
H: Homomorphism<<<Self::Type as RingExtension>::BaseRing as RingStore>::Type, <<P::Type as RingExtension>::BaseRing as RingStore>::Type>,
fn generating_poly<P, H>(&self, poly_ring: P, hom: H) -> El<P>where
P: PolyRingStore,
P::Type: PolyRing,
H: Homomorphism<<<Self::Type as RingExtension>::BaseRing as RingStore>::Type, <<P::Type as RingExtension>::BaseRing as RingStore>::Type>,
Returns the generating polynomial of this ring, i.e. the monic polynomial
f(X) such that this ring is isomorphic
to R[X]/(f(X)), where R is the base ring.Source§fn as_field(self) -> Result<AsField<Self>, Self>where
Self::Type: DivisibilityRing,
<<Self::Type as RingExtension>::BaseRing as RingStore>::Type: Field + FactorPolyField,
fn as_field(self) -> Result<AsField<Self>, Self>where
Self::Type: DivisibilityRing,
<<Self::Type as RingExtension>::BaseRing as RingStore>::Type: Field + FactorPolyField,
If this ring is a field, returns a wrapper around this ring that implements
crate::field::FieldStore. Read moreSource§fn poly_repr<P, H>(&self, to: P, el: &El<Self>, hom: H) -> El<P>where
P: PolyRingStore,
P::Type: PolyRing,
H: Homomorphism<<<Self::Type as RingExtension>::BaseRing as RingStore>::Type, <<P::Type as RingExtension>::BaseRing as RingStore>::Type>,
fn poly_repr<P, H>(&self, to: P, el: &El<Self>, hom: H) -> El<P>where
P: PolyRingStore,
P::Type: PolyRing,
H: Homomorphism<<<Self::Type as RingExtension>::BaseRing as RingStore>::Type, <<P::Type as RingExtension>::BaseRing as RingStore>::Type>,
Returns the polynomial representation of the given element
y, i.e. the polynomial f(X) of degree at most
FreeAlgebraStore::rank() such that f(x) = y, where y is the canonical generator of this ring, as given by
FreeAlgebraStore::canonical_gen().Source§fn discriminant(&self) -> El<<Self::Type as RingExtension>::BaseRing>
fn discriminant(&self) -> El<<Self::Type as RingExtension>::BaseRing>
Computes the discriminant of the canonical basis of this ring extension,
which is defined as the determinant of the trace matrix
(Tr(a^(i + j))),
where a is the canonical generator of this ring extension. Read moreSource§fn charpoly<P, H>(&self, el: &El<Self>, poly_ring: P, hom: H) -> El<P>where
P: RingStore,
P::Type: PolyRing,
<<P::Type as RingExtension>::BaseRing as RingStore>::Type: LinSolveRing,
H: Homomorphism<<<Self::Type as RingExtension>::BaseRing as RingStore>::Type, <<P::Type as RingExtension>::BaseRing as RingStore>::Type>,
fn charpoly<P, H>(&self, el: &El<Self>, poly_ring: P, hom: H) -> El<P>where
P: RingStore,
P::Type: PolyRing,
<<P::Type as RingExtension>::BaseRing as RingStore>::Type: LinSolveRing,
H: Homomorphism<<<Self::Type as RingExtension>::BaseRing as RingStore>::Type, <<P::Type as RingExtension>::BaseRing as RingStore>::Type>,
See also
FreeAlgebra::charpoly().fn with_wrapped_generator<'a, F, const M: usize>( &'a self, f: F, ) -> [El<Self>; M]
Source§impl<R> HashableElRingStore for R
impl<R> HashableElRingStore for R
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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> LinSolveRingStore for R
impl<R> LinSolveRingStore for R
Source§fn solve_right<V1, V2, V3>(
&self,
lhs: SubmatrixMut<'_, V1, El<Self>>,
rhs: SubmatrixMut<'_, V2, El<Self>>,
out: SubmatrixMut<'_, V3, El<Self>>,
) -> SolveResultwhere
V1: AsPointerToSlice<El<Self>>,
V2: AsPointerToSlice<El<Self>>,
V3: AsPointerToSlice<El<Self>>,
fn solve_right<V1, V2, V3>(
&self,
lhs: SubmatrixMut<'_, V1, El<Self>>,
rhs: SubmatrixMut<'_, V2, El<Self>>,
out: SubmatrixMut<'_, V3, El<Self>>,
) -> SolveResultwhere
V1: AsPointerToSlice<El<Self>>,
V2: AsPointerToSlice<El<Self>>,
V3: AsPointerToSlice<El<Self>>,
Solves a linear system
lhs * X = rhs. Read moreSource§fn solve_right_with<V1, V2, V3, A>(
&self,
lhs: SubmatrixMut<'_, V1, El<Self>>,
rhs: SubmatrixMut<'_, V2, El<Self>>,
out: SubmatrixMut<'_, V3, El<Self>>,
allocator: A,
) -> SolveResultwhere
V1: AsPointerToSlice<El<Self>>,
V2: AsPointerToSlice<El<Self>>,
V3: AsPointerToSlice<El<Self>>,
A: Allocator,
fn solve_right_with<V1, V2, V3, A>(
&self,
lhs: SubmatrixMut<'_, V1, El<Self>>,
rhs: SubmatrixMut<'_, V2, El<Self>>,
out: SubmatrixMut<'_, V3, El<Self>>,
allocator: A,
) -> SolveResultwhere
V1: AsPointerToSlice<El<Self>>,
V2: AsPointerToSlice<El<Self>>,
V3: AsPointerToSlice<El<Self>>,
A: Allocator,
Solves a linear system
lhs * X = rhs. Read moreSource§impl<R, T> MatmulAlgorithm<R> for T
impl<R, T> MatmulAlgorithm<R> for T
Source§fn add_matmul<S, V1, V2, V3, const T1: bool, const T2: bool, const T3: bool>(
&self,
lhs: TransposableSubmatrix<'_, V1, <R as RingBase>::Element, T1>,
rhs: TransposableSubmatrix<'_, V2, <R as RingBase>::Element, T2>,
dst: TransposableSubmatrixMut<'_, V3, <R as RingBase>::Element, T3>,
ring: S,
)where
V1: AsPointerToSlice<<R as RingBase>::Element>,
V2: AsPointerToSlice<<R as RingBase>::Element>,
V3: AsPointerToSlice<<R as RingBase>::Element>,
S: RingStore<Type = R> + Copy,
fn add_matmul<S, V1, V2, V3, const T1: bool, const T2: bool, const T3: bool>(
&self,
lhs: TransposableSubmatrix<'_, V1, <R as RingBase>::Element, T1>,
rhs: TransposableSubmatrix<'_, V2, <R as RingBase>::Element, T2>,
dst: TransposableSubmatrixMut<'_, V3, <R as RingBase>::Element, T3>,
ring: S,
)where
V1: AsPointerToSlice<<R as RingBase>::Element>,
V2: AsPointerToSlice<<R as RingBase>::Element>,
V3: AsPointerToSlice<<R as RingBase>::Element>,
S: RingStore<Type = R> + Copy,
Source§fn matmul<S, V1, V2, V3, const T1: bool, const T2: bool, const T3: bool>(
&self,
lhs: TransposableSubmatrix<'_, V1, <R as RingBase>::Element, T1>,
rhs: TransposableSubmatrix<'_, V2, <R as RingBase>::Element, T2>,
dst: TransposableSubmatrixMut<'_, V3, <R as RingBase>::Element, T3>,
ring: S,
)where
V1: AsPointerToSlice<<R as RingBase>::Element>,
V2: AsPointerToSlice<<R as RingBase>::Element>,
V3: AsPointerToSlice<<R as RingBase>::Element>,
S: RingStore<Type = R> + Copy,
fn matmul<S, V1, V2, V3, const T1: bool, const T2: bool, const T3: bool>(
&self,
lhs: TransposableSubmatrix<'_, V1, <R as RingBase>::Element, T1>,
rhs: TransposableSubmatrix<'_, V2, <R as RingBase>::Element, T2>,
dst: TransposableSubmatrixMut<'_, V3, <R as RingBase>::Element, T3>,
ring: S,
)where
V1: AsPointerToSlice<<R as RingBase>::Element>,
V2: AsPointerToSlice<<R as RingBase>::Element>,
V3: AsPointerToSlice<<R as RingBase>::Element>,
S: RingStore<Type = R> + Copy,
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<'a, R, C> PreparedConvolutionAlgorithm<R> for C
impl<'a, R, C> PreparedConvolutionAlgorithm<R> for C
type PreparedConvolutionOperand = <<C as Deref>::Target as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand
fn prepare_convolution_operand<S, V>( &self, val: V, ring: S, ) -> <C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand
fn compute_convolution_lhs_prepared<S, V>( &self, lhs: &<C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand, rhs: V, dst: &mut [<R as RingBase>::Element], ring: S, )
fn compute_convolution_prepared<S>( &self, lhs: &<C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand, rhs: &<C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand, dst: &mut [<R as RingBase>::Element], ring: S, )
fn compute_convolution_rhs_prepared<S, V>( &self, lhs: V, rhs: &<C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand, dst: &mut [<R as RingBase>::Element], ring: S, )
fn compute_convolution_inner_product_lhs_prepared<'b, S, I, V>(
&self,
values: I,
dst: &mut [<R as RingBase>::Element],
ring: S,
)where
S: RingStore<Type = R> + Copy,
I: Iterator<Item = (&'b <C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand, V)>,
V: VectorView<<R as RingBase>::Element>,
C: 'b,
R: 'b,
<C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand: 'b,
fn compute_convolution_inner_product_prepared<'b, S, I>(
&self,
values: I,
dst: &mut [<R as RingBase>::Element],
ring: S,
)where
S: RingStore<Type = R> + Copy,
I: Iterator<Item = (&'b <C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand, &'b <C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand)>,
C: 'b,
R: 'b,
<C as PreparedConvolutionAlgorithm<R>>::PreparedConvolutionOperand: 'b,
Source§impl<R> PrincipalIdealRingStore for R
impl<R> PrincipalIdealRingStore for R
Source§fn extended_ideal_gen(
&self,
lhs: &El<Self>,
rhs: &El<Self>,
) -> (El<Self>, El<Self>, El<Self>)
fn extended_ideal_gen( &self, lhs: &El<Self>, rhs: &El<Self>, ) -> (El<Self>, El<Self>, El<Self>)
Source§fn annihilator(&self, val: &El<Self>) -> El<Self>
fn annihilator(&self, val: &El<Self>) -> El<Self>
Source§impl<R> RingExtensionStore for R
impl<R> RingExtensionStore for R
Source§fn into_inclusion(self) -> Inclusion<Self>
fn into_inclusion(self) -> Inclusion<Self>
Returns the inclusion map of the base ring
R -> self.Source§impl<'a, S> RingStore for S
impl<'a, S> RingStore for S
Source§fn get_ring<'b>(&'b self) -> &'b <S as RingStore>::Type
fn get_ring<'b>(&'b self) -> &'b <S as RingStore>::Type
Returns a reference to the stored ring.
Source§fn add_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
fn add_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
Source§fn add_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
fn add_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
Source§fn sub_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
fn sub_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
Source§fn sub_self_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
fn sub_self_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
Source§fn sub_self_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
fn sub_self_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
Source§fn negate_inplace(&self, lhs: &mut El<Self>)
fn negate_inplace(&self, lhs: &mut El<Self>)
Source§fn mul_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
fn mul_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
Source§fn mul_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
fn mul_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)
Source§fn zero(&self) -> El<Self>
fn zero(&self) -> El<Self>
See
RingBase::zero()Source§fn one(&self) -> El<Self>
fn one(&self) -> El<Self>
See
RingBase::one()Source§fn is_neg_one(&self, value: &El<Self>) -> bool
fn is_neg_one(&self, value: &El<Self>) -> bool
Source§fn is_commutative(&self) -> bool
fn is_commutative(&self) -> bool
Source§fn is_noetherian(&self) -> bool
fn is_noetherian(&self) -> bool
Source§fn sub_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
fn sub_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)
Source§fn coerce<S>(&self, from: &S, el: El<S>) -> El<Self>
fn coerce<S>(&self, from: &S, el: El<S>) -> El<Self>
Tries to map the given element into this ring. Read more
Source§fn into_identity(self) -> Identity<Self>
fn into_identity(self) -> Identity<Self>
Returns the identity map
self -> self.Source§fn into_can_hom<S>(self, from: S) -> Result<CanHom<S, Self>, (S, Self)>
fn into_can_hom<S>(self, from: S) -> Result<CanHom<S, Self>, (S, Self)>
Returns the canonical homomorphism
from -> self, if it exists,
moving both rings into the CanHom object.Source§fn into_can_iso<S>(self, from: S) -> Result<CanIso<S, Self>, (S, Self)>
fn into_can_iso<S>(self, from: S) -> Result<CanIso<S, Self>, (S, Self)>
Returns the canonical isomorphism
from -> self, if it exists,
moving both rings into the CanHom object.Source§fn can_hom<'a, S>(&'a self, from: &'a S) -> Option<CanHom<&'a S, &'a Self>>
fn can_hom<'a, S>(&'a self, from: &'a S) -> Option<CanHom<&'a S, &'a Self>>
Returns the canonical homomorphism
from -> self, if it exists.Source§fn can_iso<'a, S>(&'a self, from: &'a S) -> Option<CanIso<&'a S, &'a Self>>
fn can_iso<'a, S>(&'a self, from: &'a S) -> Option<CanIso<&'a S, &'a Self>>
Returns the canonical isomorphism
from -> self, if it exists.Source§fn into_int_hom(self) -> IntHom<Self>
fn into_int_hom(self) -> IntHom<Self>
Returns the homomorphism
Z -> self that exists for any ring.Source§fn int_hom<'a>(&'a self) -> IntHom<&'a Self>
fn int_hom<'a>(&'a self) -> IntHom<&'a Self>
Returns the homomorphism
Z -> self that exists for any ring.Source§fn sum<I>(&self, els: I) -> El<Self>where
I: IntoIterator<Item = El<Self>>,
fn sum<I>(&self, els: I) -> El<Self>where
I: IntoIterator<Item = El<Self>>,
Computes the sum of all elements returned by the iterator. Read more
Source§fn try_sum<I, E>(&self, els: I) -> Result<El<Self>, E>
fn try_sum<I, E>(&self, els: I) -> Result<El<Self>, E>
Equivalent of
RingStore::sum() if the producer of the ring elements
can fail, in which case summation is aborted and the error returned.Source§fn prod<I>(&self, els: I) -> El<Self>where
I: IntoIterator<Item = El<Self>>,
fn prod<I>(&self, els: I) -> El<Self>where
I: IntoIterator<Item = El<Self>>,
Computes the product of all elements returned by the iterator. Read more
Source§fn pow(&self, x: El<Self>, power: usize) -> El<Self>
fn pow(&self, x: El<Self>, power: usize) -> El<Self>
Raises the given element to the given power.
Source§fn pow_gen<R: RingStore>(
&self,
x: El<Self>,
power: &El<R>,
integers: R,
) -> El<Self>where
R::Type: IntegerRing,
fn pow_gen<R: RingStore>(
&self,
x: El<Self>,
power: &El<R>,
integers: R,
) -> El<Self>where
R::Type: IntegerRing,
Raises the given element to the given power, which should be a positive integer
belonging to an arbitrary
IntegerRing. Read moreSource§fn format<'a>(
&'a self,
value: &'a El<Self>,
) -> RingElementDisplayWrapper<'a, Self>
fn format<'a>( &'a self, value: &'a El<Self>, ) -> RingElementDisplayWrapper<'a, Self>
Returns an object that represents the given ring element and implements
std::fmt::Display, to use as formatting parameter. Read moreSource§fn format_within<'a>(
&'a self,
value: &'a El<Self>,
within: EnvBindingStrength,
) -> RingElementDisplayWrapper<'a, Self>
fn format_within<'a>( &'a self, value: &'a El<Self>, within: EnvBindingStrength, ) -> RingElementDisplayWrapper<'a, Self>
Returns an object that represents the given ring element and implements
std::fmt::Display, to use as formatting parameter. As opposed to
RingStore::format(), this function takes an additional argument to
specify the context the result is printed in, which is used to determine
whether to put the value in parenthesis or not. Read moreSource§fn println(&self, value: &El<Self>)
fn println(&self, value: &El<Self>)
Prints the given element. Use for quick & dirty debugging.