RingValue

Struct RingValue 

Source
pub struct RingValue<R: RingBase> { /* private fields */ }
Expand description

The most fundamental crate::ring::RingStore. It is basically a no-op container, i.e. stores a crate::ring::RingBase object by value, and allows accessing it.

§Why is this necessary?

In fact, that we need this trait is just the result of a technical detail. We cannot implement

impl<R: RingBase> RingStore for R {}
impl<'a, R: RingStore> RingStore for &'a R {}

since this might cause conflicting implementations. Instead, we implement

impl<R: RingBase> RingStore for RingValue<R> {}
impl<'a, R: RingStore> RingStore for &'a R {}

This causes some inconvenience, as now we cannot chain crate::ring::RingStore in the case of crate::ring::RingValue. Furthermore, this trait will be necessary everywhere - to define a reference to a ring of type A, we now have to write &RingValue<A>.

To simplify this, we propose to use the following simple pattern: Create your ring type as

struct ABase { ... }
impl RingBase for ABase { ... } 

and then provide a type alias

type A = RingValue<ABase>;

Implementations§

Source§

impl<R: RingBase> RingValue<R>

Source

pub const fn from(value: R) -> Self

Wraps the given RingBase in a RingValue.

This is a dedicated function instead of an implementation of std::convert::From so that we can declare it const.

Source

pub fn from_ref<'a>(value: &'a R) -> &'a Self

Creates a reference to a RingValue from a reference to the RingBase.

Source

pub fn into(self) -> R

Unwraps the RingBase.

The more common case would be to get a reference, which can be done with RingStore::get_ring().

Source§

impl<T: PrimitiveInt> RingValue<StaticRingBase<T>>

Source

pub const RING: StaticRing<T>

The singleton ring instance of StaticRing.

Source§

impl<A: Allocator + Clone> RingValue<RustBigintRingBase<A>>

Source

pub fn new_with_alloc(allocator: A) -> RustBigintRing<A>

Available on crate feature 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.

Source§

impl RingValue<RustBigintRingBase>

Source

pub const RING: RustBigintRing

Default instance of RustBigintRing, the ring of arbitrary-precision integers.

Source§

impl<I: RingStore> RingValue<ZnBase<I>>
where I::Type: IntegerRing,

Source

pub fn new(integer_ring: I, modulus: El<I>) -> Self

Source§

impl RingValue<ZnBase>

Source

pub const fn new(modulus: u64) -> Self

Source§

impl RingValue<ZnFastmulBase>

Source

pub fn new(base: Zn) -> Option<Self>

Source§

impl<const N: u64, const IS_FIELD: bool> RingValue<ZnBase<N, IS_FIELD>>

Source

pub const RING: Self

Available on crate feature 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.

Source§

impl<C: RingStore, J: RingStore> RingValue<ZnBase<C, J>>

Source

pub fn new(summands: Vec<C>, large_integers: J) -> Self

Creates a new ring for Z/nZ with n = m1 ... mr where the mi are the moduli of the given component rings. Furthermore, the corresponding large integer ring must be provided, which has to be able to store values of size at least n^3.

Source§

impl<J: RingStore> RingValue<ZnBase<RingValue<ZnBase>, J>>

Source

pub fn create_from_primes(primes: Vec<i64>, large_integers: J) -> Self

Source§

impl<C: RingStore, J: RingStore, A: Allocator + Clone> RingValue<ZnBase<C, J, A>>

Source

pub fn new_with_alloc( summands: Vec<C>, large_integers: J, element_allocator: A, ) -> Self

Available on crate feature unstable-enable only.

Creates a new ring for Z/nZ with n = m1 ... mr where the mi are the moduli of the given component rings. Furthermore, the corresponding large integer ring must be provided, which has to be able to store values of size at least n^3.

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

Source§

impl<C: RingStore, J: RingStore, A: Allocator + Clone> RingValue<ZnBase<C, J, A>>

Source

pub fn from_congruence<I>(&self, el: I) -> ZnEl<C, A>
where I: IntoIterator<Item = El<C>>,

Given values ai for each component ring Z/miZ, computes the unique element in this ring Z/nZ that is congruent to ai modulo mi. The “opposite” function is Zn::get_congruence().

Source

pub fn get_congruence<'a>( &self, el: &'a ZnEl<C, A>, ) -> impl 'a + VectorView<El<C>>

Given a in Z/nZ, returns the vector whose i-th entry is a mod mi, where the mi are the moduli of the component rings of this ring.

Source§

impl<R: RingStore> RingValue<DensePolyRingBase<R>>

Source

pub fn new(base_ring: R, unknown_name: &'static str) -> Self

Source§

impl<R: RingStore, A: Allocator + Clone, C: ConvolutionAlgorithm<R::Type>> RingValue<DensePolyRingBase<R, A, C>>

Source

pub fn new_with_convolution( base_ring: R, unknown_name: &'static str, element_allocator: A, convolution_algorithm: C, ) -> Self

Available on crate feature 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.

Source§

impl<R: RingStore> RingValue<SparsePolyRingBase<R>>

Source

pub fn new(base_ring: R, unknown_name: &'static str) -> Self

Creates a new sparse polynomial ring over the given base ring.

Source§

impl RingValue<Complex64Base>

Source

pub const RING: Self

Source

pub const I: Complex64El

Source§

impl RingValue<Complex64Base>

Source

pub fn abs(&self, val: Complex64El) -> f64

Source

pub fn conjugate(&self, val: Complex64El) -> Complex64El

Source

pub fn exp(&self, exp: Complex64El) -> Complex64El

Source

pub fn closest_gaussian_int(&self, val: Complex64El) -> (i64, i64)

Source

pub fn ln_main_branch(&self, val: Complex64El) -> Complex64El

Source

pub fn is_absolute_approx_eq( &self, lhs: Complex64El, rhs: Complex64El, absolute_threshold: f64, ) -> bool

Source

pub fn is_relative_approx_eq( &self, lhs: Complex64El, rhs: Complex64El, relative_limit: f64, ) -> bool

Source

pub fn is_approx_eq( &self, lhs: Complex64El, rhs: Complex64El, precision: u64, ) -> bool

Source

pub fn from_f64(&self, x: f64) -> Complex64El

Source

pub fn root_of_unity(&self, i: i64, n: i64) -> Complex64El

Source

pub fn re(&self, x: Complex64El) -> f64

Source

pub fn im(&self, x: Complex64El) -> f64

Source§

impl<R, V> RingValue<FreeAlgebraImplBase<R, V>>
where R: RingStore, V: VectorView<El<R>>,

Source

pub fn new(base_ring: R, rank: usize, x_pow_rank: V) -> Self

Creates a new FreeAlgebraImpl ring as extension of the given base ring.

The created ring is R[X]/(X^rank - sum_i x_pow_rank[i] X^i).

Source§

impl<R, V, A, C> RingValue<FreeAlgebraImplBase<R, V, A, C>>

Source

pub fn new_with_convolution( base_ring: R, rank: usize, x_pow_rank: V, gen_name: &'static str, element_allocator: A, convolution: C, ) -> Self

Available on crate feature 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.

Source§

impl RingValue<GaloisFieldBase<RingValue<AsFieldBase<RingValue<FreeAlgebraImplBase<RingValue<AsFieldBase<RingValue<ZnBase>>>, SparseMapVector<RingValue<AsFieldBase<RingValue<ZnBase>>>>>>>>>>

Source

pub fn new(p: i64, degree: usize) -> Self

Creates a new instance of the finite/galois field GF(p^degree).

If you need more options for configuration, consider using GaloisField::new_with_convolution() or the most general GaloisField::create().

§Example
let F25 = GaloisField::new(5, 2);
let generator = F25.canonical_gen();
let norm = F25.mul_ref_fst(&generator, F25.pow(F25.clone_el(&generator), 5));
let inclusion = F25.inclusion();
// the norm must be an element of the prime field
assert!(F25.base_ring().elements().any(|x| {
    F25.eq_el(&norm, &inclusion.map(x))
}));
Source§

impl<R, A, C> RingValue<GaloisFieldBase<RingValue<AsFieldBase<RingValue<FreeAlgebraImplBase<R, SparseMapVector<R>, A, C>>>>>>

Source

pub fn new_with_convolution( base_field: R, degree: usize, allocator: A, convolution_algorithm: C, ) -> Self

Available on crate feature unstable-enable only.

Creates a new instance of a finite/galois field, as given-degree extension of the given base ring. The base ring must have prime characteristic.

If you need to specify the minimal polynomial used, see also GaloisField::create().

§Example

Sometimes it is useful to have the base ring also be a field. This can e.g. be achieved by

#![feature(allocator_api)]
let F25 = GaloisField::new_with_convolution(Zn::new(5).as_field().ok().unwrap(), 2, Global, STANDARD_CONVOLUTION);
let generator = F25.canonical_gen();
let norm = F25.mul_ref_fst(&generator, F25.pow(F25.clone_el(&generator), 5));
let inclusion = F25.inclusion();
// the norm must be an element of the prime field
assert!(F25.base_ring().elements().any(|x| {
    F25.eq_el(&norm, &inclusion.map(x))
}));
§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.

Source§

impl<Impl> RingValue<GaloisFieldBase<Impl>>

Source

pub fn create(base: Impl) -> Self

Available on crate feature unstable-enable only.

Most generic function to create a finite/galois field.

It allows specifying all associated data. Note also that the passed implementation must indeed be a field, and this is not checked at runtime. Passing a non-field is impossible, unless AsFieldBase::promise_is_field() is used.

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

Source§

impl RingValue<NumberFieldBase<RingValue<AsFieldBase<RingValue<FreeAlgebraImplBase<RingValue<RationalFieldBase<RingValue<MPZBase>>>, Vec<<<RingValue<RationalFieldBase<RingValue<MPZBase>>> as RingStore>::Type as RingBase>::Element>>>>>, RingValue<MPZBase>>>

Source

pub fn try_new<P>(poly_ring: P, generating_poly: &El<P>) -> Option<Self>

Available on crate feature unstable-enable only.

If the given polynomial is irreducible, returns the number field generated by it (with a root of the polynomial as canonical generator). Otherwise, None is returned.

If the given polynomial is not integral or not monic, consider using NumberField::try_adjoin_root() instead.

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

Source

pub fn new<P>(poly_ring: P, generating_poly: &El<P>) -> Self

Available on crate feature unstable-enable only.

Given a monic, integral and irreducible polynomial, returns the number field generated by it (with a root of the polynomial as canonical generator).

Panics if the polynomial is not irreducible.

If the given polynomial is not integral or not monic, consider using NumberField::adjoin_root() instead.

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

Source

pub fn try_adjoin_root<P>( poly_ring: P, generating_poly: &El<P>, ) -> Option<(Self, El<Self>)>

Available on crate feature unstable-enable only.

If the given polynopmial is irreducible, computes the number field generated by one of its roots, and returns it together with the root (which is not necessarily the canonical generator of the number field). Otherwise, None is returned.

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

Source

pub fn adjoin_root<P>(poly_ring: P, generating_poly: &El<P>) -> (Self, El<Self>)

Available on crate feature 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.

Source§

impl<Impl, I> RingValue<NumberFieldBase<Impl, I>>

Source

pub fn create(implementation: Impl) -> Self

Available on crate feature unstable-enable only.

Creates a new number field with the given underlying implementation.

Requires that all coefficients of the generating polynomial are integral.

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

Source

pub fn into_choose_complex_embedding(self) -> ComplexEmbedding<Self, Impl, I>

Available on crate feature 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.

Source

pub fn choose_complex_embedding<'a>( &'a self, ) -> ComplexEmbedding<&'a Self, Impl, I>

Available on crate feature 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.

Source§

impl<R> RingValue<MultivariatePolyRingImplBase<R>>
where R: RingStore,

Source

pub fn new(base_ring: R, variable_count: usize) -> Self

Creates a new instance of the ring base_ring[X0, ..., Xn] where n = variable_count - 1.

Source§

impl<R, A> RingValue<MultivariatePolyRingImplBase<R, A>>
where R: RingStore, A: Clone + Allocator + Send,

Source

pub fn new_with_mult_table( base_ring: R, variable_count: usize, max_supported_deg: u16, max_multiplication_table: (u16, u16), allocator: A, ) -> Self

Available on crate feature unstable-enable only.

Creates a new instance of the ring base_ring[X0, ..., Xn] where n = variable_count - 1.

The can represent all monomials up to the given degree, and will panic should an operation produce a monomial that exceeds this degree.

Furthermore, max_multiplication_table = (d1, d2) configures for which monomials a multiplication table is precomputed. In particular, a multiplication table is precomputed for all products where one summand has degree <= d2 and the other summand has degree <= d1. Note that d1 <= d2 is required.

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

Source§

impl RingValue<Real64Base>

Source

pub const RING: RingValue<Real64Base>

The singleton ring instance of Real64.

Source§

impl<I> RingValue<RationalFieldBase<I>>
where I: RingStore, I::Type: IntegerRing,

Source

pub const fn new(integers: I) -> Self

Returns the fraction field of the given integer ring.

Source

pub fn num<'a>(&'a self, el: &'a El<Self>) -> &'a El<I>

Source

pub fn den<'a>(&'a self, el: &'a El<Self>) -> &'a El<I>

Source§

impl RingValue<MPZBase>

Source

pub const RING: MPZ

Available on crate feature mpir only.
Source§

impl<R> RingValue<AsLocalPIRBase<R>>
where R: RingStore, R::Type: ZnRing,

Source

pub fn from_zn(ring: R) -> Option<Self>

Available on crate feature 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.

Source§

impl<R> RingValue<AsLocalPIRBase<R>>
where R: RingStore, R::Type: Field,

Source

pub fn from_field(ring: R) -> Self

Available on crate feature 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.

Source§

impl<R> RingValue<AsLocalPIRBase<R>>

Source

pub fn from_localpir(ring: R) -> Self

Available on crate feature 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.

Source§

impl<R> RingValue<AsLocalPIRBase<R>>

Source

pub fn from_as_field(ring: AsField<R>) -> Self

Available on crate feature 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.

Source§

impl<R> RingValue<FractionFieldImplBase<R>>
where R: RingStore, R::Type: Domain,

Source

pub fn new(base_ring: R) -> Self

Available on crate feature 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.

Source§

impl<R: RingStore, const N: usize> RingValue<DirectPowerRingBase<R, N>>

Source

pub fn new(base: R) -> Self

Available on crate feature 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: Clone + RingBase> Clone for RingValue<R>

Source§

fn clone(&self) -> RingValue<R>

Returns a duplicate 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<R: Debug + RingBase> Debug for RingValue<R>

Source§

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

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

impl<R: RingBase + Default> Default for RingValue<R>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de, R> Deserialize<'de> for RingValue<R>
where R: Deserialize<'de> + RingBase,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<R: RingBase> RingStore for RingValue<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 fma(&self, lhs: &El<Self>, rhs: &El<Self>, summand: El<Self>) -> 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 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 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<R> Serialize for RingValue<R>
where R: Serialize + RingBase,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<R: Copy + RingBase> Copy for RingValue<R>

Auto Trait Implementations§

§

impl<R> Freeze for RingValue<R>
where R: Freeze,

§

impl<R> RefUnwindSafe for RingValue<R>
where R: RefUnwindSafe,

§

impl<R> Send for RingValue<R>
where R: Send,

§

impl<R> Sync for RingValue<R>
where R: Sync,

§

impl<R> Unpin for RingValue<R>
where R: Unpin,

§

impl<R> UnwindSafe for RingValue<R>
where R: UnwindSafe,

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, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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],

Temporarily wraps the canonical generator in a RingElementWrapper, for more natural creation of ring elements.
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,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,