33 int *exp =
new int[M->
n_vars() + 1];
37 std::vector<ring_elem> relem_array;
43 relem_array.push_back(t->coeff);
45 for (
int a = 0; a < M->
n_vars(); a++) lexp[a] = exp[a];
64 for (
int i = 0; i < m->
n_cols(); i++)
68 result_polys.push_back(g);
84 for (
int i = 0; i < F->
rank(); i++)
94 for (
int i = 0; i < f.
len; i++)
99 for (
int a = 0; a < M->
n_vars(); a++) exp[a] =
static_cast<int>(lexp[a]);
104 if (last[comp] ==
nullptr)
111 last[comp]->
next = g;
116 for (
int i = 0; i < F->
rank(); i++)
118 if (comps[i] !=
nullptr)
136 for (
int i = 0; i < polys.size(); i++)
138 return result.to_matrix();
150 for (
int r = 0; r < nrows; r++)
156 if (row.
monom ==
nullptr)
157 coeffs = & gens[row.
elem]->f.coeffs;
159 coeffs = &
gb[row.
elem]->f.coeffs;
165 for (
int i = 0; i < row.
len; i++)
167 int c = row.
comps[i];
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>.
static void from_M2_vec(const VectorArithmetic *VA, const MonomialInfo *MI, const FreeModule *F, vec v, GBF4Polynomial &result)
static MutableMatrix * to_M2_MutableMatrix(const VectorArithmetic *VA, coefficient_matrix *mat, gb_array &gens, gb_array &gb)
static Matrix * to_M2_matrix(const VectorArithmetic *VA, const MonomialInfo *MI, gb_array &polys, const FreeModule *F)
static void from_M2_matrix(const VectorArithmetic *VA, const MonomialInfo *MI, const Matrix *m, gb_array &result_polys)
static vec to_M2_vec(const VectorArithmetic *VA, const MonomialInfo *MI, const GBF4Polynomial &f, const FreeModule *F)
const Ring * get_ring() const
Engine-side free module R^n over a Ring.
int gbvector_n_terms(const gbvector *f) const
Polynomial-ring view tuned for the inner loop of classical Buchberger Groebner-basis computations.
ring_elem elem(int i, int j) const
const FreeModule * rows() const
Mutable builder used to assemble an immutable Matrix one column (or one term) at a time.
void to_expvector(const_monomial m, exponents_t result_exp) const
monomial make_one() const
void from_expvector(const_exponents exp, monomial result) const
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
bool to_expvector(const_packed_monomial m, ntuple_monomial result, long &result_comp) const
int max_monomial_size() const
int monomial_size(const_packed_monomial m) const
bool from_expvector(const_ntuple_monomial e, long comp, packed_monomial result) const
Per-ring monomial layout / encoding helper used by F4GB.
virtual bool set_entry(size_t r, size_t c, const ring_elem a)=0
Abstract base class for mutable matrices over an arbitrary engine Ring, the in-place counterpart of t...
virtual GBRing * get_gb_ring() const
virtual const Monoid * getMonoid() const
virtual ring_elem make_flat_term(const ring_elem a, const_monomial m) const =0
virtual gbvector * translate_gbvector_from_vec(const FreeModule *F, const vec v, ring_elem &result_denominator) const =0
Abstract base for the engine's polynomial-ring hierarchy.
vec make_vec(int r, ring_elem a) const
virtual const PolynomialRing * cast_to_PolynomialRing() const
void add_vec_to(vec &v, vec &w) const
ElementArray elementArrayFromContainer(const Container &c) const
ring_elem ringElemFromElementArray(const ElementArray &coeffs, int index) const
const Ring * ring() const
Runtime dispatcher that hides the concrete coefficient ring behind a std::variant of ConcreteVectorAr...
F4toM2Interface — static translators between engine vec / Matrix and F4's GBF4Polynomial.
std::vector< gbelem * > gb_array
void gb(IntermediateBasis &F, int n)
FreeModule — finite-rank free module R^n, the type-level anchor for every Matrix.
GBRing and gbvector — the GB-tuned polynomial-ring view used by classical Buchberger code.
VALGRIND_MAKE_MEM_DEFINED & result(result)
MutableMatrix — abstract base of every mutable matrix the engine hands across the boundary.
MatrixConstructor — the mutable builder that produces an immutable Matrix.
Matrix — the engine's immutable homomorphism F -> G between free modules.
MonomialInfo — F4's packed_monomial encoding plus operations.
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
MutableMatrix * IM2_MutableMatrix_make(const Ring *R, int nrows, int ncols, M2_bool is_dense)
Engine-boundary C API for the engine's in-place MutableMatrix, including dense linear algebra.
#define newarray_atomic(T, len)
our_new_delete — per-class opt-in routing of new / delete through bdwgc.
ntuple_monomials::Exponent ntuple_word
F4's dense int64_t exponent-vector specialisation of ExponentVector (legacy).
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
Ring — the legacy abstract base class for every coefficient and polynomial ring.
Compact polynomial layout used inside the F4 GB engine.
Singly linked-list node carrying one term of a polynomial-ring element.
Engine-wide stylistic constants: LT / EQ / GT codes, INTSIZE, GEOHEAP_SIZE.