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

◆ to_M2_vec()

vec ResF4toM2Interface::to_M2_vec ( const ResPolyRing & R,
const ResPolynomial & f,
const FreeModule * F )
static

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

97{
98 const PolynomialRing* origR = F->get_ring()->cast_to_PolynomialRing();
99 const Monoid* M = origR->getMonoid();
100
101 monomial m1 = M->make_one();
102
103 Nterm** comps = newarray(Nterm*, F->rank());
104 Nterm** last = newarray(Nterm*, F->rank());
105 for (int i = 0; i < F->rank(); i++)
106 {
107 comps[i] = nullptr;
108 last[i] = nullptr;
109 }
110
111 int* exp = new int[M->n_vars()];
112
113 const res_monomial_word* w = f.monoms.data();
114 for (int i = 0; i < f.len; i++)
115 {
116 component_index comp;
117 R.monoid().to_expvector(w, exp, comp);
118 w = w + R.monoid().monomial_size(w);
119 M->from_expvector(exp, m1);
120 ring_elem a =
122 Nterm* g = origR->make_flat_term(a, m1);
123 g->next = nullptr;
124 if (last[comp] == nullptr)
125 {
126 comps[comp] = g;
127 last[comp] = g;
128 }
129 else
130 {
131 last[comp]->next = g;
132 last[comp] = g;
133 }
134 }
135 vec result = nullptr;
136 for (int i = 0; i < F->rank(); i++)
137 {
138 if (comps[i] != nullptr)
139 {
140 vec v = origR->make_vec(i, comps[i]);
141 origR->add_vec_to(result, v);
142 comps[i] = nullptr;
143 last[i] = nullptr;
144 }
145 }
146
147 delete[] exp;
148 return result;
149}
const Ring * get_ring() const
Definition freemod.hpp:102
int rank() const
Definition freemod.hpp:105
int n_vars() const
Definition monoid.hpp:207
monomial make_one() const
Definition monoid.cpp:455
void from_expvector(const_exponents exp, monomial result) const
Definition monoid.cpp:742
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
virtual ring_elem make_flat_term(const ring_elem a, const_monomial m) const =0
bool to_expvector(res_const_packed_monomial m, res_ntuple_monomial result, component_index &result_comp) const
int monomial_size(res_const_packed_monomial m) const
const ResMonoid & monoid() const
const VectorArithmetic & vectorArithmetic() const
std::vector< res_monomial_word > monoms
ElementArray coeffs
vec make_vec(int r, ring_elem a) const
Definition ring-vecs.cpp:60
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
void add_vec_to(vec &v, vec &w) const
ring_elem ringElemFromElementArray(const ElementArray &coeffs, int index) const
#define monomial
Definition gb-toric.cpp:11
VALGRIND_MAKE_MEM_DEFINED & result(result)
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
#define newarray(T, len)
Definition newdelete.hpp:82
myword component_index
myword res_monomial_word
Nterm * next
Definition ringelem.hpp:157

References Ring::add_vec_to(), Ring::cast_to_PolynomialRing(), ResPolynomial::coeffs, Monoid::from_expvector(), FreeModule::get_ring(), PolynomialRing::getMonoid(), ResPolynomial::len, PolynomialRing::make_flat_term(), Monoid::make_one(), Ring::make_vec(), ResPolyRing::monoid(), monomial, ResMonoidDense::monomial_size(), ResPolynomial::monoms, Monoid::n_vars(), newarray, Nterm::next, FreeModule::rank(), result(), VectorArithmetic::ringElemFromElementArray(), ResMonoidDense::to_expvector(), and ResPolyRing::vectorArithmetic().

Referenced by to_M2_matrix().