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

◆ to_M2_vec()

vec F4toM2Interface::to_M2_vec ( const VectorArithmetic * VA,
const MonomialInfo * MI,
const GBF4Polynomial & f,
const FreeModule * F )
static

Definition at line 72 of file f4-m2-interface.cpp.

76{
77 const PolynomialRing *R = F->get_ring()->cast_to_PolynomialRing();
78 const Monoid *M = R->getMonoid();
79
80 monomial m1 = M->make_one();
81
82 Nterm **comps = newarray(Nterm *, F->rank());
83 Nterm **last = newarray(Nterm *, F->rank());
84 for (int i = 0; i < F->rank(); i++)
85 {
86 comps[i] = nullptr;
87 last[i] = nullptr;
88 }
89
90 int *exp = newarray_atomic(int, M->n_vars() + 1);
92
93 const monomial_word *w = f.monoms;
94 for (int i = 0; i < f.len; i++)
95 {
96 long comp;
97 MI->to_expvector(w, lexp, comp);
98 w = w + MI->monomial_size(w);
99 for (int a = 0; a < M->n_vars(); a++) exp[a] = static_cast<int>(lexp[a]);
100 M->from_expvector(exp, m1);
101 ring_elem a = VA->ringElemFromElementArray(f.coeffs, i);
102 Nterm *g = R->make_flat_term(a, m1);
103 g->next = nullptr;
104 if (last[comp] == nullptr)
105 {
106 comps[comp] = g;
107 last[comp] = g;
108 }
109 else
110 {
111 last[comp]->next = g;
112 last[comp] = g;
113 }
114 }
115 vec result = nullptr;
116 for (int i = 0; i < F->rank(); i++)
117 {
118 if (comps[i] != nullptr)
119 {
120 vec v = R->make_vec(i, comps[i]);
121 R->add_vec_to(result, v);
122 comps[i] = nullptr;
123 last[i] = nullptr;
124 }
125 }
126
127 return result;
128}
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
bool to_expvector(const_packed_monomial m, ntuple_monomial result, long &result_comp) const
Definition moninfo.hpp:246
int monomial_size(const_packed_monomial m) const
Definition moninfo.hpp:160
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
virtual ring_elem make_flat_term(const ring_elem a, const_monomial m) const =0
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)
long monomial_word
Definition moninfo.hpp:77
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
#define newarray_atomic(T, len)
Definition newdelete.hpp:91
ntuple_monomials::Exponent ntuple_word
monomial_word * monoms
Definition f4-types.hpp:110
ElementArray coeffs
Definition f4-types.hpp:109
Nterm * next
Definition ringelem.hpp:157

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

Referenced by F4Computation::get_gb(), F4GB::show_gb_array(), and to_M2_matrix().