pub struct RingRef<'a, R: RingBase + ?Sized> { /* private fields */ }
Expand description
The second most basic crate::ring::RingStore
. Similarly to
crate::ring::RingValue
it is just a no-op container.
§Why do we need this in addition to crate::ring::RingValue
?
Before RingValue::from_ref()
was added, this was important to
allow using a reference to a RingBase
as RingStore
. Since then,
it indeed has only a marginal importance, but note that it is currently
the only way of working with unsized rings (an admittedly pretty exotic
case).
Implementations§
Trait Implementations§
Source§impl<'a, R: RingBase + ?Sized> RingStore for RingRef<'a, R>
impl<'a, R: RingBase + ?Sized> RingStore for RingRef<'a, R>
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 fma(&self, lhs: &El<Self>, rhs: &El<Self>, summand: El<Self>) -> El<Self>
fn fma(&self, lhs: &El<Self>, rhs: &El<Self>, summand: El<Self>) -> El<Self>
See
RingBase::fma()
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.
Source§fn characteristic<I: RingStore + Copy>(&self, ZZ: I) -> Option<El<I>>where
I::Type: IntegerRing,
fn characteristic<I: RingStore + Copy>(&self, ZZ: I) -> Option<El<I>>where
I::Type: IntegerRing,
impl<'a, R: RingBase + ?Sized> Copy for RingRef<'a, R>
Auto Trait Implementations§
impl<'a, R> Freeze for RingRef<'a, R>where
R: ?Sized,
impl<'a, R> RefUnwindSafe for RingRef<'a, R>where
R: RefUnwindSafe + ?Sized,
impl<'a, R> Send for RingRef<'a, R>
impl<'a, R> Sync for RingRef<'a, R>
impl<'a, R> Unpin for RingRef<'a, R>where
R: ?Sized,
impl<'a, R> UnwindSafe for RingRef<'a, R>where
R: RefUnwindSafe + ?Sized,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<R> DivisibilityRingStore for R
impl<R> DivisibilityRingStore for R
Source§impl<R> EuclideanRingStore for R
impl<R> EuclideanRingStore for R
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()
.Source§fn with_wrapped_generator<'a, F, const M: usize>(
&'a self,
f: F,
) -> [El<Self>; M]
fn with_wrapped_generator<'a, F, const M: usize>( &'a self, f: F, ) -> [El<Self>; M]
Temporarily wraps the canonical generator in a
RingElementWrapper
, for more
natural creation of ring elements.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<T> Pointable for T
impl<T> Pointable for T
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
.