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

◆ IM2_FreeModule_make_degs()

const FreeModule * IM2_FreeModule_make_degs ( const Ring * R,
M2_arrayint degs )

Definition at line 42 of file freemodule.cpp.

44{
45 try
46 {
47 auto D = R->degree_monoid();
48 unsigned int eachdeg = D->n_vars();
49 if (eachdeg == 0)
50 {
51 ERROR("rawFreeModule: degree rank 0, but sequence of degrees given");
52 return nullptr;
53 }
54 unsigned int rank = degs->len / eachdeg;
55 if (rank * eachdeg != degs->len)
56 {
57 ERROR("inappropriate number of degrees");
58 return nullptr;
59 }
60 monomial deg = D->make_one();
62 for (unsigned int i = 0; i < rank; i++)
63 {
64 D->from_expvector(degs->array + i * eachdeg, deg);
65 F->append(deg);
66 }
67 return F;
68 } catch (const exc::engine_error& e)
69 {
70 ERROR(e.what());
71 return nullptr;
72 }
73}
void append(const_monomial d)
Definition freemod.cpp:130
Engine-side free module R^n over a Ring.
Definition freemod.hpp:66
int n_vars() const
Definition monoid.hpp:207
virtual FreeModule * make_FreeModule() const
Definition ring.cpp:53
const Monoid * degree_monoid() const
Definition ring.cpp:13
#define monomial
Definition gb-toric.cpp:11
const int ERROR
Definition m2-mem.cpp:55
size_t rank(const DMatZZpFFPACK &A)
Definition dmat.cpp:80

References FreeModule::append(), Ring::degree_monoid(), ERROR, Ring::make_FreeModule(), monomial, and Monoid::n_vars().