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

◆ from_M2_vec()

void ResF4toM2Interface::from_M2_vec ( const ResPolyRing & R,
const FreeModule * F,
vec v,
ResPolynomial & result )
static

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

46{
47 const PolynomialRing* origR = F->get_ring()->cast_to_PolynomialRing();
48 const Monoid* M = origR->getMonoid();
49
50 ring_elem denom;
51 gbvector* f = origR->translate_gbvector_from_vec(F, v, denom);
52 GBRing* GR = origR->get_gb_ring();
53 int n = GR->gbvector_n_terms(f);
54
55#if 0
56 buffer o;
57 o << "input: ";
58 GR->gbvector_text_out(o,F,f,-1);
59 o << newline;
60 emit(o.str());
61#endif
62
63 int* exp = new int[M->n_vars()];
64
65 ElementArray coeffs = R.vectorArithmetic().allocateElementArray();
66
67 // all these pointers (or values) are still in the element f.
68 // auto monoms = std::unique_ptr<res_monomial_word[]>(new res_monomial_word[n
69 // * R.monoid().max_monomial_size()]);
70 std::vector<res_monomial_word> monoms(n * R.monoid().max_monomial_size());
71 n = 0;
72 res_monomial_word* nextmonom = monoms.data();
73 for (gbvector* t = f; t != nullptr; t = t->next)
74 {
76 coeffs, t->coeff, f->coeff); // note: f->coeff is assumed to be 1 for
77 // finite fields, but for QQ both of
78 // these are integers
79
80 M->to_expvector(t->monom, exp);
82 exp,
83 t->comp - 1,
84 nextmonom); // gbvector components are shifted up by one
85 nextmonom += R.monoid().monomial_size(nextmonom);
86 n++;
87 }
88
90 GR->gbvector_remove(f);
91 delete[] exp;
92}
const Ring * get_ring() const
Definition freemod.hpp:102
void gbvector_remove(gbvector *f)
Definition gbring.cpp:288
void gbvector_text_out(buffer &o, const FreeModule *F, const gbvector *f, int nterms=-1) const
Definition gbring.cpp:779
int gbvector_n_terms(const gbvector *f) const
Definition gbring.cpp:392
void to_expvector(const_monomial m, exponents_t result_exp) const
Definition monoid.cpp:747
int n_vars() const
Definition monoid.hpp:207
virtual GBRing * get_gb_ring() const
Definition polyring.hpp:276
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
virtual gbvector * translate_gbvector_from_vec(const FreeModule *F, const vec v, ring_elem &result_denominator) const =0
int max_monomial_size() const
bool from_expvector(res_const_ntuple_monomial e, component_index comp, res_packed_monomial result) const
int monomial_size(res_const_packed_monomial m) const
const ResMonoid & monoid() const
const VectorArithmetic & vectorArithmetic() const
static void setPolyFromArrays(ResPolynomial &result, int len, ElementArray &coeffs, std::vector< res_monomial_word > &monoms)
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
ElementArray allocateElementArray(ComponentIndex nelems) const
Create a coefficient vector with room for nelems coefficients.
void from_ring_elem(ElementArray &coeffs, ring_elem numer, ring_elem denom_not_used_except_QQ) const
char * str()
Definition buffer.hpp:72
VALGRIND_MAKE_MEM_DEFINED & result(result)
char newline[]
Definition m2-types.cpp:49
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
myword res_monomial_word
ring_elem coeff
Definition gbring.hpp:81
void emit(const char *s)
Definition text-io.cpp:41

References VectorArithmetic::allocateElementArray(), Ring::cast_to_PolynomialRing(), gbvector::coeff, emit(), ResMonoidDense::from_expvector(), VectorArithmetic::from_ring_elem(), GBRing::gbvector_n_terms(), GBRing::gbvector_remove(), GBRing::gbvector_text_out(), PolynomialRing::get_gb_ring(), FreeModule::get_ring(), PolynomialRing::getMonoid(), ResMonoidDense::max_monomial_size(), ResPolyRing::monoid(), ResMonoidDense::monomial_size(), Monoid::n_vars(), newline, gbvector::next, result(), ResPolynomialConstructor::setPolyFromArrays(), buffer::str(), Monoid::to_expvector(), PolynomialRing::translate_gbvector_from_vec(), and ResPolyRing::vectorArithmetic().