Macaulay2 Engine
Loading...
Searching...
No Matches

◆ NCMonomialMatrix()

Matrix * NCMonomialMatrix ( ModuleMonomialSet & H,
const FreeModule * target )

Definition at line 1615 of file matrix.cpp.

1616{
1617 const M2FreeAlgebraOrQuotient* Q = dynamic_cast<const M2FreeAlgebraOrQuotient*>(target->get_ring());
1618 if (Q == nullptr)
1619 {
1620 ERROR("expected NC polynomial algebra");
1621 return nullptr;
1622 }
1623
1624 MatrixConstructor mat(target, 0);
1625 for (auto i = H.begin(); i != H.end(); ++i)
1626 {
1627 ring_elem rf = Q->fromModuleMonom(*i);
1628 vec v = Q->make_vec(i->component(), rf);
1629 mat.append(v);
1630 }
1631
1632 // Finally, we sort them
1633 Matrix *result = mat.to_matrix();
1634
1635 M2_arrayint perm = result->sort(0, -1);
1636 return result->sub_matrix(perm);
1637}
const Ring * get_ring() const
Definition freemod.hpp:102
auto begin() const -> decltype(mElements.begin())
auto end() const -> decltype(mElements.end())
ring_elem fromModuleMonom(const ModuleMonom &m) const
Abstract Ring subclass that lifts either a FreeAlgebra or a FreeAlgebraQuotient into the engine's Rin...
Mutable builder used to assemble an immutable Matrix one column (or one term) at a time.
vec make_vec(int r, ring_elem a) const
Definition ring-vecs.cpp:60
#define Matrix
Definition factory.cpp:14
const int ERROR
Definition m2-mem.cpp:55
VALGRIND_MAKE_MEM_DEFINED & result(result)

References MatrixConstructor::append(), IntsSet< Configuration >::begin(), IntsSet< Configuration >::end(), ERROR, M2FreeAlgebraOrQuotient::fromModuleMonom(), FreeModule::get_ring(), Ring::make_vec(), Matrix, result(), and MatrixConstructor::to_matrix().

Referenced by Matrix::monomials().