feanor_math::ring

Struct RingRef

Source
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§

Source§

impl<'a, R: RingBase + ?Sized> RingRef<'a, R>

Source

pub const fn new(value: &'a R) -> Self

Creates a new RingRef from a reference to a RingBase.

Source

pub fn into(self) -> &'a R

Returns the stored reference to the RingBase.

This is almost the same as RingStore::get_ring(), except for that the lifetime of the returned reference is not bounded to the lifetime of the RingRef.

Trait Implementations§

Source§

impl<'a, R: RingBase + ?Sized> Clone for RingRef<'a, R>

Source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a, R: Debug + RingBase + ?Sized> Debug for RingRef<'a, R>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, R: RingBase + ?Sized> RingStore for RingRef<'a, R>

Source§

type Type = R

The type of the stored ring.
Source§

fn get_ring(&self) -> &R

Returns a reference to the stored ring.
Source§

fn clone_el(&self, val: &El<Self>) -> El<Self>

Source§

fn add_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)

Source§

fn add_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)

Source§

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>)

Source§

fn sub_self_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)

Source§

fn negate_inplace(&self, lhs: &mut El<Self>)

Source§

fn mul_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)

Source§

fn mul_assign_ref(&self, lhs: &mut El<Self>, rhs: &El<Self>)

Source§

fn zero(&self) -> El<Self>

Source§

fn one(&self) -> El<Self>

Source§

fn neg_one(&self) -> El<Self>

Source§

fn eq_el(&self, lhs: &El<Self>, rhs: &El<Self>) -> bool

Source§

fn is_zero(&self, value: &El<Self>) -> bool

Source§

fn is_one(&self, value: &El<Self>) -> bool

Source§

fn is_neg_one(&self, value: &El<Self>) -> bool

Source§

fn is_commutative(&self) -> bool

Source§

fn is_noetherian(&self) -> bool

Source§

fn negate(&self, value: El<Self>) -> El<Self>

Source§

fn sub_assign(&self, lhs: &mut El<Self>, rhs: El<Self>)

Source§

fn add_ref(&self, lhs: &El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn add_ref_fst(&self, lhs: &El<Self>, rhs: El<Self>) -> El<Self>

Source§

fn add_ref_snd(&self, lhs: El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn add(&self, lhs: El<Self>, rhs: El<Self>) -> El<Self>

Source§

fn sub_ref(&self, lhs: &El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn sub_ref_fst(&self, lhs: &El<Self>, rhs: El<Self>) -> El<Self>

Source§

fn sub_ref_snd(&self, lhs: El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn sub(&self, lhs: El<Self>, rhs: El<Self>) -> El<Self>

Source§

fn mul_ref(&self, lhs: &El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn mul_ref_fst(&self, lhs: &El<Self>, rhs: El<Self>) -> El<Self>

Source§

fn mul_ref_snd(&self, lhs: El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn mul(&self, lhs: El<Self>, rhs: El<Self>) -> El<Self>

Source§

fn square(&self, value: &mut El<Self>)

Source§

fn coerce<S>(&self, from: &S, el: El<S>) -> El<Self>
where S: RingStore, Self::Type: CanHomFrom<S::Type>,

Tries to map the given element into this ring. Read more
Source§

fn into_identity(self) -> Identity<Self>

Returns the identity map self -> self.
Source§

fn identity<'a>(&'a self) -> Identity<&'a Self>

Returns the identity map self -> self.
Source§

fn into_can_hom<S>(self, from: S) -> Result<CanHom<S, Self>, (S, Self)>
where Self: Sized, S: RingStore, Self::Type: CanHomFrom<S::Type>,

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)>
where Self: Sized, S: RingStore, Self::Type: CanIsoFromTo<S::Type>,

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>>
where S: RingStore, Self::Type: CanHomFrom<S::Type>,

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>>
where S: RingStore, Self::Type: CanIsoFromTo<S::Type>,

Returns the canonical isomorphism from -> self, if it exists.
Source§

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>

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>>,

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>
where I: IntoIterator<Item = 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>>,

Computes the product of all elements returned by the iterator. Read more
Source§

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,

Raises the given element to the given power, which should be a positive integer belonging to an arbitrary IntegerRing. Read more
Source§

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 more
Source§

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,

Source§

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>
where R: Sync + ?Sized,

§

impl<'a, R> Sync for RingRef<'a, R>
where R: Sync + ?Sized,

§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<R> DivisibilityRingStore for R

Source§

fn checked_left_div(&self, lhs: &El<Self>, rhs: &El<Self>) -> Option<El<Self>>

Source§

fn divides_left(&self, lhs: &El<Self>, rhs: &El<Self>) -> bool

Source§

fn is_unit(&self, x: &El<Self>) -> bool

Source§

fn checked_div(&self, lhs: &El<Self>, rhs: &El<Self>) -> Option<El<Self>>

Source§

fn divides(&self, lhs: &El<Self>, rhs: &El<Self>) -> bool

Source§

fn invert(&self, lhs: &El<Self>) -> Option<El<Self>>

Source§

impl<R> EuclideanRingStore for R

Source§

fn euclidean_div_rem( &self, lhs: El<Self>, rhs: &El<Self>, ) -> (El<Self>, El<Self>)

Source§

fn euclidean_div(&self, lhs: El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn euclidean_rem(&self, lhs: El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn euclidean_deg(&self, val: &El<Self>) -> Option<usize>

Source§

impl<R> FiniteRingStore for R
where R: RingStore, <R as RingStore>::Type: FiniteRing,

Source§

fn elements<'a>(&'a self) -> <Self::Type as FiniteRing>::ElementsIter<'a>

Source§

fn random_element<G: FnMut() -> u64>(&self, rng: G) -> El<Self>

Source§

fn size<I: IntegerRingStore + Copy>(&self, ZZ: I) -> Option<El<I>>
where I::Type: IntegerRing,

Source§

impl<R> FreeAlgebraStore for R
where R: RingStore, <R as RingStore>::Type: FreeAlgebra,

Source§

fn canonical_gen(&self) -> El<Self>

Source§

fn rank(&self) -> usize

Source§

fn trace(&self, el: El<Self>) -> El<<Self::Type as RingExtension>::BaseRing>

Source§

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>

Source§

fn from_canonical_basis_extended<V>(&self, vec: V) -> El<Self>
where V: IntoIterator<Item = El<<Self::Type as RingExtension>::BaseRing>>,

Source§

fn generating_poly<P, H>(&self, poly_ring: P, hom: H) -> El<P>

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>

If this ring is a field, returns a wrapper around this ring that implements crate::field::FieldStore. Read more
Source§

fn poly_repr<P, H>(&self, to: P, el: &El<Self>, hom: H) -> El<P>

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>

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 more
Source§

fn charpoly<P, H>(&self, el: &El<Self>, poly_ring: P, hom: H) -> El<P>

Source§

fn with_wrapped_generator<'a, F, const M: usize>( &'a self, f: F, ) -> [El<Self>; M]
where F: FnOnce(&RingElementWrapper<&'a Self>) -> [RingElementWrapper<&'a Self>; M],

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<R> HashableElRingStore for R

Source§

fn hash<H: Hasher>(&self, el: &El<Self>, h: &mut H)

Source§

fn default_hash(&self, el: &El<Self>) -> u64

Computes a hash of the given element using some default hasher. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<R> LinSolveRingStore for R
where R: RingStore, <R as RingStore>::Type: LinSolveRing,

Source§

fn solve_right<V1, V2, V3>( &self, lhs: SubmatrixMut<'_, V1, El<Self>>, rhs: SubmatrixMut<'_, V2, El<Self>>, out: SubmatrixMut<'_, V3, El<Self>>, ) -> SolveResult
where V1: AsPointerToSlice<El<Self>>, V2: AsPointerToSlice<El<Self>>, V3: AsPointerToSlice<El<Self>>,

Solves a linear system lhs * X = rhs. Read more
Source§

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, ) -> SolveResult
where V1: AsPointerToSlice<El<Self>>, V2: AsPointerToSlice<El<Self>>, V3: AsPointerToSlice<El<Self>>, A: Allocator,

Solves a linear system lhs * X = rhs. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R> PrincipalIdealRingStore for R

Source§

fn checked_div_min(&self, lhs: &El<Self>, rhs: &El<Self>) -> Option<El<Self>>

Source§

fn extended_ideal_gen( &self, lhs: &El<Self>, rhs: &El<Self>, ) -> (El<Self>, El<Self>, El<Self>)

Source§

fn ideal_gen(&self, lhs: &El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn annihilator(&self, val: &El<Self>) -> El<Self>

Source§

fn lcm(&self, lhs: &El<Self>, rhs: &El<Self>) -> El<Self>

Source§

fn gcd(&self, lhs: &El<Self>, rhs: &El<Self>) -> El<Self>

Source§

impl<R> RingExtensionStore for R

Source§

fn base_ring(&self) -> &<Self::Type as RingExtension>::BaseRing

Source§

fn into_inclusion(self) -> Inclusion<Self>

Returns the inclusion map of the base ring R -> self.
Source§

fn inclusion<'a>(&'a self) -> Inclusion<&'a Self>

Returns the inclusion map of the base ring R -> self.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<R> ZnRingStore for R
where R: RingStore, <R as RingStore>::Type: ZnRing,