3#ifndef __matrix_stream_hhp__
4#define __matrix_stream_hhp__
55 s.appendPolynomialBegin(2);
57 s.appendExponent(0,2);
60 s.appendExponent(1,1);
61 s.appendTermDone(
s.modulus() - 1);
62 s.appendPolynomialDone();
63 s.appendPolynomialBegin(2);
65 s.appendExponent(0,3);
68 s.appendExponent(2,1);
69 s.appendTermDone(
s.modulus() - 1);
70 s.appendPolynomialDone();
111 return static_cast<int>(
mPolyRing->characteristic());
145 size_t nvars = P->
n_vars();
146 size_t ncols = M->
n_cols();
151 stream.idealBegin(ncols);
152 Matrix::iterator i(M);
153 for (
int c = 0; c < ncols; c++)
161 for ([[maybe_unused]]
Nterm&
s : t) nterms++;
163 stream.appendPolynomialBegin(nterms);
173 stream.appendTermBegin(i.
row());
174 for (
size_t j = 0; j < nvars; j++)
175 if (exp[j] != 0) stream.appendExponent(j, exp[j]);
178 int a =
static_cast<int>(
180 if (a < 0) a += charac;
181 stream.appendTermDone(a);
184 stream.appendPolynomialDone();
exponents::Exponents exponents_t
Engine-side free module R^n over a Ring.
const Ring * get_ring() const
Mutable builder used to assemble an immutable Matrix one column (or one term) at a time.
Coefficient modulus() const
void idealBegin(size_t polyCount)
VarIndex varCount() const
void appendTermDone(Coefficient coefficient)
Exponent * mCurrentExponents
MatrixConstructor mMatrixConstructor
Component comCount() const
void appendTermBegin(Component com)
void appendExponent(VarIndex index, Exponent exponent)
const PolyRing * mPolyRing
const FreeModule * mFreeModule
Component mCurrentComponent
const PolyRing & ring() const
void appendPolynomialBegin(size_t termCount)
MatrixStream(const FreeModule *F)
void appendPolynomialDone()
const Matrix * value() const
void to_expvector(const_monomial m, exponents_t result_exp) const
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
const Ring * getCoefficientRing() const
virtual const Monoid * getMonoid() const
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
virtual const PolyRing * cast_to_PolyRing() const
long characteristic() const
MatrixConstructor — the mutable builder that produces an immutable Matrix.
void matrixToStream(const Matrix *M, T &stream)
Matrix — the engine's immutable homomorphism F -> G between free modules.
#define ALLOCATE_EXPONENTS(byte_len)
#define EXPONENT_BYTE_SIZE(nvars)
Concrete commutative PolyRing — standard polynomial ring inheriting from PolyRingFlat.
Singly linked-list node carrying one term of a polynomial-ring element.