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

◆ to_M2_freemodule() [1/2]

FreeModule * ResF4toM2Interface::to_M2_freemodule ( const PolynomialRing * R,
const FreeModule * F,
SchreyerFrame & C,
int lev )
static

Definition at line 183 of file res-f4-m2-interface.cpp.

189{
190 if (lev < 0 or lev > C.maxLevel())
191 {
192 ERROR("expected level in the range %d..%d",1,C.maxLevel());
193 return nullptr;
194 }
195 FreeModule* result = new FreeModule(R, 0, true);
196 const Monoid* M = R->getMonoid();
197 auto& thislevel = C.level(lev);
198 const ResSchreyerOrder& S = C.schreyerOrder(lev);
199 int* exp = new int[M->n_vars()];
200 monomial deg1 = M->degree_monoid()->make_one();
201 for (auto i = 0; i < thislevel.size(); ++i)
202 {
203 component_index comp;
204 C.monoid().to_expvector(S.mTotalMonom[i], exp, comp);
205 monomial deg = M->degree_monoid()->make_new(F->degree(comp)); // resulting degree of this element
206 M->degree_of_expvector(exp, deg1);
207 M->degree_monoid()->mult(deg, deg1, deg);
208 // Now grab the Schreyer info
209 // unpack to exponent vector, then repack into monoid element
210 monomial totalmonom = M->make_one();
211 M->from_expvector(exp, totalmonom);
212 result->append_schreyer(
213 deg, totalmonom, static_cast<int>(S.mTieBreaker[i]));
214 }
215 delete[] exp;
216 M->degree_monoid()->remove(deg1);
217 return result;
218}
const_monomial degree(int i) const
Definition freemod.hpp:104
void degree_of_expvector(const T *expvector, monomial result) const
Definition monoid.hpp:293
int n_vars() const
Definition monoid.hpp:207
monomial make_one() const
Definition monoid.cpp:455
void remove(monomial d) const
Definition monoid.cpp:462
const Monoid * degree_monoid() const
Definition monoid.hpp:175
void mult(const_monomial m, const_monomial n, monomial result) const
Definition monoid.cpp:363
monomial make_new(const_monomial d) const
Definition monoid.cpp:448
void from_expvector(const_exponents exp, monomial result) const
Definition monoid.cpp:742
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
bool to_expvector(res_const_packed_monomial m, res_ntuple_monomial result, component_index &result_comp) const
const ResMonoid & monoid() const
std::vector< FrameElement > & level(int lev)
ResSchreyerOrder & schreyerOrder(int lev)
#define monomial
Definition gb-toric.cpp:11
const int ERROR
Definition m2-mem.cpp:55
VALGRIND_MAKE_MEM_DEFINED & result(result)
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
myword component_index
std::vector< res_packed_monomial > mTotalMonom
std::vector< component_index > mTieBreaker

References FreeModule::degree(), Monoid::degree_monoid(), Monoid::degree_of_expvector(), ERROR, Monoid::from_expvector(), PolynomialRing::getMonoid(), SchreyerFrame::level(), Monoid::make_new(), Monoid::make_one(), SchreyerFrame::maxLevel(), SchreyerFrame::monoid(), monomial, ResSchreyerOrder::mTieBreaker, ResSchreyerOrder::mTotalMonom, Monoid::mult(), Monoid::n_vars(), Monoid::remove(), result(), SchreyerFrame::schreyerOrder(), and ResMonoidDense::to_expvector().