135 const std::vector<int> &heft_vec = {});
171 virtual bool is_ZZ()
const {
return false; }
172 virtual bool is_QQ()
const {
return false; }
173 virtual bool is_RRR()
const {
return false; }
174 virtual bool is_RRi()
const {
return false; }
175 virtual bool is_CCC()
const {
return false; }
307 ERROR(
"not implemented for this ring");
470 bool p_parens =
false)
const = 0;
474 int first_var)
const = 0;
492 const std::vector<int> &wts)
const;
495 const std::vector<int> &wts)
const;
509 const std::vector<int> &wts,
573 bool p_parens =
false)
const;
579 vec
add_vec(vec v, vec w)
const;
588 bool opposite_mult)
const;
608 vec
vec_diff(vec v,
int rankFw, vec w,
int use_coeff)
const;
624 const std::vector<int> &wts,
632 const std::vector<int> &wts)
const;
636 const std::vector<int> &wts)
const;
677# define ZERO_RINGELEM (ring_elem(static_cast<Nterm *>(0)))
exponents::ConstExponents const_exponents
exponents::Exponents exponents_t
Legacy RingZZ — a Ring-derived integer ring backed by GMP mpz_t.
Shared base of the aring framework (namespace M2) that unifies the engine's coefficient rings.
Generic CoefficientRing adapter that wraps an arbitrary const Ring* and forwards every operation to i...
Engine-side fraction field of a polynomial domain R_.
Engine-side free module R^n over a Ring.
Engine-side finite field GF(p^n) built on top of (Z/p)[t] / f(t) for a primitive element of the resul...
Engine-side localisation of a polynomial ring at a prime ideal.
Concrete Ring wrapper around an owned FreeAlgebra (no quotient).
Abstract Ring subclass that lifts either a FreeAlgebra or a FreeAlgebraQuotient into the engine's Rin...
Concrete Ring wrapper around an owned FreeAlgebraQuotient (the quotient counterpart of M2FreeAlgebra)...
monomial make_one() const
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Abstract base class for mutable matrices over an arbitrary engine Ring, the in-place counterpart of t...
PolynomialRing subclass whose elements are represented as a single flat Nterm* linked list (no fracti...
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
Abstract base for the engine's polynomial-ring hierarchy.
virtual bool is_ZZ() const
virtual ring_elem divide_by_expvector(const_exponents exp, const ring_elem a) const
vec mult_vec(int n, vec v) const
virtual void remove(ring_elem &f) const =0
vec component_shift(int n, vec v) const
void set_non_unit(ring_elem zero_div) const
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const =0
virtual void monomial_divisor(const ring_elem a, exponents_t exp) const
virtual ring_elem var(int v) const
virtual ring_elem content(ring_elem f) const
virtual const PolyRingFlat * cast_to_PolyRingFlat() const
virtual PolyRing * cast_to_PolyRing()
const ARing * getARing() const
bool vec_multi_degree(const FreeModule *F, const vec f, monomial degf) const
virtual SchurRing2 * cast_to_SchurRing2()
vec vec_homogenize(const FreeModule *F, const vec f, int v, int deg, const std::vector< int > &wts) const
virtual const SchurSnRing * cast_to_SchurSnRing() const
virtual FractionField * cast_to_FractionField()
virtual bool is_quotient_ring() const
virtual bool from_BigReal(gmp_RR a, ring_elem &result) const
void subtract_to(ring_elem &f, const ring_elem &g) const
vec sub_vector(const vecterm *v, M2_arrayint r) const
virtual PolyQQ * cast_to_PolyQQ()
virtual FreeModule * make_FreeModule() const
void negate_to(ring_elem &f) const
virtual M2::RingID ringID() const
virtual const M2FreeAlgebraOrQuotient * cast_to_M2FreeAlgebraOrQuotient() const
virtual bool from_Interval(gmp_RRi a, ring_elem &result) const
virtual const RRi * cast_to_RRi() const
vec make_vec(int r, ring_elem a) const
virtual const SchurRing2 * cast_to_SchurRing2() const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const =0
vec add_vec(vec v, vec w) const
virtual bool is_unit(const ring_elem f) const =0
virtual RingZZ * cast_to_RingZZ()
vec tensor(const FreeModule *F, vec v, const FreeModule *G, vec w) const
virtual void increase_maxnorm(gmp_RRmutable norm, const ring_elem f) const
void remove_vec_node(vec n) const
virtual void degree_weights(const ring_elem f, const std::vector< int > &wts, int &lo, int &hi) const
virtual M2FreeAlgebra * cast_to_M2FreeAlgebra()
virtual const RingElement * getMinimalPolynomial() const
virtual MutableMatrix * makeMutableMatrix(size_t nrows, size_t ncols, bool dense) const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const =0
virtual unsigned int computeHashValue(const ring_elem a) const =0
virtual bool isGaloisField() const
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
virtual bool is_fraction_poly_ring() const
int n_nonzero_terms(const vecterm *v) const
void vec_text_out(buffer &o, const vecterm *v, bool p_one=true, bool p_plus=false, bool p_parens=false) const
virtual ring_elem add(const ring_elem f, const ring_elem g) const =0
virtual void text_out(buffer &o) const =0
virtual bool is_homogeneous(const ring_elem f) const
virtual bool from_ComplexInterval(gmp_CCi z, ring_elem &result) const
virtual bool has_associate_divisors() const
virtual LocalRing * cast_to_LocalRing()
virtual ring_elem divide_by_given_content(ring_elem f, ring_elem c) const
virtual ring_elem quotient(const ring_elem f, const ring_elem g) const
bool get_entry(const vecterm *v, int r, ring_elem &result) const
virtual void degree_of_var(int n, const ring_elem a, int &lo, int &hi) const
vec vec_divide_by_content(vec f) const
vec vec_zeroize_tiny(gmp_RR epsilon, const vec f) const
vec mult_vec_matrix(const Matrix *m, vec v, bool opposite_mult) const
virtual bool is_equal(const ring_elem f, const ring_elem g) const =0
virtual const SkewPolynomialRing * cast_to_SkewPolynomialRing() const
void divide_row(vec &v, int r, const ring_elem a) const
virtual bool in_subring(int nslots, const ring_elem a) const
void remove_vec(vec v) const
vec tensor_shift(int n, int m, vec v) const
virtual bool is_commutative_ring() const
void initialize_ring(long charac, const PolynomialRing *DR=nullptr, const std::vector< int > &heft_vec={})
virtual const PolyRing * cast_to_PolyRing() const
void set_entry(vec &v, int i, ring_elem r) const
void vec_sort(vecterm *&f) const
ring_elem divide_by_content(ring_elem f) const
virtual ring_elem remainderAndQuotient(const ring_elem f, const ring_elem g, ring_elem ") const
virtual ring_elem homogenize(const ring_elem f, int v, int deg, const std::vector< int > &wts) const
int vec_in_subring(int n, const vec v) const
virtual bool from_BigComplex(gmp_CC z, ring_elem &result) const
virtual SkewPolynomialRing * cast_to_SkewPolynomialRing()
vec vec_remove_monomial_factors(vec f, bool make_squarefree_only) const
virtual unsigned long get_precision() const
virtual const PolyQQ * cast_to_PolyQQ() const
virtual SolvableAlgebra * cast_to_SolvableAlgebra()
virtual const SolvableAlgebra * cast_to_SolvableAlgebra() const
virtual PolynomialRing * cast_to_PolynomialRing()
virtual bool is_basic_ring() const
vec negate_vec(vec v) const
virtual void lower_content(ring_elem &c, ring_elem g) const
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const =0
const_monomial degree(const ring_elem f) const
virtual ring_elem invert(const ring_elem f) const =0
virtual SchurRing * cast_to_SchurRing()
virtual ring_elem from_long(long n) const =0
virtual bool is_fraction_field() const
ring_elem minus_one() const
virtual ring_elem negate(const ring_elem f) const =0
virtual const PolynomialRing * cast_to_PolynomialRing() const
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const =0
vec make_vec_from_array(int len, Nterm **array) const
void divide_vec_to(vec &v, const ring_elem a) const
void subtract_vec_to(vec &v, vec &w) const
long characteristic() const
virtual const RingElement * getGenerator() const
void mult_vec_to(vec &v, const ring_elem r, bool opposite_mult) const
vec rightmult_vec(const vec w, const ring_elem f) const
virtual const RRR * cast_to_RRR() const
virtual const LocalRing * cast_to_LocalRing() const
virtual const GF * cast_to_GF() const
virtual ring_elem preferred_associate(ring_elem f) const
virtual PolyRingFlat * cast_to_PolyRingFlat()
virtual Tower * cast_to_Tower()
ring_elem get_non_unit() const
virtual ring_elem copy(const ring_elem f) const =0
vec subtract_vec(vec v, vec w) const
virtual vec vec_lead_term(int nparts, const FreeModule *F, vec v) const
virtual bool from_complex_double(double re, double im, ring_elem &result) const
vec vec_divide_by_given_content(vec f, ring_elem c) const
virtual ring_elem antipode(ring_elem f) const
virtual int index_of_var(const ring_elem a) const
virtual const RingZZ * cast_to_RingZZ() const
virtual bool from_double(double a, ring_elem &result) const
virtual ring_elem divide_by_var(int n, int d, const ring_elem a) const
bool vec_is_homogeneous(const FreeModule *F, const vec f) const
virtual bool multi_degree(const ring_elem f, monomial d) const
vec vec_divide_by_var(int n, int d, const vec v) const
void vec_increase_maxnorm(gmp_RRmutable norm, const vec f) const
vec vec_eval(const RingMap *map, const FreeModule *F, const vec v) const
virtual ring_elem zeroize_tiny(gmp_RR epsilon, const ring_elem f) const
void negate_vec_to(vec &v) const
void vec_degree_of_var(int n, const vec v, int &lo, int &hi) const
virtual bool is_CCC() const
virtual FreeModule * make_Schreyer_FreeModule() const
virtual bool is_zero(const ring_elem f) const =0
virtual M2FreeAlgebraOrQuotient * cast_to_M2FreeAlgebraOrQuotient()
virtual ring_elem diff(ring_elem a, ring_elem b, int use_coeff) const
virtual CCC * cast_to_CCC()
virtual const RingElement * getRepresentation(const ring_elem &a) const
virtual const WeylAlgebra * cast_to_WeylAlgebra() const
virtual long discreteLog(const ring_elem &a) const
const PolynomialRing * get_degree_ring() const
virtual bool is_QQ() const
virtual const M2FreeAlgebra * cast_to_M2FreeAlgebra() const
std::vector< int > mHeftVector
void vec_degree_weights(const FreeModule *F, const vec f, const std::vector< int > &wts, int &lo, int &hi) const
virtual const FractionField * cast_to_FractionField() const
bool vec_is_scalar_multiple(vec f, vec g) const
ring_elem vec_content(vec f) const
virtual RRi * cast_to_RRi()
void add_vec_to(vec &v, vec &w) const
virtual bool is_poly_ring() const
virtual int compare_elems(const ring_elem f, const ring_elem g) const =0
int compare_vecs(vec v, vec w) const
virtual bool is_RRi() const
virtual ring_elem random() const
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const =0
const CoefficientRingR * cR
vec vec_diff(vec v, int rankFw, vec w, int use_coeff) const
virtual bool is_skew_commutative_ring() const
void add_to(ring_elem &f, const ring_elem &g) const
virtual ring_elem from_int(mpz_srcptr n) const =0
const CoefficientRingR * getCoefficientRingR() const
void mult_to(ring_elem &f, const ring_elem g) const
void mult_row(vec &v, const ring_elem r, int i, bool opposite_mult) const
ring_elem vec_split_off_content(vec f, vec &result) const
virtual SchurSnRing * cast_to_SchurSnRing()
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
virtual bool lower_associate_divisor(ring_elem &f, ring_elem g) const
const PolynomialRing * degree_ring
virtual bool is_solvable_algebra() const
virtual ring_elem mult(const ring_elem f, const ring_elem g) const =0
virtual bool is_RRR() const
virtual CoefficientType coefficient_type() const
virtual bool isFinitePrimeField() const
ring_elem split_off_content(ring_elem f, ring_elem &result) const
virtual M2FreeAlgebraQuotient * cast_to_M2FreeAlgebraQuotient()
virtual bool is_graded() const
vec vec_divide_by_expvector(const_exponents exp, const vec v) const
virtual const M2FreeAlgebraQuotient * cast_to_M2FreeAlgebraQuotient() const
ring_elem dot_product(const vecterm *v, const vecterm *w) const
virtual const CCC * cast_to_CCC() const
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const =0
virtual ring_elem remainder(const ring_elem f, const ring_elem g) const
virtual Z_mod * cast_to_Z_mod()
virtual GF * cast_to_GF()
vec copy_vec(const vecterm *v) const
virtual const SchurRing * cast_to_SchurRing() const
virtual M2_arrayint support(const ring_elem a) const
const Monoid * degree_monoid() const
virtual RRR * cast_to_RRR()
const std::vector< int > & get_heft_vector() const
virtual bool is_weyl_algebra() const
virtual const Z_mod * cast_to_Z_mod() const
virtual bool from_rational(const mpq_srcptr q, ring_elem &result) const =0
virtual const Tower * cast_to_Tower() const
virtual SumCollector * make_SumCollector() const
vec new_vec() const
vector operations ////////////////////
Front-end-visible "ring element" value: an engine ring_elem paired with the Ring* that gives it meani...
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Engine-side ring of integers, backed by GMP mpz_ptr elements.
Refactored Schur (symmetric-function) ring whose elements are schur_poly sums of partitions over a co...
PolyRing subclass implementing the Schur (symmetric-function) ring whose monomials are partitions and...
SchurRing2 subclass implementing the symmetric-group character ring (the "Schur ring of `S_n`"),...
PolyRing subclass for skew-commutative (exterior-style) polynomial rings: the listed skewvars anticom...
PolyRing subclass for solvable polynomial algebras (PBW-type non-commutative rings where each pair of...
virtual ring_elem getValue()=0
virtual void add(ring_elem f)=0
Abstract incremental accumulator that builds a ring_elem from many add(f) calls.
Ring subclass for tower polynomial rings (Z/p)[x_0][x_1]...[x_{n-1}] modulo a chain of algebraic exte...
PolyRing subclass for Weyl algebras: polynomial rings with the [d_i, x_i] = 1 derivative-variable com...
Engine-side Z/p ring for small primes (p < 32767), using a discrete-log (Zech) representation.
Engine error-reporting primitives: ERROR, INTERNAL_ERROR, error, error_message.
namespace exc — internal C++ exception types and the TRY / CATCH macro pair.
@ ring_old
refers to all rings which are not ConcreteRing's.
EngineObject / MutableEngineObject — shared bases that supply the hash an M2 interpreter object expec...
const int * const_monomial
VALGRIND_MAKE_MEM_DEFINED & result(result)
struct gmp_CC_struct * gmp_CC
struct gmp_CCi_struct * gmp_CCi
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
our_new_delete — per-class opt-in routing of new / delete through bdwgc.
RingZZ * makeIntegerRing()
ring_elem — the universal value type carried by every Ring* in the engine.
Singly linked-list node carrying one term of a polynomial-ring element.