46 else if (K ==
globalZZ && denomR ==
nullptr)
59 if (numeratorR !=
this)
125 result->setQuotientInfo(qrinfo);
139 ERROR(
"quotient elements not in the expected polynomial ring");
144 for (
int i = 0; i < M->
n_cols(); i++)
216 unsigned int hash = 0;
217 unsigned int seed1 = 103;
218 unsigned int seed2 = 347654;
223 hash += seed1 * hash1 + seed2 * hash2;
const Ring * get_ring() const
ring_elem elem(int i, int j) const
Mutable builder used to assemble an immutable Matrix one column (or one term) at a time.
unsigned int computeHashValue(const_monomial m) const
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
unsigned int hash() const
virtual bool is_homogeneous(const ring_elem f) const
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
PolyRingFlat subclass for quotients R / I of a polynomial ring by an ideal.
Ring::CoefficientType coeff_type_
const Ring * getCoefficientRing() const
void setQuotientInfo(QRingInfo *qinfo0)
virtual GBRing * get_gb_ring() const
void initialize_PolynomialRing(const Ring *K, const Monoid *M, const PolyRing *numeratorR, const PolynomialRing *ambientR, const Ring *denomR)
void setIsGraded(bool new_val)
virtual const PolynomialRing * getAmbientRing() const
ring_elem ZZ_quotient_value_
virtual ~PolynomialRing()
const PolynomialRing * ambientR_
static PolynomialRing * create_quotient(const PolynomialRing *R, VECTOR(Nterm *) &elems)
virtual const Monoid * getMonoid() const
Matrix * getPresentation() const
SumCollector * make_SumCollector() const
virtual Nterm * numerator(ring_elem f) const =0
Nterm * quotient_element(int i) const
virtual const Ring * getCoefficients() const
virtual const PolyRing * getNumeratorRing() const
virtual unsigned int computeHashValue(const ring_elem a) const
CoefficientType coefficient_type() const
virtual const Ring * getDenominatorRing() const
const SkewMultiplication & getSkewInfo() const
bool is_skew_commutative() const
Abstract base for the engine's polynomial-ring hierarchy.
bool is_ZZ_quotient() const
ring_elem ZZ_quotient_value() const
QRingInfo specialisation for quotients of polynomial rings over ZZ.
QRingInfo_field specialisation for QQ coefficients, which need denominator tracking through reduction...
QRingInfo_field specialisation for basic-field coefficients (everything except QQ).
Bookkeeping helper holding the defining ideal of a polynomial-ring quotient R / I in the two represen...
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const =0
virtual FreeModule * make_FreeModule() const
vec make_vec(int r, ring_elem a) const
virtual unsigned int computeHashValue(const ring_elem a) const =0
virtual const SolvableAlgebra * cast_to_SolvableAlgebra() const
long characteristic() const
virtual const WeylAlgebra * cast_to_WeylAlgebra() const
const PolynomialRing * get_degree_ring() const
virtual bool is_QQ() const
const std::vector< int > & get_heft_vector() const
Abstract incremental accumulator that builds a ring_elem from many add(f) calls.
SumCollectorPolyHeap(const PolynomialRing *R0)
virtual ring_elem getValue()
virtual void add(ring_elem f)
SumCollector implementation that funnels engine-side ring_elem additions through a polyheap (geobucke...
polyheap — polynomial-specialised geometric heap for reduction accumulators.
VALGRIND_MAKE_MEM_DEFINED & result(result)
MatrixConstructor — the mutable builder that produces an immutable Matrix.
Matrix — the engine's immutable homomorphism F -> G between free modules.
#define EXPONENT_BYTE_SIZE(nvars)
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
PolyRingQuotient — polynomial ring modulo an ideal whose Groebner basis is known.
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
QRingInfo family — bookkeeping plus normal-form machinery attached to a PolyRingQuotient for R / I re...
Ring — the legacy abstract base class for every coefficient and polynomial ring.
Singly linked-list node carrying one term of a polynomial-ring element.
Conversion helpers between M2 boundary types and standard C++ containers.