140{
143 assert(P != 0);
145 size_t nvars = P->
n_vars();
146 size_t ncols = M->
n_cols();
148 assert(charac > 0);
151 stream.idealBegin(ncols);
152 Matrix::iterator i(M);
153 for (int c = 0; c < ncols; c++)
154 {
155 i.set(c);
156
157 size_t nterms = 0;
158 for (; i.valid(); i.next())
159 {
160 Nterm* t = i.entry();
161 for ([[maybe_unused]]
Nterm&
s : t) nterms++;
162 }
163 stream.appendPolynomialBegin(nterms);
164
165 i.set(c);
166
167 for (; i.valid(); i.next())
168 {
169 Nterm* t = i.entry();
171 {
173 stream.appendTermBegin(i.row());
174 for (size_t j = 0; j < nvars; j++)
175 if (exp[j] != 0) stream.appendExponent(j, exp[j]);
177 assert(b.first);
178 int a = static_cast<int>(
179 b.second);
180 if (a < 0) a += charac;
181 stream.appendTermDone(a);
182 }
183 }
184 stream.appendPolynomialDone();
185 }
186 stream.idealDone();
187}
exponents::Exponents exponents_t
const Ring * get_ring() 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
#define ALLOCATE_EXPONENTS(byte_len)
#define EXPONENT_BYTE_SIZE(nvars)
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Singly linked-list node carrying one term of a polynomial-ring element.