3#ifndef _res_poly_ring_hpp_
4#define _res_poly_ring_hpp_
86 std::vector<res_monomial_word>
monoms;
146 long& bytes_alloc)
const;
188 mRing.vectorArithmetic().deallocateElementArray(
coeffs);
211 for (
int i = 0; i <
result.len; i++)
214 monomptr +=
mRing.monoid().monomial_size(
monoms[i]);
221 std::vector<res_monomial_word>&
monoms)
Coefficient-ring-erased arithmetic dispatcher used by F4, GB, and resolution code.
Type-erased owning handle to a dense coefficient vector held by a ConcreteVectorArithmetic<Ring>.
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
void showAlpha(res_const_packed_monomial m) const
const Monoid & originalMonoid() const
bool isSkewCommutative() const
const SkewMultiplication * skewInfo() const
const SkewMultiplication * mSkew
const ResMonoid & monoid() const
ResPolyRing(const Ring *baseRing, const ResMonoid *M, const Monoid *origM)
const Monoid * mOriginalMonoid
void memUsage(const ResPolynomial &f, long &nterms, long &bytes_used, long &bytes_alloc) const
ResPolyRing(const Ring *baseRing, const ResMonoid *M, const Monoid *origM, const SkewMultiplication *skewInfo)
VectorArithmetic mVectorArithmetic
const VectorArithmetic & vectorArithmetic() const
std::unique_ptr< const ResMonoid > mMonoid
The polynomial-ring view the F4 resolution engine reduces against: coefficient arithmetic plus the en...
std::vector< res_monomial_word > monoms
ResPolynomial & operator=(ResPolynomial &&other)=default
friend class ResPolynomialIterator
ResPolynomial(const ResPolynomial &other)=default
ResPolynomial(ResPolynomial &&other)=default
friend class ResPolynomialConstructor
ResPolynomial & operator=(const ResPolynomial &other)=default
static long npoly_destructor
static long ncalls_fromarray
ElementArray & coefficientInserter()
~ResPolynomialConstructor()
std::vector< res_packed_monomial > monoms
const ResPolyRing & mRing
void appendMonicTerm(res_packed_monomial monom)
ResPolynomialConstructor(const ResPolyRing &R)
void pushBackTerm(res_packed_monomial monom)
static void setPolyFromArrays(ResPolynomial &result, int len, ElementArray &coeffs, std::vector< res_monomial_word > &monoms)
void setPoly(ResPolynomial &result)
Polynomial type used by the F4 resolution engine: parallel coefficient vector and concatenated monomi...
res_const_packed_monomial monomial() const
ResPolynomialIterator(const ResPolyRing &R, const ResPolynomial &elem0)
ResPolynomialIterator(const ResPolyRing &R, const ResPolynomial &elem0, int)
const ResPolynomial & elem
friend bool operator!=(const ResPolynomialIterator &a, const ResPolynomialIterator &b)
friend bool operator==(const ResPolynomialIterator &a, const ResPolynomialIterator &b)
const ResPolyRing & mRing
int coefficient_index() const
Forward iterator over the terms of a ResPolynomial.
Sign-rule helper used by every ring that has a skew-commutative subset of variables (exterior factor,...
std::ostream & displayElement(std::ostream &o, const ElementArray &v, int index) const
(Debugging) Display /////
Runtime dispatcher that hides the concrete coefficient ring behind a std::variant of ConcreteVectorAr...
VALGRIND_MAKE_MEM_DEFINED & result(result)
void swap(mpfr::mpreal &x, mpfr::mpreal &y)
our_new_delete — per-class opt-in routing of new / delete through bdwgc.
ResMonoid dispatcher — single typedef switch between ResMonoidDense and ResMonoidSparse.
const res_monomial_word * res_const_packed_monomial
res_monomial_word * res_packed_monomial
Typed-monomial vocabulary shared by ResMonoid, ResPolyRing, SchreyerFrame, and F4Res.
bool operator!=(const ResPolynomialIterator &a, const ResPolynomialIterator &b)
bool operator==(const ResPolynomialIterator &a, const ResPolynomialIterator &b)
bool check_poly(const ResPolyRing &R, const ResPolynomial &f, const ResSchreyerOrder &O)
void display_poly(std::ostream &o, const ResPolyRing &R, const ResPolynomial &f)
TermIterator< Nterm > end(Nterm *)
Per-level Schreyer-order data attached to a SchreyerFrame::Level.