pub struct CanHom<R, S>{ /* private fields */ }
Expand description
A high-level wrapper of CanHomFrom::Homomorphism
that references the
domain and codomain rings, and is much easier to use.
§Example
let from = StaticRing::<i32>::RING;
let to = StaticRing::<i64>::RING;
let hom = to.can_hom(&from).unwrap();
assert_eq!(7, hom.map(7));
// instead of
let hom = to.get_ring().has_canonical_hom(from.get_ring()).unwrap();
assert_eq!(7, to.get_ring().map_in(from.get_ring(), 7, &hom));
§See also
The “bi-directional” variant CanHom
, the basic interfaces CanHomFrom
and
CanIsoFromTo
and the very simplified function RingStore::coerce
.
Implementations§
Source§impl<R, S> CanHom<R, S>
impl<R, S> CanHom<R, S>
Sourcepub fn new(from: R, to: S) -> Result<Self, (R, S)>
pub fn new(from: R, to: S) -> Result<Self, (R, S)>
Creates a new CanHom
from from
to to
, if the
corresonding rings support it.
Sourcepub fn raw_hom(&self) -> &<S::Type as CanHomFrom<R::Type>>::Homomorphism
pub fn raw_hom(&self) -> &<S::Type as CanHomFrom<R::Type>>::Homomorphism
Returns a reference to the underlying CanHomFrom::Homomorphism
.
Sourcepub fn into_raw_hom(self) -> <S::Type as CanHomFrom<R::Type>>::Homomorphism
pub fn into_raw_hom(self) -> <S::Type as CanHomFrom<R::Type>>::Homomorphism
Returns the underlying CanHomFrom::Homomorphism
, consuming this object.
Sourcepub fn from_raw_parts(
from: R,
to: S,
data: <S::Type as CanHomFrom<R::Type>>::Homomorphism,
) -> Self
Available on crate feature unstable-enable
only.
pub fn from_raw_parts( from: R, to: S, data: <S::Type as CanHomFrom<R::Type>>::Homomorphism, ) -> Self
unstable-enable
only.§Availability
This API is marked as unstable and is only available when the unstable-enable
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
Trait Implementations§
Source§impl<R, S> Homomorphism<<R as RingStore>::Type, <S as RingStore>::Type> for CanHom<R, S>
impl<R, S> Homomorphism<<R as RingStore>::Type, <S as RingStore>::Type> for CanHom<R, S>
Source§type CodomainStore = S
type CodomainStore = S
The type of the
RingStore
used by this object to store the codomain ring.Source§type DomainStore = R
type DomainStore = R
The type of the
RingStore
used by this object to store the domain ring.Source§fn map(&self, el: El<R>) -> El<S>
fn map(&self, el: El<R>) -> El<S>
Applies this homomorphism to the given element from the domain ring,
resulting in an element in the codomain ring.
Source§fn map_ref(&self, el: &El<R>) -> El<S>
fn map_ref(&self, el: &El<R>) -> El<S>
Applies this homomorphism to the given element from the domain ring,
resulting in an element in the codomain ring.
Source§fn mul_assign_map(&self, lhs: &mut El<S>, rhs: El<R>)
fn mul_assign_map(&self, lhs: &mut El<S>, rhs: El<R>)
Multiplies the given element in the codomain ring with an element obtained
by applying this homomorphism to a given element from the domain ring. Read more
Source§fn mul_assign_ref_map(&self, lhs: &mut El<S>, rhs: &El<R>)
fn mul_assign_ref_map(&self, lhs: &mut El<S>, rhs: &El<R>)
Multiplies the given element in the codomain ring with an element obtained
by applying this homomorphism to a given element from the domain ring. Read more
Source§fn fma_map(&self, lhs: &El<S>, rhs: &El<R>, summand: El<S>) -> El<S>
fn fma_map(&self, lhs: &El<S>, rhs: &El<R>, summand: El<S>) -> El<S>
Fused-multiply-add. This computes
lhs * rhs + summand
, where rhs
is mapped
into the ring via this homomorphism. Read moreSource§fn mul_map(
&self,
lhs: Codomain::Element,
rhs: Domain::Element,
) -> Codomain::Element
fn mul_map( &self, lhs: Codomain::Element, rhs: Domain::Element, ) -> Codomain::Element
Multiplies the given element in the codomain ring with an element obtained
by applying this homomorphism to a given element from the domain ring. Read more
Source§fn mul_ref_fst_map(
&self,
lhs: &Codomain::Element,
rhs: Domain::Element,
) -> Codomain::Element
fn mul_ref_fst_map( &self, lhs: &Codomain::Element, rhs: Domain::Element, ) -> Codomain::Element
Multiplies the given element in the codomain ring with an element obtained
by applying this homomorphism to a given element from the domain ring. Read more
Source§fn mul_ref_snd_map(
&self,
lhs: Codomain::Element,
rhs: &Domain::Element,
) -> Codomain::Element
fn mul_ref_snd_map( &self, lhs: Codomain::Element, rhs: &Domain::Element, ) -> Codomain::Element
Multiplies the given element in the codomain ring with an element obtained
by applying this homomorphism to a given element from the domain ring. Read more
Source§fn mul_ref_map(
&self,
lhs: &Codomain::Element,
rhs: &Domain::Element,
) -> Codomain::Element
fn mul_ref_map( &self, lhs: &Codomain::Element, rhs: &Domain::Element, ) -> Codomain::Element
Multiplies the given element in the codomain ring with an element obtained
by applying this homomorphism to a given element from the domain ring. Read more
Source§fn compose<F, PrevDomain: ?Sized + RingBase>(
self,
prev: F,
) -> ComposedHom<PrevDomain, Domain, Codomain, F, Self>where
Self: Sized,
F: Homomorphism<PrevDomain, Domain>,
fn compose<F, PrevDomain: ?Sized + RingBase>(
self,
prev: F,
) -> ComposedHom<PrevDomain, Domain, Codomain, F, Self>where
Self: Sized,
F: Homomorphism<PrevDomain, Domain>,
Constructs the homomorphism
x -> self.map(prev.map(x))
.Source§fn mul_assign_ref_map_through_hom<First: ?Sized + RingBase, H: Homomorphism<First, Domain>>(
&self,
lhs: &mut Codomain::Element,
rhs: &First::Element,
hom: H,
)
fn mul_assign_ref_map_through_hom<First: ?Sized + RingBase, H: Homomorphism<First, Domain>>( &self, lhs: &mut Codomain::Element, rhs: &First::Element, hom: H, )
Multiplies the given element in the codomain ring with an element obtained
by applying this and another homomorphism to a given element from another ring. Read more
Source§fn mul_assign_map_through_hom<First: ?Sized + RingBase, H: Homomorphism<First, Domain>>(
&self,
lhs: &mut Codomain::Element,
rhs: First::Element,
hom: H,
)
fn mul_assign_map_through_hom<First: ?Sized + RingBase, H: Homomorphism<First, Domain>>( &self, lhs: &mut Codomain::Element, rhs: First::Element, hom: H, )
Multiplies the given element in the codomain ring with an element obtained
by applying this and another homomorphism to a given element from another ring. Read more
Auto Trait Implementations§
impl<R, S> Freeze for CanHom<R, S>where
R: Freeze,
S: Freeze,
<<S as RingStore>::Type as CanHomFrom<<R as RingStore>::Type>>::Homomorphism: Freeze,
impl<R, S> RefUnwindSafe for CanHom<R, S>where
R: RefUnwindSafe,
S: RefUnwindSafe,
<<S as RingStore>::Type as CanHomFrom<<R as RingStore>::Type>>::Homomorphism: RefUnwindSafe,
impl<R, S> Send for CanHom<R, S>where
R: Send,
S: Send,
<<S as RingStore>::Type as CanHomFrom<<R as RingStore>::Type>>::Homomorphism: Send,
impl<R, S> Sync for CanHom<R, S>where
R: Sync,
S: Sync,
<<S as RingStore>::Type as CanHomFrom<<R as RingStore>::Type>>::Homomorphism: Sync,
impl<R, S> Unpin for CanHom<R, S>where
R: Unpin,
S: Unpin,
<<S as RingStore>::Type as CanHomFrom<<R as RingStore>::Type>>::Homomorphism: Unpin,
impl<R, S> UnwindSafe for CanHom<R, S>where
R: UnwindSafe,
S: UnwindSafe,
<<S as RingStore>::Type as CanHomFrom<<R as RingStore>::Type>>::Homomorphism: 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
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<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 more