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

◆ make_schreyer() [1/2]

FreeModule * FreeModule::make_schreyer ( const GBMatrix * m)
static

Definition at line 73 of file freemod.cpp.

74{
75 const FreeModule *F = m->get_free_module();
76 const PolynomialRing *R = F->get_ring()->cast_to_PolynomialRing();
77 if (R == nullptr)
78 {
79 ERROR("expected a polynomial ring");
80 return nullptr;
81 }
82 FreeModule *G = R->make_FreeModule();
83 int rk = INTSIZE(m->elems);
84 if (rk == 0) return G;
85
86 auto D = R->degree_monoid();
87 for (int i = 0; i < rk; i++)
88 {
89 monomial deg = D->make_one();
90 gbvector *v = m->elems[i];
91 if (v != nullptr) R->get_gb_ring()->gbvector_multidegree(F, v, deg);
92 G->append(deg);
93 }
94
95 G->schreyer = SchreyerOrder::create(m);
96
97 return G;
98}
const Ring * get_ring() const
Definition freemod.hpp:102
FreeModule(const Ring *R, int n, bool has_schreyer_order)
Definition freemod.cpp:32
const Ring * R
Definition freemod.hpp:75
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
static SchreyerOrder * create(const Monoid *m)
Definition schorder.cpp:11
#define monomial
Definition gb-toric.cpp:11
const int ERROR
Definition m2-mem.cpp:55
tbb::flow::graph G
const FreeModule * get_free_module() const
Definition Eschreyer.hpp:61
gc_vector< gbvector * > elems
Definition Eschreyer.hpp:56
#define INTSIZE(a)
Definition style.hpp:37

References Ring::cast_to_PolynomialRing(), SchreyerOrder::create(), GBMatrix::elems, ERROR, FreeModule(), G, GBMatrix::get_free_module(), get_ring(), INTSIZE, monomial, and R.