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

◆ coeffs_of_vec()

vec coeffs_of_vec ( exponent_table * E,
M2_arrayint vars,
const FreeModule * F,
vec f )
static

Definition at line 1807 of file matrix.cpp.

1815{
1816 if (f == nullptr) return nullptr;
1818 if (P == nullptr) return nullptr;
1819 const Monoid *M = P->getMonoid();
1820 monomial mon = M->make_one();
1821
1822 // At this point, we know that we have a polynomial ring
1823 int nvars = M->n_vars();
1824 exponents_t exp = newarray_atomic(int, nvars);
1825 exponents_t scratch_exp = newarray_atomic(int, 1 + vars->len);
1826
1827 vec result = nullptr;
1828 for (vec g = f; g != nullptr; g = g->next)
1829 {
1830 for (Nterm& h : g->coeff)
1831 {
1832 M->to_expvector(h.monom, exp);
1833 get_part_of_expvector(vars, exp, g->comp, scratch_exp);
1834 int val = static_cast<int>(exponent_table_get(E, scratch_exp));
1835 if (val > 0)
1836 {
1837 M->from_expvector(exp, mon);
1838 ring_elem t = P->make_flat_term(h.coeff, mon);
1839 vec v = P->make_vec(val - 1, t);
1840 v->next = result;
1841 result = v;
1842 }
1843 }
1844 }
1845 freemem(exp);
1846 freemem(scratch_exp);
1847 M->remove(mon);
1848 P->vec_sort(result);
1849 return result;
1850}
exponents::Exponents exponents_t
const Ring * get_ring() const
Definition freemod.hpp:102
void to_expvector(const_monomial m, exponents_t result_exp) const
Definition monoid.cpp:747
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
void from_expvector(const_exponents exp, monomial result) const
Definition monoid.cpp:742
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Definition monoid.hpp:89
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
virtual ring_elem make_flat_term(const ring_elem a, const_monomial m) const =0
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
vec make_vec(int r, ring_elem a) const
Definition ring-vecs.cpp:60
void vec_sort(vecterm *&f) const
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
long exponent_table_get(exponent_table *E, const exponent expon)
Definition exptable.c:71
#define monomial
Definition gb-toric.cpp:11
void freemem(void *s)
Definition m2-mem.cpp:103
VALGRIND_MAKE_MEM_DEFINED & result(result)
static void get_part_of_expvector(M2_arrayint vars, exponent big, int comp, exponent result)
Definition matrix.cpp:1788
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
#define newarray_atomic(T, len)
Definition newdelete.hpp:91
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160
Singly linked-list node carrying one term of a polynomial-ring element.
Definition ringelem.hpp:156

References Ring::cast_to_PolynomialRing(), Nterm::coeff, exponent_table_get(), freemem(), Monoid::from_expvector(), get_part_of_expvector(), FreeModule::get_ring(), PolynomialRing::getMonoid(), PolynomialRing::make_flat_term(), Monoid::make_one(), Ring::make_vec(), Nterm::monom, monomial, Monoid::n_vars(), newarray_atomic, Monoid::remove(), result(), Monoid::to_expvector(), and Ring::vec_sort().

Referenced by Matrix::coeffs().