324{
325
326
327
328
329 auto& thislevel = C.
level(lev);
330 int n = 0;
331 for (
auto p = thislevel.begin();
p != thislevel.end(); ++
p)
332 {
333 if (
p->mDegree == degree) n++;
334 }
335
336 auto& prevlevel = C.
level(lev - 1);
337 int* newcomps = new int[prevlevel.size()];
338 int nextcomp = 0;
339 for (int i = 0; i < prevlevel.size(); i++)
340 if (prevlevel[i].mDegree == degree)
341 newcomps[i] = nextcomp++;
342 else
343 newcomps[i] = -1;
344
345
347
348
349
350
351 int col = 0;
352
353 for (
auto p = thislevel.begin();
p != thislevel.end(); ++
p)
354 {
355 if (
p->mDegree != degree)
continue;
356 auto& f =
p->mSyzygy;
357 auto end = ResPolynomialIterator(C.
ring(), f, 1);
358 auto i = ResPolynomialIterator(C.
ring(), f);
359 for (; i !=
end; ++i)
360 {
362 if (newcomps[comp] >= 0)
363 {
365 f.coeffs, i.coefficient_index());
366 result->set_entry(newcomps[comp], col, a);
367 }
368 }
369 ++col;
370 }
371
372 delete[] newcomps;
374}
static MutableMatrix * zero_matrix(const Ring *R, size_t nrows, size_t ncols, bool dense)
component_index get_component(res_const_packed_monomial m) const
const VectorArithmetic & vectorArithmetic() const
const ResMonoid & monoid() const
std::vector< FrameElement > & level(int lev)
const ResPolyRing & ring() const
ring_elem ringElemFromElementArray(const ElementArray &coeffs, int index) const
VALGRIND_MAKE_MEM_DEFINED & result(result)
TermIterator< Nterm > end(Nterm *)